MockIAP ライブラリを使用して Windows Phone 8 アプリケーションでアプリ内購入をテストしましたが、すべて問題ありませんでした。また、ここからテスト Microsoft マニフェストを使用して、サーバーで受信署名検証コード (Robert Richards による xmlseclibs に基づく) をテストし、検証に合格しました。ベータ モードではアプリ内は無料で、署名付きの領収書は発行されないと聞きましたが、ベータ版のアプリを作成して購入しようとすると、署名付きの領収書があり、バージョンがありました。 2.0 (msft サンプルは 1.0)!
私は検証を追跡し、両方の領収書 (msft サンプルと私が入手したもの) が同じ CanonicalizationMethod、SignatureMethod、Transforms、および DigestMethod を持っていることを発見しました。msft サンプルではすべて問題ありませんが、ダイジェスト値 (Signature/SignedInfo/Reference/領収書の DigestValue) が間違っていました。
また、ダイジェスト検証のみをコメントすると、署名検証が成功することがわかりました。したがって、悪の根源はこの間違ったダイジェスト値にあります。
ひょっとして意図的に作っているのではないでしょうか?ベータアプリで作業する場合、ダイジェストチェックに注意を払うべきではないということですか?それとも、MSFT が使用する文書化されていないダイジェスト メソッドがありますか?
更新: MSFT検証の例で返されたレシートを確認しようとしましたが、検証に失敗しました。WP8 アプリ内購入レシートの検証の経験がある人はいますか? 形式をバージョン 2.0 に変更した後、アプリケーション開発者は、レシートが検証に合格しないため、検証の問題が発生するはずです。
不要な文字をすべて削除したので、コードはサンプル WP8 と Windows ストアのレシートの両方で動作しますが、これらの新しい WP8 レシートを確認するには、ダイジェスト チェックをスキップする必要があります。これを本番環境で試してみます。