1

現在、Apple のReceipt Validation Programming Guideに従って、ローカルのレシート検証を実装しています。テスト レシートを取得できますが、次のように解析しようとすると (つまり、ガイドのリスト 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、ガイドのリスト 1-1 を入力として (ASN.1 コンパイラ、v0.9.24) によって生成されています。NSData dataWithContentsOfURLで示された URL から で領収書を最初に読みましたNSBundle appStoreReceiptURLpldpld_szは、それぞれデータのbyteslengthです。

このエラーは何を意味し、どのように回避できますか?

更新パーサーは、テスト レシピの先頭でタグ 17 (SET および SET OF) を予期しているときに、タグ 16 (SEQUENCE および SEQUENCE OF) を見ているように見えます。リスト1-1のペイロードの定義は実際にSETを参照しています。

更新次のように付属のコンバーターを管理しましたasn1c

export CFLAGS=-DPDU=Payload
make -f Makefile.am.sample
./progname -h

また、物理 iOS デバイスから OS X にレシートをコピーすることもできまし。レシートをダンプしようとすると、次の./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

更新うーん、このオンライン ASN.1 デコーダーは私のテスト レシピを問題なくダンプできます。(ただし、SEQUENCEで始まります。)明らかに署名であり、署名されたエンベロープ内からペイロードを取得する必要があるという私の間違いは(そうかもしれません)...

4

1 に答える 1

0

Apple のReceipt Validation Programming GuideのValidating Receipts Locally の紹介とその図 1-1の両方で、解決策は実際に私を直視していました。

最も外側の部分 (図では Receipt とラベル付けされています) は、RFC 2315 で定義されている PKCS #7 コンテナーであり、そのペイロードは ITU-T X.690 で定義されている ASN.1 (Abstract Syntax Notation One) を使用してエンコードされています。

署名をチェックすることにより (リスト 1-4)、ペイロードへのアクセスも取得します (リスト 1-5 の解析用)。

于 2014-07-11T12:39:45.820 に答える