これを実稼働サーバーで機能させていますが、localhostではcanMakePayment()
はnull
を返します。
私はこれを縮小されたStripeコードでトレースしましたが、CAN_MAKE_PAYMENT
というアクションをメッセージキューに送信する関数ko
で壁にぶつかりました。この時点で、実行は非同期になり、追跡できません。リクエストがe.available === false
で解決され、それ以上の情報がなくなるまで続きます。
APIが実際にChrome= localhostで利用可能であることを確認しました(window.PaymentRequest
が利用可能です。)ローカルhttps
でも実行しています(ただし、緑色の小切手)。
StripeがPaymentRequest
を利用できないと報告している原因を追跡するにはどうすればよいですか? Chrome緑のSSLチェックがない場合、PaymentRequestの呼び出しを拒否しますか?その場合、どのようにこれをテストしますか?ChromeドキュメントはPaymentRequestが使用可能な場合は、APIを呼び出すことができます。
メッセージキューが処理されている場所がわかっている場合は、さらにデバッグできます。
Stripeのサポートチームは、緑色のSSL検証が必要であることを確認しました。
「支払い要求ボタンの前提条件の1つは、支払い要求が置かれているページが有効な証明書で安全に提供される必要があることです。これは、プロダクションと開発の両方の要件です。」
これが実験です。 Chromeのサイトを参照します。ここで、URLは https://stackoverflow.com のように緑色で「Secure https:」と表示されています。開発者コンソールを開き、これらのコマンド( ここから )に貼り付け、 Enter:
const supportedPaymentMethods = [
{
supportedMethods: 'basic-card',
}
];
const paymentDetails = {
total: {
label: 'Total',
amount:{
currency: 'USD',
value: 0
}
}
};
const options = {};
const request = new PaymentRequest(
supportedPaymentMethods,
paymentDetails,
options
);
request.show();
すると、支払い要求のモーダルポップアップが表示されます。
しかし、アドレスバーにredと表示されている自分のローカルサイトを参照すると、「安全ではありません」(そして「https」は取り消されます)、それを実行しようとするとコンソールの同じコードでは、支払い要求モーダルはポップアップしません(ドメインのセキュリティ例外を追加した場合でも)。
したがって、Chrome(およびおそらく他のブラウザ)は、接続が完全にセキュアでない場合、Stripe(およびStripeのような他のツール)がそのブラウザ機能にアクセスできないようにします。
Stripeからの更新:
Chrome iOSにはPaymentRequest実装が含まれていますが、PaymentRequestをiframeから使用できないため、Stripeの支払い要求ボタン要素が機能しません。Chromeチームは、今後のリリースでこの問題を解決する予定です。
Apple Pay for iOS Simulatorまたはtest deviceで機能するためには、ドメインがStripeダッシュボード( https://dashboard.stripe。 com/account/Apple_pay )またはAPI https://stripe.com/docs/stripe-js/elements/payment-request-button#verifying-your-domain-with-Apple-pay ngrok(ngrok.com)などのツールを使用して、ローカル環境にトンネルする有効なHTTPS証明書を備えたパブリックドメインを作成することをお勧めします。
Stripeをバイパスして、Chromeが「基本カード」の支払い方法がサポートされていないことを報告していることを確認できました。
これには、Googleのドキュメントに従ってPaymentRequestを設定し、request.show()
コマンドを試行する必要がありました。
これは緑のSSL検証がないことに関係していると思います。それを修正してみます。
PaymentRequestを使用するには、Visual StudioでSSLを有効にする必要があります。