【发布时间】:2014-07-11 10:58:44
【问题描述】:
我是 currently implementing 遵循 Apple 的收据验证编程指南的本地收据验证。我可以获得测试收据,但是当我尝试按如下方式解析它时(即按照指南清单 1-5 中的建议)
rval = asn_DEF_Payload.ber_decoder(NULL, &asn_DEF_Payload, (void **)&payload, pld, pld_sz, 0);
我收到以下错误(ASN_DEBUG() 的输出)
Expected: [UNIVERSAL 17], expectation failed (tn=0, tm=0)
asn_DEF_Payload(和其他 C 代码)已由 ans1c(ASN.1 编译器,v0.9.24)生成,并使用指南的清单 1-1 作为输入。我首先从NSBundle appStoreReceiptURL 指示的URL 中阅读了带有NSData dataWithContentsOfURL 的收据。 pld和pld_sz分别是数据的bytes和length。
此错误表示什么以及如何避免?
更新 当解析器在测试配方开始时需要标签 17(SET 和 SET OF)时,它看起来好像看到了标签 16(SEQUENCE 和 SEQUENCE OF)。清单 1-1 中 Payload 的定义确实是指 SET。
更新 我已经管理了asn1c 附带的转换器,如下所示。
export CFLAGS=-DPDU=Payload
make -f Makefile.am.sample
./progname -h
我还设法将收据从物理 iOS 设备复制到 OS X,例如 so。当我现在尝试使用./progname -d -iber -otext receipt 转储收据时,我得到以下输出:
AD: Processing receipt
AD: Decoding 4704 bytes
AD: decode(0) consumed 0+0b (4704), code 2
AD: Clean up partially decoded structure
AD: ofp 1, no=0, oo=0, dbl=0
receipt.ber: Decode failed past byte 0: Input processing error
更新嗯,this 在线 ASN.1 解码器可以很好地转储我的测试配方。 (不过,它以 SEQUENCE 开头。)这显然是一个签名,我的错误是(可能是)我应该从签名的信封中获取有效负载......
【问题讨论】:
标签: ios7 in-app-purchase asn.1 receipt receipt-validation