OGeek|极客世界-中国程序员成长平台

标题: php - iOS : How to get Server-side receipt validation? 的自动更新订阅 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 19:29
标题: php - iOS : How to get Server-side receipt validation? 的自动更新订阅

我刚刚完成开发我的应用程序,创建我的 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 上,服务器端的代码是否足以完成验证?)

(第二个例子: 使用 JSON 将 UDID 和 Base64 编码的收据发送到服务器,服务器询问应用商店,应用商店发送ok,服务器发送ok到app。如果是好的流程,我可以轻松搞定。Ticket 2 提前致谢。



Best Answer-推荐答案


这是我的解决方案:

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

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

关于php - iOS : How to get Server-side receipt validation? 的自动更新订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47892798/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4