dpvr49226 2015-01-14 19:13
浏览 54
已采纳

成功验证后,从当前的应用内购买获得收据?

I need help with parsing the Apple receipt verification response (sandbox). So user makes the in-app purchase with the iPhone app, and sends me the receipt, which I validate using Apple Services () by PHP. The validation is okay, I get a response, so now I need to pull out a transaction ID so I can store it in the DB, but I don't know which receipt I should pull from the in_app key. There simply isn't a single receipt in there, but an array containing all of the previous receipts also. This response is gotten after a "Consumable" and "Non-Renewing Subscription" was made in the app.

I found a few articles covering this, but EACH were refering to the receipt directly, as it was a single property, which contains all the data, but not here.

Eg. https://github.com/chrismaddern/iOS-Receipt-Validator-PHP looks promising, but in the end he's opening the receipt in this way:

return $decoded_response->receipt;

Doesn't work for my response. I guess this is the old response or something.

This one also https://gist.github.com/jamesstout/5073237.

I'm dealing with this for the first time, any help would be appreciated, please tell me if you need additional information, I'll be glad to point it out.

Apple Response after receipt validation UPDATE:

Note about items in in_app array, those are the receipts, but not sorted in any way, so for example, original_purchase_date_pst is for the first 4 items:

[0] 2015-01-12 10:33:13 Etc/GMT
[1] 2015-01-12 11:35:53 Etc/GMT
[2] 2015-01-12 11:12:36 Etc/GMT
[3] 2015-01-12 11:15:57 Etc/GMT

I mean I could iterate through the whole array, but it seems a bit weird that there isn't an easier way to fetch the latest receipt. And can I be sure that there will be the latest receipt in the list ? I'll need to fetch the transaction ID from it so I must be sure!

Thanks!

  • 写回答

1条回答 默认 最新

  • douxing2652 2015-01-15 22:30
    关注

    So I want to answer this coz it might help somebody outthere, especially if the one is dealing with this for the first time.

    The thing that caused this structure of response wasn't on the PHP side, but on the iPhone code side. I'm not sure what happened there, but I asked the dev to send me his description of the problem so here it is (quoting):

    The problem was in receipt encoding, it was Apple documentation fail:

    enter image description here

    Apple say to use standard method of base64encoding - after that we receiveD that strange response with that in_app receipts array.

    I found on github a class which makes verifications which makes many tests:

    1) sends receipt to Apple 2) checks if transactionID is unique 3) checks if receipt or transaction objects are valid

    And I saw that they didn't use standard encoding method before sending, but they use custom category NSData+Base64. I added this category to project and encoded the receipt with method from this category. After that I started to receive responses with new structure - the one we need - with no receipts in array but single receipt with all needed data.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常