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.

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

报告相同问题?

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测