gpt4 book ai didi

php - 应用内购买、php 后端和 iTunes 响应问题

转载 作者:行者123 更新时间:2023-12-03 21:20:37 25 4
gpt4 key购买 nike

以下是用于验证收据的示例 PHP 代码:

public static function getReceiptData($receipt, $isSandbox = false) {
if ($isSandbox)
$endpoint = 'https://sandbox.itunes.apple.com/verifyReceipt';
else
$endpoint = 'https://buy.itunes.apple.com/verifyReceipt';
$postData = "{\"receipt-data\":\"". base64_encode($receipt) ."\"}";
$ch = curl_init($endpoint);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
$response = curl_exec($ch);
$errno = curl_errno($ch);
$errmsg = curl_error($ch);
curl_close($ch);
if ($errno != 0) {
throw new sfException('connection_to_itunes_error', $errno);
}
// FIXME
mail('my_mail', 'Invalid Itunes Receipt', var_export($data, true) . "\n" . $postData);
$data = json_decode($response);
if (!is_object($data)) {
throw new sfException('invalid_response_data');

if (!isset($data->status) || $data->status != 0)
throw new sfException('invalid_receipt');
return $data;
}

就这么简单。

但我总是收到 iTunes 的异常响应:我尝试了很多 $postData 字符串的组合,但没有帮助。

iTunes 存在异常(exception)情况: java.lang.ClassCastException: java.lang.String cannot be cast to com.webobjects.foundation.NSDictionary对于 {"receipt-data":"MTAwMDAwMDAwMTU1MjM1Ng=="}

java.lang.NullPointerException对于 "{"receipt-data":"MTAwMDAwMDAwMTU1MjM1Ng=="}"

还有这么奇怪的错误 '<html><head><title>Error</title></head><body>Your request produced an error. <BR>[newNullResponse]</body></html>'对于字符串"{\"receipt-data\":\"MTAwMDAwMDAwMTU1MjM1Ng==\"}"

您能否提供用于收据验证的有效 json 字符串?

最佳答案

您的后端看起来是正确的。请检查 iPhone 代码以将原始交易收据十六进制作为字符串发送:

NSString *receiptStr = [[NSString alloc] initWithData:transaction.transactionReceipt 编码:NSUTF8StringEncoding];

顺便说一句,您的脚本也应该在没有base64_encode作为收据字符串的情况下工作

关于php - 应用内购买、php 后端和 iTunes 响应问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5145413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com