問題タブ [receipt-validation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - App Store サーバーへの接続に使用する SSL 証明書が EV 証明書であることを確認しますか?
Appleはここで、アプリ内購入の領収書の検証中に次のことを提案しています。
App Store サーバーへの接続に使用する SSL 証明書が EV 証明書であることを確認します
iOS の Objective-C ではどのように正確に行うのでしょうか?
c# - ベータ版アプリで Windows Phone 8 のアプリ内購入を行うと、間違ったダイジェストの署名済みレシートが返される
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 レシートを確認するには、ダイジェスト チェックをスキップする必要があります。これを本番環境で試してみます。
ios - アプリのレシート内の iOS 日付形式の問題
領収書を確認するときに、App Store から返された JSON を解析しています。
パブリック フィールドの 1 つに original_purchase_date があります。ただし、ここで返される日付は「2014-05-30 14:05:51 Etc/GMT」の形式です。問題は、これを比較しようとすると、接尾辞 (Etc/GMT) が問題を引き起こしているように見えることです。このサフィックスは任意のタイムゾーン (America/Los_Angeles など) になる可能性があるため、これを管理する方法を理解しようとしています。
これを使用可能な形式に変換する方法はありますか?
領収書には、1970 年からの秒数である original_purchase_date_ms フィールドもあると思いますが、これはプライベート フィールド (どのドキュメントでも呼び出されていません) であるため、その使用に依存したくありません。アプリが拒否されるか、Apple が後でフィールドを削除します。
前もって感謝します。
ios7 - エラー「Expected: [UNIVERSAL 17], expected failed (tn=0, tm=0)」が ASN.1 アプリケーション レシートの解析中に発生する
現在、Apple のReceipt Validation Programming Guideに従って、ローカルのレシート検証を実装しています。テスト レシートを取得できますが、次のように解析しようとすると (つまり、ガイドのリスト 1-5 で提案されているように)
次のエラーが表示されます ( からの出力ASN_DEBUG()
)
asn_DEF_Payload
(およびその他の C コード) はans1c
、ガイドのリスト 1-1 を入力として (ASN.1 コンパイラ、v0.9.24) によって生成されています。NSData dataWithContentsOfURL
で示された URL から で領収書を最初に読みましたNSBundle appStoreReceiptURL
。pld
とpld_sz
は、それぞれデータのbytes
とlength
です。
このエラーは何を意味し、どのように回避できますか?
更新パーサーは、テスト レシピの先頭でタグ 17 (SET および SET OF) を予期しているときに、タグ 16 (SEQUENCE および SEQUENCE OF) を見ているように見えます。リスト1-1のペイロードの定義は実際にSETを参照しています。
更新次のように付属のコンバーターを管理しましたasn1c
。
また、物理 iOS デバイスから OS X にレシートをコピーすることもできました。レシートをダンプしようとすると、次の./progname -d -iber -otext receipt
出力が得られます。
更新うーん、このオンライン ASN.1 デコーダーは私のテスト レシピを問題なくダンプできます。(ただし、SEQUENCEで始まります。)明らかに署名であり、署名されたエンベロープ内からペイロードを取得する必要があるという私の間違いは(そうかもしれません)...
swift - Swift を使用した In App Receipt Validation がコード 21002 を返す
領収書を検証するためにデータをサーバーに送信しましたが、不正な形式の応答 (21002) が返ってきました。iTunes に送信した json は JSONlint.org で検証され、次のようになります。
私が間違っている可能性があることは何ですか?私のSwiftは次のとおりです。
ios - In-App Purchase サンドボックス環境での領収書の更新: テスト アイテムを同時に購入せずに領収書を更新することはできますか?
テスト購入を行うことができるため、アプリ (iOS 7 用) をサンドボックス環境用に正しく構成したことはわかっています。テスト購入が完了すると、[環境: サンドボックス] テキストのアラートが表示されます。同時に領収書が更新され、+[NSBundle appStoreReceiptURL]
メソッドを使用してアクセスできます。
しかし、クラス内のメソッドのみを使用して領収書を更新しようとすると、次のSKReceiptRefreshRequest
シーケンスしか得られません。
「サインイン」アラートが表示され、そこから「既存の Apple ID を使用」を選択します。
「Apple ID パスワード」アラートが表示されたら、テスト ユーザーの資格情報を入力します。
ただし、このアラートは、資格情報を入力した直後に常に表示されます。
「この Apple ID はまだ iTunes Store で使用されていません。レビューをタップしてサインインし、アカウント情報を確認してください。」</p>
もちろん、サンドボックス環境では必要のないクレジット カード情報を要求します。
アプリのデリゲートで次のコードを使用して、レシートの更新を開始します。
ただし、呼び出される唯一のデリゲート メソッドは didFailWithError: であり、次のメッセージが表示されます。
エラー Domain=SSServerErrorDomain Code=5001 「サインインできませんでした」 UserInfo=0x14d8a780 {NSLocalizedFailureReason=この Apple ID は iTunes Store でまだ使用されていません。, NSLocalizedDescription=サインインできませんでした}
領収書を更新しようとする前に、私はいつも:
デバイスからアプリを削除する
[設定] -> [App Store] に Apple ID 資格情報が入力されていないことを確認してください
開発者の資格情報でアプリに署名する
領収書を生成できるように、テスト アカウントで以前の購入が行われていることを確認してください。
テスト アカウントの資格情報が App Store のログインに入力されないようにしてください (これにより、テスト目的で資格情報が無効になるため)。
サンドボックスで領収書の更新を行うことはできますか?
更新:現在動作中
私はついにそれを機能させました-しかし、重要なステップが何であったか正確にはわかりません-粘り強く努力し続けること以外は。
同じ問題を抱えている他の人の利益のために、私が従った手順は次のとおりです。
まったく新しいテスト ユーザーを作成しますが、アカウントでテスト購入を行っていません。
デバイスからアプリを削除し、[設定] -> [App Store] にログインしているアカウントがないことを確認しました。
Xcode でアプリを起動すると、コンソールにエラー メッセージが表示されました。
"Error Domain=SSServerErrorDomain Code=5001 "Could Not Sign In" UserInfo=0x155f5140 {NSLocalizedFailureReason=この Apple ID は iTunes Store でまだ使用されていません。, NSLocalizedDescription=Could Not Sign In}".
「この Apple ID は iTunes Store でまだ使用されていません。」というアラートが表示されたとき、キャンセル ボタンを押しました。
アプリをシャットダウンし、変更を加えずに、Xcode で再起動しました。再起動する前にデバイスからアプリを削除しませんでした。
今回は「<em>この Apple ID は iTunes Store でまだ使用されていません。」メッセージは表示されず、代わりに Apple ID とパスワードを求めるダイアログが表示されました。テスト アカウントの資格情報をダイアログに入力しました。
テスト ユーザーの資格情報を入力した後、
SKRequestDelegate requestDidFinish:
デリゲート メソッドが呼び出され、レシートがアプリ バンドルに配置されました。ちなみに、メソッドSKRequest
によって提供されたインスタンスのタイプは でした。requestDidFinish:
SKReceiptRefreshRequest
初めて機能すると、機能し続けることがわかりました-アプリを削除したり、設定->アプリストアから資格情報をクリアしたりする必要はありませんでした-領収書の更新は、その時点から [設定] -> [App Store] にキャッシュされた資格情報をテストします。
ios - 完全に無料の iOS アプリには、アプリ ストアのレシートの検証が必要ですか?
私のアプリの Mac バージョンでは、App Store の領収書を次のように検証していました。
以前は iOS でも同じことをしましたが、iOS の場合、これは正しいアプローチではないようです。このアプリは完全に無料で、IAP はありません。では、領収書の検証は必要ですか? はいの場合、無料アプリでそれを行う正しい方法は何ですか?