Google Checkout IPN
Я установил кнопку "Купить сейчас", которая имеет заданное значение, и она правильно отправляется на сервер Google, отображается страница оплаты сейчас и т. Д. Я также отправляю дополнительный параметр, используя merchant-private-data или как он там называется.
Я делаю все это с помощью cURL, поэтому у пользователя нет возможности принудительно снизить заряд, пока я не выясню и не остановлю его. (Проверка выполняется на всех входах и т. Д.).
Так как я передаю все эти данные. Мне нужен способ получить все это обратно, и в настоящее время я не уверен, как это сделать.
Я уже прочитал документы, и я просто запутался в них.
Я знаю, что мне нужно выяснить, является ли он заряжаемым или нет, и если это так, то автоматически обрабатывает заряд для них. Но есть ли способ сделать так, чтобы это произошло, и тогда, когда я получу деньги, я смогу обновить базу данных с помощью дополнительных данных, которые я им отправил? Если так, как бы я это сделал?
Это мой текущий код:
$fields = array(
'item_name_1'=>urlencode($name),
'item_description_1'=>urlencode($name . ' of [xxx]'),
'item_quantity_1'=>urlencode('1'),
'item_price_1'=>urlencode($value),
'item_currency_1'=>urlencode('GBP'),
'_charset_'=>'utf-8',
'shopping-cart.merchant-private-data' => '[username]',
'shopping-cart.items.item-1.digital-content.description' => 'Your account has been upgraded. 


'shopping-cart.items.item-1.digital-content.email-delivery' => 'true'
);
$fields_string = "";
foreach($fields as $key=>$value)
{
$fields_string .= $key.'='.$value.'&';
}
rtrim($fields_string,'&');
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,'https://checkout.google.com/api/checkout/v2/checkoutForm/Merchant/8048xxx');
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($ch,CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
$result = curl_exec($ch);
curl_close($ch);
для процесса к Google Checkout (когда они нажимают кнопку купить сейчас)
и это код для "обработки", которая в настоящее время не работает.
if(isset($_POST['serial-number'])){
// new order made
$sn = $_POST['serial-number'];
$id = '804xxx';
$key = 'xxxxx';
$fields = array('_type'=>'notification-history-request',
'serial-number'=>urlencode($sn));
$fields_string = "";
foreach($fields as $key=>$value) {
$fields_string .= $key.'='.$value.'&';
}
rtrim($fields_string, '&');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://checkout.google.com/api/checkout/v2/reportsForm/Merchant/8048xxx');
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Basic ' . base64_encode($id . ':' . $key), 'Content-Type: application/xml;charset=UTF-8', 'Accept: application/xml;charset=UTF-8'));
$result = curl_exec($ch);
if(curn_errno($ch)){
$w = fopen('log.text', 'w+');
fwrite($w, 'Error: ' . curl_error($ch));
fclose($w);
} else {
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$f = fopen('test.txt', 'w+');
fwrite($f, 'Status: ' . $status . ' ' . print_r($result, true));
fclose($f);
}
curl_close($ch);
}
Есть идеи?
1 ответ
Чтобы получить информацию о статусе заказа и личные данные продавца, вам необходимо прослушать уведомления, отправленные на ваш URL обратного вызова. Ниже приведены документы по интеграции с API Checkout Notification API.
http://support.google.com/checkout/sell/bin/answer.py?hl=en&answer=70647
http://support.google.com/checkout/sell/bin/answer.py?hl=en-GB&answer=134463
https://developers.google.com/checkout/developer/Google_Checkout_XML_API_Notification_API
Когда вы получите уведомление, прочитайте ваши пользовательские данные из поля merchant-private-data.
Посмотрите этот ответ для решения аналогичной проблемы.
Вы также можете посмотреть примеры библиотек кода Checkout для разных языков: