Несколько вопросов о Google Checkout - PullRequest
1 голос
/ 02 августа 2009

Я планирую интегрировать платежную систему Google Checkout на веб-сайте социальной сети. Идея состоит в том, что участники могут покупать «токены» за реальные деньги (которые являются своего рода валютой сайта), а затем они могут покупать доступ к некоторому дополнительному контенту на сайте и т. Д.

Что я хочу сделать, это создать кнопку Google Checkout, которая переводит участника на страницу оформления заказа, где он оплачивает свою кредитную или дебетовую карту. Я хочу, чтобы Google Checkout уведомлял мой сервер о том, была ли покупка токенов успешной (если была списана кредитная / дебетовая карта), чтобы я мог обновить локальную базу данных.

Сайт написан на PHP / MySQL.

Я скачал образец кода PHP здесь: code.google.com/p/google-checkout-php-sample-code/wiki/Documentation

Я знаю, как создать кнопку Google Checkout, и я также разместил файл responsehandlerdemo.php на своем сервере. Это файл, на который Google Checkout должен отправлять ответ (конечно, я указал путь к файлу в учетной записи Google Merchant).

Теперь в файле обработчика ответа есть блок переключателя с несколькими инструкциями case. Что означает, что платеж прошел успешно, и я могу добавить токены к учетной записи участника в локальной базе данных?

  switch ($root) {
case "request-received": {
  break;
}
case "error": {
  break;
}
case "diagnosis": {
  break;
}
case "checkout-redirect": {
  break;
}
case "merchant-calculation-callback": {
  // Create the results and send it
  $merchant_calc = new GoogleMerchantCalculations($currency);

  // Loop through the list of address ids from the callback
  $addresses = get_arr_result($data[$root]['calculate']['addresses']['anonymous-address']);
  foreach($addresses as $curr_address) {
    $curr_id = $curr_address['id'];
    $country = $curr_address['country-code']['VALUE'];
    $city = $curr_address['city']['VALUE'];
    $region = $curr_address['region']['VALUE'];
    $postal_code = $curr_address['postal-code']['VALUE'];

    // Loop through each shipping method if merchant-calculated shipping
    // support is to be provided
    if(isset($data[$root]['calculate']['shipping'])) {
      $shipping = get_arr_result($data[$root]['calculate']['shipping']['method']);
      foreach($shipping as $curr_ship) {
        $name = $curr_ship['name'];
        //Compute the price for this shipping method and address id
        $price = 12; // Modify this to get the actual price
        $shippable = "true"; // Modify this as required
        $merchant_result = new GoogleResult($curr_id);
        $merchant_result->SetShippingDetails($name, $price, $shippable);

        if($data[$root]['calculate']['tax']['VALUE'] == "true") {
          //Compute tax for this address id and shipping type
          $amount = 15; // Modify this to the actual tax value
          $merchant_result->SetTaxDetails($amount);
        }

        if(isset($data[$root]['calculate']['merchant-code-strings']
            ['merchant-code-string'])) {
          $codes = get_arr_result($data[$root]['calculate']['merchant-code-strings']
              ['merchant-code-string']);
          foreach($codes as $curr_code) {
            //Update this data as required to set whether the coupon is valid, the code and the amount
            $coupons = new GoogleCoupons("true", $curr_code['code'], 5, "test2");
            $merchant_result->AddCoupons($coupons);
          }
         }
         $merchant_calc->AddResult($merchant_result);
      }
    } else {
      $merchant_result = new GoogleResult($curr_id);
      if($data[$root]['calculate']['tax']['VALUE'] == "true") {
        //Compute tax for this address id and shipping type
        $amount = 15; // Modify this to the actual tax value
        $merchant_result->SetTaxDetails($amount);
      }
      $codes = get_arr_result($data[$root]['calculate']['merchant-code-strings']
          ['merchant-code-string']);
      foreach($codes as $curr_code) {
        //Update this data as required to set whether the coupon is valid, the code and the amount
        $coupons = new GoogleCoupons("true", $curr_code['code'], 5, "test2");
        $merchant_result->AddCoupons($coupons);
      }
      $merchant_calc->AddResult($merchant_result);
    }
  }
  $Gresponse->ProcessMerchantCalculations($merchant_calc);
  break;
}
case "new-order-notification": {
  $Gresponse->SendAck();
  break;
}
case "order-state-change-notification": {
  $Gresponse->SendAck();
  $new_financial_state = $data[$root]['new-financial-order-state']['VALUE'];
  $new_fulfillment_order = $data[$root]['new-fulfillment-order-state']['VALUE'];

  switch($new_financial_state) {
    case 'REVIEWING': {
      break;
    }
    case 'CHARGEABLE': {
      //$Grequest->SendProcessOrder($data[$root]['google-order-number']['VALUE']);
      //$Grequest->SendChargeOrder($data[$root]['google-order-number']['VALUE'],'');
      break;
    }
    case 'CHARGING': {
      break;
    }
    case 'CHARGED': {
      break;
    }
    case 'PAYMENT_DECLINED': {
      break;
    }
    case 'CANCELLED': {
      break;
    }
    case 'CANCELLED_BY_GOOGLE': {
      //$Grequest->SendBuyerMessage($data[$root]['google-order-number']['VALUE'],
      //    "Sorry, your order is cancelled by Google", true);
      break;
    }
    default:
      break;
  }

  switch($new_fulfillment_order) {
    case 'NEW': {
      break;
    }
    case 'PROCESSING': {
      break;
    }
    case 'DELIVERED': {
      break;
    }
    case 'WILL_NOT_DELIVER': {
      break;
    }
    default:
      break;
  }
  break;
}
case "charge-amount-notification": {
  //$Grequest->SendDeliverOrder($data[$root]['google-order-number']['VALUE'],
  //    <carrier>, <tracking-number>, <send-email>);
  //$Grequest->SendArchiveOrder($data[$root]['google-order-number']['VALUE'] );
  $Gresponse->SendAck();
  break;
}
case "chargeback-amount-notification": {
  $Gresponse->SendAck();
  break;
}
case "refund-amount-notification": {
  $Gresponse->SendAck();
  break;
}
case "risk-information-notification": {
  $Gresponse->SendAck();
  break;
}
default:
  $Gresponse->SendBadRequestStatus("Invalid or not supported Message");
  break;

}

