2009-08-02 5 views
1

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

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

Веб-сайт закодирован в PHP/MySQL.

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

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

Теперь в файле обработчика ответа есть блок переключателей с несколькими операторами 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

Но я не вижу в нем упоминания где-либо в официальной документации.

спасибо.

ответ

5

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


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

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

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


Другое государство, которое я использую, является «уведомлением об увеличении суммы».Вполне возможно, что есть способ использовать «ЗАРЯДНУЮ», но я не уверен, что «ЗАРЯДКА» предоставляет сумму, которая была фактически заряжена. ($ Amount_charged = $ данных [$ корень] [ 'полного заряда количество'] [ '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 
} 
+0

спасибо, еще одна вещь. Как я могу получить доступ к идентификатору элемента торгов (идентификатор, который я вручную установил для элемента с методом $ item-> SetMerchantItemId ($ id)). Будет ли это работать? $ order_id = $ data [$ root] ['merchant-item-id'] ['VALUE']; –

+0

Мне нужно, чтобы узнать, какую строку в моей локальной базе данных обновить. –

+0

Ответ добавлен в 'Ответ' :) – therealsix

1

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

Смежные вопросы