2012-07-22 83 views
0

我已經設置了一個立即購買按鈕,它具有設置值,並且正確發送到Google服務器並顯示付款頁面等。我還使用商家 - 私人數據發送附加參數或者不管它叫什麼。Google Checkout IPN

我所做的所有這些事情都是通過捲曲來實現的,因此用戶無法在沒有找到並停止它的情況下強制降低費用。 (對所有輸入進行驗證等)。

所以,因爲我通過了所有的數據。我需要一種方法將其全部取回,而我目前還不確定如何去做。

我已經閱讀了文檔,我只是被他們弄糊塗了。

我知道我需要確定它是否需要付費,如果它是自動處理它們的費用。但有沒有辦法讓它發生這種情況,那麼當我收到錢時,我可以用發送給他們的額外數據更新數據庫?如果是這樣,我將如何做到這一點?

這是我當前的代碼:

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

用於向谷歌結帳過程中(當他們點擊立即購買按鈕)

,這是爲「處理」,這是目前不是代碼加工。

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

任何想法?

回答

0

要獲取訂單狀態信息和商傢俬人數據,您需要收聽發送到回叫網址的通知。請參閱下文有關如何與Checkout Notifications 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

當你回來的通知,從商家專用數據字段讀您的自定義數據。

看到這個answer爲解決類似的問題。

您可能還需要看看各種語言的結帳示例代碼庫:

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

+0

感謝you.Thats已經相當有幫助的,但是現在我在集成控制檯接收錯誤說內部服務器錯誤。 – Bowersbros 2012-07-23 17:42:19

+0

請參閱編輯過的文章:) – Bowersbros 2012-07-23 17:47:22

+0

很難說出問題所在。你嘗試過PHP示例庫嗎?如果您是銷售數字商品(即無需付運),則可以查看應用內支付API,實施起來要簡單得多(developers.google.com/in-app-payments)。 – 2012-07-28 18:52:12