2012-02-14 3 views
1

Мой постбэк PHP для Google бумажника платежей в приложении выглядит следующим образом:PHP постбэк URL Google Wallet 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 доллара»?

пс: Я изучил следующие документы:

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

Uh oh. Была проблема. Мы не смогли завершить покупку из-за технической проблемы. Опишите проблему ниже: К сожалению, мы не смогли подтвердить вашу покупку с сервером продавца. Ваш заказ отменен. Пожалуйста, свяжитесь с продавцом, если эта проблема продолжается.

ответ

1

Вы должны декодировать необработанные закодированные данные jwt, отправленные на ваш postback.php. Как минимум, ваш 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

Это на самом деле не дает вам OrderId, что Google требует Для этого вы можете использовать мой PHP решение обратной передачи на:. http://stackoverflow.com/a/16845353/ 1418360 – Bashevis

+0

@Bashevis Обратите внимание, что я использовал print_r, если вы его не заметили. Поле ответа содержит заказ, посмотрите [здесь] (https://developers.google.com/commerce/wallet/digital/docs/postback#jwt). В отличие от вашего комментария, это ** действительно ** дает заказ, который требует Google. –

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). «/ Библиотека/JWT.PHP ");

Пол

Смежные вопросы