【问题标题】:How do i send a receipt validation request to apple via JSON POST?如何通过 JSON POST 向苹果发送收据验证请求?
【发布时间】:2015-04-26 19:35:21
【问题描述】:

我已经看到了一些关于此的问题,但没有一个能真正解决我的问题,我得到的回复是 {"status":21002}

我的 PHP 代码:

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://sandbox.itunes.apple.com/verifyReceipt');
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLINFO_HEADER_OUT, true);

curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode(array('receipt-data' => $receipt)));

print curl_exec($curl);
print curl_getinfo($curl, CURLINFO_HEADER_OUT);

这是我发送给苹果的原始 HTTP 标头:

POST /verifyReceipt HTTP/1.1
Host: sandbox.itunes.apple.com
Accept: */*
Content-Type: application/json
Content-Length: 3382
Expect: 100-continue

$receipt 的值为:

{"receipt_type":"ProductionSandbox","app_item_id":0,"original_purchase_date": ....

我不会包括整个内容,但它包括应用内字段。

我也尝试过base64_encodejson_decode $receipt,但我得到了相同的回复。除了base64_encode 也让我"exception":"java.lang.IllegalArgumentException"

我确定发布是正确的,但我发送的内容有误吗? $receipt 是否应该与其他数据一起包装?还是我应该只发送这些数据的一个子集?

【问题讨论】:

    标签: php ios json api app-store


    【解决方案1】:

    从您的 $receipt 参数的值来看,您似乎正在混合本地和服务器收据验证。根据收据验证指南,特别是Validating Receipts With the App Store 部分,receipt-data 参数应该是“base64 编码的收据数据”。无需在客户端解码收据数据,只需将收据数据base64编码为字符串,并将其用于$receipt

    我发现在客户端对收据数据进行 base64 编码更简单,然后将其发送到 php.ini。这是文档示例的精简版本,由于您在谈论 iTunes 商店收据,我希望 obj-c 是您所需要的。要获取此字符串,请检索收据数据 url,从中读取数据,然后对其进行 base64 编码:

    NSURL *url = [[NSBundle mainBundle] appStoreReceiptURL];
    NSData *data = [NSData dataWithContentsOfURL:url];
    NSString *encoded = [data base64EncodedStringWithOptions:0];
    

    否则 POST 看起来确实正确。

    【讨论】:

      猜你喜欢
      • 2014-07-28
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 2017-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      相关资源
      最近更新 更多