2012-02-14 70 views
1

我對谷歌錢包應用程序內支付回傳的PHP是這樣的:PHP回傳網址,谷歌錢包IAP

<?php 
$payload = array(
    "iss" => $sellerIdentifier, 
    "aud" => "Google", 
    "typ" => "google/payments/inapp/item/v1", 
    "exp" => time() + 3600, 
    "iat" => time(), 
    "request" => array (
    "name" => "pizza ", 
    "description" => "yum yum", 
    "price" => "10.50", 
    "currencyCode" => "USD", 
    "sellerData" => "", 
) 
); 
$testToken = JWT::encode($payload, $sellerSecret); 
?> 

我有兩個問題:

1. 爲什麼我看到這個錯誤?呃哦。有一個問題。由於技術問題,我們無法完成您的購買。下面的問題的詳細信息:不幸的是,我們無法確認您與商家的服務器購買。您的訂單已被取消。如果問題仍然存在,請與商家聯繫。

2. 如果我有多個物品出售,這項工作如何?上面的例子php可以讓你購買一個'10.50美元的比薩',我怎麼能添加另一個項目,比如'2.99美元的熱狗'?

PS:我已經研究了以下文件:

https://developers.google.com/in-app-payments/docs/tutorial#4

https://developers.google.com/in-app-payments/docs/jsreference#jwt

https://developers.google.com/in-app-payments/docs/postback

謝謝您的時間。

//更新!

postback.php: require_once'JWT.php';

JWT.php: $ json = json_encode($ input,JSON_UNESCAPED_SLASHES);

呃哦。有一個問題。 由於技術問題,我們無法完成您的購買。 下面的問題的詳細信息: 很抱歉,我們無法確認您使用商家的 服務器進行購買。您的訂單已被取消。如果 這個問題仍然存在,請聯繫商家。

回答

1

你應該解碼發送到你的postback.php的原始編碼的jwt數據。 最低限度你的postback.php應該看起來像下面(假設你的postback.php託管在Apache服務器上)。希望這可以幫助

<?php 
require_once(dirname(__FILE__) . "JWT.php"); 

$response = isset($HTTP_RAW_POST_DATA) ? 
    $HTTP_RAW_POST_DATA : file_get_contents("php://input"); 
$response = substr_replace($response, "", 0, 4); //remove "jwt=" from raw http data 
$response = JWT::decode($response, "your secret key here"); 
print_r($response->response); 
?> 
+0

這實際上不會給你訂單ID,谷歌需要,你可以用我的PHP回傳解決方案上。http://stackoverflow.com/a/16845353/ 1418360 – Bashevis 2013-05-30 20:30:56

+0

@Bashevis請注意,如果您忽略了它,我使用了print_r。響應字段包含orderid,請看[這裏](https://developers.google.com/commerce/wallet/digital/docs/postback#jwt )。與你的評論相反,這**實際上給了谷歌需要的orderid。 – 2013-06-04 07:07:11

0

是你的postback.php訪問沒有.htaccess密碼和用戶名?我有一會兒 - 驅使我堅果...直到我想通意識到我postback.php被密碼保護-.-

0

做熱狗還做到這一點:

<?php 
$cake_payload = array(
    "iss" => $sellerIdentifier, 
    "aud" => "Google", 
    "typ" => "google/payments/inapp/item/v1", 
    "exp" => time() + 3600, 
    "iat" => time(), 
    "request" => array (
    "name" => "cake", 
    "description" => "yum yum", 
    "price" => "10.50", 
    "currencyCode" => "USD", 
    "sellerData" => "", 
) 
); 
$hotdog_payload = array(
    "iss" => $sellerIdentifier, 
    "aud" => "Google", 
    "typ" => "google/payments/inapp/item/v1", 
    "exp" => time() + 3600, 
    "iat" => time(), 
    "request" => array (
    "name" => "hotdog", 
    "description" => "yum yum", 
    "price" => "5.99", 
    "currencyCode" => "USD", 
    "sellerData" => "", 
) 
); 

$cake_token = JWT::encode($cake_payload, $sellerSecret); 
$hotdog_token = JWT::encode($hotdog_payload, $sellerSecret); 
?> 

傳遞既在JavaScript單獨購買()函數(所以purchase_hotdog() and purchase_cake()

0

你舉的例子非常完美@Pawan謝謝。我唯一需要的變化是路徑JWT.php上。

我現在用

require_once(dirname(FILE))。 「/ lib目錄/ JWT。PHP的「);

保羅