我刚刚完成开发我的应用程序,创建我的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 ... */
...
我很好地理解了该图片所描述的验证过程:
我的主要问题是我不是服务器问题的大专家,如果你有一些我需要为收据验证编码的例子以及我必须使用的技术(PHP,Angular,或者其他...)。
(第一个例子:在那个ticket上,服务器端的代码是否足以完成验证?)
(第二个例子:这个过程是好的,发送UDID和Base64编码的收据到服务器的JSON,服务器询问应用商店,应用商店发送好的,服务器向应用程序发送确定。如果这是一个好的过程,我可以轻松地完成。Ticket 2 提前谢谢。
答案 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?)