iOS的自动续订订阅:如何获取服务器端收据验证?

时间:2017-12-19 18:05:26

标签: php ios server app-store itunesconnect

我刚刚完成开发我的应用程序,创建我的Apple组织帐户,在iTunes连接方面创建我需要的所有内容,但我现在的问题是开发 server-side receipt validation (因为Validating Receipts Locally似乎在中间安全问题中有一些潜在的人)。

...
    // Load the receipt from the app bundle.
    NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
    NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];
    if (!receipt) { /* No local receipt -- handle the error. */ }

    /* ... Send the receipt data to your server ... */
...

我很好地理解了该图片所描述的验证过程:

enter image description here

我的主要问题是我不是服务器问题的大专家,如果你有一些我需要为收据验证编码的例子以及我必须使用的技术(PHP,Angular,或者其他...)。

第一个例子:在那个ticket上,服务器端的代码是否足以完成验证?)

第二个例子:这个过程是好的,发送UDID和Base64编码的收据到服务器的JSON,服务器询问应用商店,应用商店发送好的,服务器向应用程序发送确定。如果这是一个好的过程,我可以轻松地完成。Ticket 2 提前谢谢。

1 个答案:

答案 0 :(得分:0)

这是我的解决方案:

我使用我的服务器验证收据,如下所示:

https://github.com/aporat/store-receipt-validator

use ReceiptValidator\iTunes\Validator as iTunesValidator;

$validator = new iTunesValidator(iTunesValidator::ENDPOINT_PRODUCTION); // Or iTunesValidator::ENDPOINT_SANDBOX if sandbox testing

$receiptBase64Data = 'ewoJ
......
OVG8xTlNCRmRHTXZSMDFVSWpzS2ZRPT0iOwoJImVudmlyb25tZW50IiA9ICJTYW5kYm94IjsKCSJwb2QiID0gIjEwMCI7Cgkic2lnbmluZy1zdGF0dXMiID0gIjAiOwp9';

try {
  $response = $validator->setReceiptData($receiptBase64Data)->validate();
  // $sharedSecret = '1234...'; // Generated in iTunes Connect's In-App Purchase menu
  // $response = $validator->setSharedSecret($sharedSecret)->setReceiptData($receiptBase64Data)->validate(); // use setSharedSecret() if for recurring subscriptions
} catch (Exception $e) {
  echo 'got error = ' . $e->getMessage() . PHP_EOL;
}

if ($response->isValid()) {
  echo 'Receipt is valid.' . PHP_EOL;
  echo 'Receipt data = ' . print_r($response->getReceipt()) . PHP_EOL;
} else {
  echo 'Receipt is not valid.' . PHP_EOL;
  echo 'Receipt result code = ' . $response->getResultCode() . PHP_EOL;
}

我服务器上的WS发送给我好不好。

(对于不适合在iPad上进行的本地流程,您可以在此处找到:I'm getting 21004 as status value in reply from apple's sandbox server testing auto-renewable subscriptions in ios?