在Python中本地验证iTunes IAP收据。

2 投票
2 回答
2348 浏览
提问于 2025-04-18 09:45

我刚接触OpenSSL,想在Python中本地验证iTunes的应用内购买收据。

收据验证编程指南(https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateLocally.html)上说:

最外层的部分(图中标记为收据)是一个PKCS #7容器,这个定义来自RFC 2315。它的内容是用ASN.1(抽象语法标记一)编码的,这个标准由ITU-T X.690定义。这个内容包含了一组收据属性。每个收据属性都有类型、版本和数值。

import OpenSSL

f = open('sample_IAP_receipt_base64.txt', 'r').read()

type = OpenSSL.crypto.FILETYPE_ASN1
data = OpenSSL.crypto.load_pkcs7_data(type, f)
print f

这个测试似乎产生了一个错误:

    data = OpenSSL.crypto.load_pkcs7_data(type, f)
OpenSSL.crypto.Error: [('asn1 encoding routines', 'ASN1_CHECK_TLEN', 'wrong tag'), ('asn1 encoding routines', 'ASN1_ITEM_EX_D2I', 'nested asn1 error')]

有没有什么想法可以让它正常工作?

2 个回答

0

唯一能在本地实现这个功能的就是这个库:

https://github.com/SilentCircle/iap-local-receipt

1

我建议你使用一个现成的Python库,itunes-iap就是一个不错的选择:

https://pypi.python.org/pypi/itunes-iap

撰写回答