Полагаю, дело в "ЗАРЯЖЕННОМ", я прав?

Второй вопрос. Нужен ли мне SSL-сертификат для получения ответа от Google Checkout? В соответствии с этим я делаю: groups.google.com/group/google-checkout-api-php/browse_thread/thread/10ce55177281c2b0

Но я не вижу, чтобы это упоминалось в официальной документации.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 03 августа 2009

Я интегрировал это в свой сайт более 6 месяцев назад. Громкость очень низкая, но пока работает хорошо.


Первое, о чем вам следует беспокоиться, это «ЗАРЯДНО». Это означает, что кредитная карта была одобрена для транзакции, но фактически она не будет списывать средства, пока вы не предпримете действия. Чтобы отправить запрос на начисление платы, просто удалите комментарий в двух строках под заголовком CHARGEABLE. Вы можете изменить свои настройки, чтобы она автоматически заряжала карту, в «Настройки»> «Настройки», но вы можете просто снять комментарий с 2 ​​строк и оставить настройки открытыми.

Обратите внимание, что вы, возможно, захотите дождаться «уведомления о риске» и определить, прошла ли проверка риска перед утверждением сбора ($ data [$ root] ['risk-information'] ['права на получение защита '] [' VALUE ']). Хотя, кажется, вы говорите о цифровых товарах, возможность возврата средств может не иметь значения для вас.

В какой-то момент я уверен, что вам также следует проверить, что в запросе содержится достаточно информации, чтобы вы могли связать средства с каким-либо счетом, прежде чем начислять его, но, возможно, это просто моя паранойя.


Другое состояние, которое я использую, - «уведомление о сумме платежа». Вполне возможно, что есть способ использовать «CHARGED», но я не уверен, что «CHARGED» предоставляет сумму, которая была фактически списана. ($ amount_charged = $ data [$ root] ['total-charge-amount'] ['VALUE'];)


Что касается SSL, то при проверке местоположения, где вы вводите URL обратного вызова, указывается следующее: «Укажите URL-адрес для Google, чтобы уведомлять вас о новых заказах и изменениях в состоянии заказа. Вы должны указать URL-адрес сервера, на котором запущен 128-битный SSLv3 или TLS» *


Ответ на ваш комментарий: Я делаю это в разделе «new_order_notification», не уверен, что вы можете сделать это в другом месте.

$items = get_arr_result( $data[$root]['shopping-cart']['items']['item'] ); 
foreach( $items as $item ) { 
   if( !isset ( $item['merchant-item-id']['VALUE'] ) ) { 
     //error 
     return; 
   } 
   $request_item_id = $item['merchant-item-id']['VALUE']; 
   //save your item id with corresponding google order id for further processing
}
1 голос
/ 19 ноября 2010

Да, "Chargeable" - это первое, на что нужно обратить внимание в заказе Google Checkout. Когда вы нажимаете «Chargeable», появляется окно для фактической оплаты заказа НО . Убедитесь, что «Право на защиту» - True до фактической оплаты заказа. Это гарантирует, что платеж покрывается гарантией оплаты Google. Вы можете увидеть его в разделе «Проверка кредитоспособности покупателя» в Google Checkout.

...