关于apple pay防止伪造的付款成功的方案

当你付款成功能后,会收到一个从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

你可能感兴趣的:(ios)