IPN Google Checkout

Я настроил кнопку «Купить сейчас», которая имеет заданное значение, и правильно отправляет ее на сервер Google, показывает страницу «Оплата сейчас» и т. д. Я также отправляю дополнительный параметр, используя частные данные продавца или что-то еще.

Я делаю все это через 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 (когда они нажимают кнопку «Купить сейчас»)

и это код для «обработки», которая в настоящее время не работает.

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);
   }

Любые идеи?


person Bowersbros    schedule 22.07.2012    source источник


Ответы (1)


Чтобы получить информацию о статусе заказа и личные данные продавца, вам необходимо прослушать уведомления, отправленные на ваш URL-адрес обратного вызова. См. приведенную ниже документацию о том, как интегрироваться с Checkout Notifications API.

http://support.google.com/checkout/sell/bin/answer.py?hl=ru&answer=70647

http://support.google.com/checkout/sell/bin/answer.py?hl=ru-GB&answer=134463

https://developers.google.com/checkout/developer/Google_Checkout_XML_API_Notification_API

Когда вы получите обратно уведомление, прочитайте свои пользовательские данные из поля личных данных продавца.

См. этот ответ для решения. к аналогичному вопросу.

Вы также можете взглянуть на библиотеки примеров кода Checkout для разных языков:

https://developers.google.com/checkout/samplecode

person Mihai Ionescu    schedule 23.07.2012
comment
Спасибо. Это было очень полезно, однако теперь я получаю сообщения об ошибках в консоли интеграции, говорящих о внутренней ошибке сервера. - person Bowersbros; 23.07.2012
comment
Трудно сказать, где проблема. Вы пробовали библиотеки примеров PHP? Если вы продаете цифровые товары (то есть доставка не требуется), взгляните на API платежей в приложении, который намного проще реализовать (developers.google.com/in-app-payments). - person Mihai Ionescu; 28.07.2012
comment
Спасибо за ответ. Основная проблема, с которой я столкнулся с этими файлами, заключалась в том, что количество несоответствий, которые они содержат, затрудняет понимание. Мне удалось это исправить. Спасибо. Еще одна вещь, можно ли отправить им свой запрос через GET? чтобы я мог использовать перенаправление местоположения header() для отправки им данных? У меня есть SSL-сертификат, поэтому данные в безопасности. - person Bowersbros; 30.07.2012