当你付款成功能后,会收到一个从apple来的receipt.,内容大概6000多个字符的字符串:
MXABCEFEFDSFSDF...
通过这个字符串,可以去apple验证这个串是否是合法的。拿这个串去验证时,会返回一个json。格式如下:
{
"status": 0,
"environment": "Production",
"receipt": {
"receipt_type": "Production",
省略一部分
"in_app": [
{
"quantity": "1",
"product_id": "product1",
"transaction_id": "123456790123456",
省略一部分
},
{
"quantity": "1",
"product_id": "product2",
"transaction_id": "123456790654321",
省略一部分
....可能是多个product
]
}
}
这里的transaction_id,应该是为一的。在网上找了一些资料,没看到哪里说这个肯定是唯一的,但很人说可能是唯一的,估计至少对于每个APP来说,可能是唯一的。
方案:
每次交易结果来后,把Receipt和transaction_id都保存一份(一笔处理里有多个transaction_id的话,都要保存一下)
然后进行下面的验证:
1,先去apple验证recipte的正确性
2,然后查看receipt,在我们数据库里有没有重复的
3,再看看一次交易里的所有transaction_id,在我们数据库里有没有重复的
下面是一些资料官方资料,可以看看。
https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Introduction.html#//apple_ref/doc/uid/TP40008267-CH104-SW1
https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW1
https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ReceiptFields.html#//apple_ref/doc/uid/TP40010573-CH106-SW12
https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introduction.html
下面是一个有点年头的防黑客的资料:
http://miha.hribar.org/2012/09/validate-in-app-purchase-receipts/
下面是一个很好的iap入门资料:
http://blog.csdn.net/xyxjn/article/details/16887151