Webを導入する方法。実装手順を紹介します。Webを導入する方法。実装手順を紹介します。2019年4月24日TwitterFacebookはてブPocketLINEFeedlyフィードWebにApplePayを導入したので、その開発・実装手順を紹介します。Webの最新情報や詳しい実装方法などは公式ドキュメントを参照してください。Webのテストできる条件は以下の通りです。Payに対して身元を証明する一意の識別子。CertificateAppleとのセッションを確立するには、マーチャントID証明書が必要です。このマーチャントID証明書はサーバにアップロードします。Certificate」を作成し、ダウンロードします。その後、キーチェーンアクセスからP12ファイルを作成します。以下コマンドより、証明書と秘密鍵ファイルをpem形式で抽出します。この2ファイルと秘密鍵ファイルで設定したパスワードは後に使用します。-nocerts以下のエラーが出たらRSAの公開鍵を作成し、秘密鍵作成で設定したパスワードを削除します。決済カードで取引をテストするには、ApplePayサンドボックス環境を使用します。実機でテストする場合は、Sandboxアカウントに変更する必要があります。デバッグ今回はiPhone端末をテスト実機としたので、Macと接続してデバッグを行いました。iPhone端末で、「設定」→「Safari」→「詳細」→「Webインスペクタ」を有効にします。その後、iPhoneとMacをUSBケーブルで繋ぎ、MacのSafariから「開発」を選択肢、接続したiPhone端末を選択します。これでデバッグ準備完了です。Safari」→「履歴とWebサイトデータを消去」を選択しないとキャッシュが残ってしまうので、少々めんどくさいです。証明書をサーバにアップロード先ほど作成した、ApplePay.crt.pemApplePay.key.pemをサーバにアップロードします。public配下に配置するのは簡単にダウンロードされてしまうので避けましょう。ルートディレクトリが/var/www/htmlの場合は、/var/www配下にapplepay_includesのようなディレクトリを作成し、その配下に格納しましょう。123/var/www/applepay_includes・ApplePay.crt.pem・ApplePay.key.pemApplePayに対応しているかどうか判定まずApplePayに対応しているかを以下の処理で判定します。Payに対応してるSafariには、window.ApplePaySessionオブジェクトが存在しています。trueの場合はApplePayに対応してるSafariであると判定できます。ApplePaySession.canMakePaymentsWithActiveCard()メソッドで、ユーザのデバイスがApplePayをサポートしている及びユーザーのWalletでアクティブなカードを持っているかどうかを判定します。trueの場合ApplePayのボタンを表示します。商品情報paymenRequestに商品情報を追加します。countryCode2文字の国コードを指定します。currencyCode3文字の通貨コードを指定します。supportedNetworksマーチャントがサポートしている支払方法です。Payバージョンで導入されたネットワークを使用するには、ApplePaySessionのバージョンを次のように必要なバージョン番号に設定します。詳しくは公式ドキュメントを参照してください。merchantCapabilitiesマーチャントがサポートしている決済機能です。merchantCapabilitiesでサポートされているのは以下の通りです。この値は必ず指定する必要があります。クレジットカードに分類されている取引のみ許可します。デビットカードに分類されている取引のみ許可します。Pay取引をサポートしている場合にのみ、指定する必要があります。詳しくは公式ドキュメントを参照してください。total商品名と合計金額を記載します。実装の際は変数を入れるなどして置き換えてください。Payのバージョンと商品情報を引数にし、インスタンスを作成します。サポートバージョンは公式ドキュメントを参照してください。session.begin()が呼び出されると、支払シートが表示されセッション確立処理が開始されます。session.onvalidatemerchant()は、支払いシートが表示されたときに呼び出され、有効なマーチャントであるかをサーバに呼び出し検証します。validationURLはマーチャントを認証するApplePayサーバです。performValidation()で行っています。認証リクエストはサーバから実行する必要があります。Payサーバにセッションを要求します。セッション結果をMerchantSessionで受け取り、session.completeMerchantValidationに渡します。認証が成功すると支払いシートが有効になり、セッションの確立が完了します。Session確立【サーバサイド】ApplePayのマーチャントID証明書やパスワードなどを設定ファイルに記載します。developやstaging、本番環境などで設定を変更する必要がある場合は、それぞれの環境で設定ファイルを用意しておきましょう。'display_name',];認証処理はサーバサイドで行います。サーバサイドはPHPを使用(フレームワークはFuelPHP)。設定ファイルを読み込み、認証処理に必要なリクエストをサーバに送ります。'"}';}}}}ApplePay決済処理session.onpaymentauthorized()は、ユーザがタッチIDやパスコードなどによってApplePayの支払が承認されたときに呼び出されます。ApplePayの支払いは、30秒のタイムアウト前にsession.completePayment()を呼び出して応答することで完了します。30秒以内に支払いを完了できなかった場合、「支払いを完了できませんでした」とエラーメッセージが表示され、支払いが完了せずに終了します。決済代行サービスを利用している場合は、この段階でトークンが取得できるため、ユーザ情報や商品情報などをあわせてサーバに送ります。Webを実装する方法をまとめました。最新情報や詳しい実装方法などは公式ドキュメントを参照してください。Payのセッション確立時にApple側から以下のエラーメッセージを受け取るも原因分からず苦戦。"500"}curl_exec($ch)には1(true)が返ってきているので成功しているのではと思ったのですが、フロント側で受け取る際は失敗。具体的な原因を教えてくれたら助かるのですが...。Apple側に送るリクエストを全て見直したところ、原因は単純に証明書が間違っていました。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。