Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 谷歌签出IPN_Php_Paypal_Paypal Ipn_Google Checkout - Fatal编程技术网

Php 谷歌签出IPN

Php 谷歌签出IPN,php,paypal,paypal-ipn,google-checkout,Php,Paypal,Paypal Ipn,Google Checkout,我已经设置了一个buy now按钮,该按钮有一个设定值,并将其正确发送到Google服务器,并显示pay now页面等。我还使用商户私有数据或其他名称发送了一个附加参数 我做这一切的方式是通过旋度,所以用户在没有我发现并阻止的情况下无法强制降低电荷。(对所有输入等进行验证) 既然我在传递所有的数据。我需要一种方法把它全部取回,而我目前还不确定怎么做 我已经看过这些文件了,只是被它们弄糊涂了 我知道我需要弄清楚它是否可以收费,如果可以,然后自动为他们处理收费。但是,有没有一种方法可以做到这一点,当

我已经设置了一个buy now按钮,该按钮有一个设定值,并将其正确发送到Google服务器,并显示pay now页面等。我还使用商户私有数据或其他名称发送了一个附加参数

我做这一切的方式是通过旋度,所以用户在没有我发现并阻止的情况下无法强制降低电荷。(对所有输入等进行验证)

既然我在传递所有的数据。我需要一种方法把它全部取回,而我目前还不确定怎么做

我已经看过这些文件了,只是被它们弄糊涂了

我知道我需要弄清楚它是否可以收费,如果可以,然后自动为他们处理收费。但是,有没有一种方法可以做到这一点,当我收到钱时,我可以用我发送给他们的额外数据更新数据库?如果是的话,我会怎么做

这是我当前的代码:

$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);
关于谷歌结账的流程(当他们点击buy now按钮时)

这是目前不起作用的“处理”代码

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

有什么想法吗?

要获取订单状态信息和商户私人数据,您需要收听发送到回拨URL的通知。请参阅下面的文档,了解如何与签出通知API集成

收到通知后,从商户专用数据字段读取您的自定义数据

有关类似问题的解决方案,请参见此

您可能还希望查看各种语言的签出示例代码库:


谢谢。这非常有帮助,但是现在我在集成控制台中收到错误,称为内部服务器错误。很难说问题出在哪里。您尝试过PHP示例库了吗?如果您正在销售数字商品(即无需发货),请查看应用内支付API,该API实现起来更简单(developers.google.com/in-app payments)。感谢您的回复。我在这些文件中遇到的主要问题是,其中包含的不确定因素太多,难以理解。我已经设法解决了这个问题。非常感谢。还有一件事,是否可以通过GET将您的请求发送给他们?这样我就可以使用header()位置重定向将数据发送给他们了?我有SSL证书,因此数据是安全的。