Я планирую интегрировать платежную систему 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
Но я не вижу в нем упоминания где-либо в официальной документации.
спасибо.
спасибо, еще одна вещь. Как я могу получить доступ к идентификатору элемента торгов (идентификатор, который я вручную установил для элемента с методом $ item-> SetMerchantItemId ($ id)). Будет ли это работать? $ order_id = $ data [$ root] ['merchant-item-id'] ['VALUE']; –
Мне нужно, чтобы узнать, какую строку в моей локальной базе данных обновить. –
Ответ добавлен в 'Ответ' :) – therealsix