エンドツーエンド プロジェクトを注文すると、クイックテストまたはサンドボックス環境を使用する際にサンドボックス支払いモードを構成できます。データフィードのテスト中に、サンドボックスと本番環境の支払いモードを切り替えることができます。カードに課金せずに Ordering End-to-End プロジェクトの支払いをテストするには、サンドボックスをお支払い方法として使用します。本番環境では、サンドボックス支払いモードはサポートされていません。
設定
サンドボックス環境でサンドボックス支払いモードを有効にする手順は次のとおりです。
- アクション センターで、[設定] > [機能] に移動します。
- [アカウントの機能] カードで [お支払い方法] ラジオボタンを探します。
- [サンドボックス] オプションを選択し、[変更を保存] をクリックします。
クイックテスト環境でサンドボックス支払いモードを有効にする手順は次のとおりです。
- アクション センターで、[フィード] > [クイックテスト] に移動します。
- [GPay にサンドボックスを使用する] ラジオボタンをオンにします。
サンドボックスの支払いモードが選択されている場合:
- エンドツーエンドで注文すると、実際のカード情報ではなくテストカード データを含むインストルメンテーション トークンを返すように Google Pay が設定されます。
- CheckoutRequestMessage と SubmitOrderRequestMessage で、
isInSandbox
フィールドがtrue
に設定されています。
環境、支払いモード、isInSandbox の組み合わせは次のとおりです。
環境 | お支払いモード | isInSandbox |
---|---|---|
クイックテスト | サンドボックス | true |
クイックテスト | 本番環境 | false |
サンドボックス | サンドボックス | true |
サンドボックス | 本番環境 | false |
本番環境 | 本番環境 | false |
購入手続き応答メッセージ
料理注文ウェブサービスによって送信された CheckoutResponseMessage
には、PaymentOptions
が含まれています。購入手続きを設定するときに、サンプルの支払いゲートウェイを使用して、プレースホルダの支払いオプションを指定します。
- ウェブサービスによって送信された
CheckoutResponseMessage
を、適切なトークン化構成で更新してください。
お支払い方法の例
サンドボックス キーを使用するさまざまな支払いゲートウェイの CheckoutResponseMessage
の JSON PaymentOptions
オブジェクトの例を次に示します。
JSON
"paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gatewayMerchantId\":\"YOUR_MERCHANT_ID\",\"gateway\":\"cybersource\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} " } }
JSON
"paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"braintree\",\"braintree:apiVersion\":\"v1\",\"braintree:sdkVersion\":\"1.4.0\",\"braintree:merchantId\":\"YOUR_MERCHANT_ID\",\"braintree:clientKey\":\"YOUR_BRAINTREE_SANDVOX_OR_PRODUCTION_KEY\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} " } }
JSON
"paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"stripe\",\"stripe:version\":\"2018-10-31\",\"stripe:publishableKey\":\"YOUR_PRODUCTION_OR_SANDBOX_STRIPE_KEY\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} " } }
JSON
"paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\":2,\"apiVersionMinor\":0,\"merchantInfo\":{\"merchantName\":\"merchantName\"},\"allowedPaymentMethods\":[{\"type\":\"CARD\",\"parameters\":{\"allowedAuthMethods\":[\"PAN_ONLY\"],\"allowedCardNetworks\":[\"VISA\",\"MASTERCARD\"],\"billingAddressRequired\":true,\"cvcRequired\":false},\"tokenizationSpecification\":{\"type\":\"PAYMENT_GATEWAY\",\"parameters\":{\"gateway\":\"stripev2\",\"gatewayMerchantId\":\"YOUR_PRODUCTION_OR_SANDBOX_STRIPE_KEY\"}}}],\"transactionInfo\":{\"currencyCode\":\"USD\",\"totalPriceStatus\":\"ESTIMATED\",\"totalPrice\":\"31.85\"}} " } }
サンドボックス取引にフラグを立てる
サンドボックス支払いモードが有効になっている場合、isInSandbox
フィールドがリクエストに含まれ、ウェブサービス エンドポイント(CheckoutRequestMessage
と SubmitOrderRequestMessage
)への受信リクエストに対して true
に設定されます。isInSandbox
フィールドが true
に設定されている場合、次のことを行います。
- 支払いゲートウェイのトークン化構成で、本番環境鍵ではなくサンドボックス鍵を使用します。ほとんどの決済代行業者は、サンドボックス用と本番環境用の API キーを提供しています。
- ウェブサービス プロバイダ(通常はレストラン)との通信をトリガーしないでください。サンドボックス トランザクションについて通知する必要がないためです。
トランザクション サンドボックスが有効になっている場合でも、テスト用のクレジット カードはサポートされません。取引を行う場合は、実際のクレジット カードを使用する必要があります。ただし、サンドボックス インストルメント トークンには、課金対象外のテストカード情報が含まれます。
支払いを処理する
お客様が注文を送信すると、Ordering End-to-End は SubmitOrderRequestMessage をウェブサービス エンドポイントに送信します。Google Pay トークンは、Base64 でエンコードされた文字列として SubmitOrderRequestMessage
instrumentToken フィールドに格納されます。お客様の支払いを処理するには、支払いゲートウェイに応じて次のいずれかを行います。
支払いゲートウェイ | |
---|---|
Stripe または Braintree | Base64 でエンコードされたトークン文字列をデコードし、デコードされたトークン ペイロードに含まれる適切なデータを支払いゲートウェイに送信して支払いを処理します。 |
他のすべての支払いゲートウェイ(Stripev2 を含む) | Base64 でエンコードされた完全なトークン文字列を支払いゲートウェイ API に送信して、支払いを処理します。Google Pay のお支払い方法トークンの構造には、支払いゲートウェイで支払いを処理するために復号できる暗号化されたフィールドが含まれています。 |
デコードされたペイロードの例
次の例は、さまざまな支払いゲートウェイの instrumentToken
フィールドに返されるデコードされたペイロードを示しています。
JSON
この JSON の例は、Braintree を使用する場合にデコードされた支払いトークンを表しています。nonce
フィールドの値を抽出し、その値を Braintree に送信して支払いを処理します。
{ "androidPayCards": [{ "type": "AndroidPayCard", "nonce": "aeeb8297-4242...", "description": "AndroidPay", "consumed": false, "details": { "cardType": "Visa", "lastTwo": "29" } }] }
Braintree のコントロール パネルで Google Pay が有効になっていない場合、instrumentToken
フィールドが次のエラーにデコードされます。
{ "error": { "message": "Record not found" }, "fieldErrors": [] }
JSON
次の JSON の例は、Stripe 使用時にデコードされた支払いトークンを表しています。id
フィールドの値を抽出し、Stripe に送信して支払いを処理します。
{ "id": "tok_abcdefg1234...", "object": "token", "card": { "id": "card_abcde...", "object": "card", "address_city": null, "address_country": null, "address_line1": null, "address_line1_check": null, "address_line2": null, "address_state": null, "address_zip": null, "address_zip_check": null, "brand": "Visa", "country": "US", "cvc_check": null, "dynamic_last4": "1234", "exp_month": 1, "exp_year": 2019, "funding": "credit", "last4": "1234", "metadata": {}, "name": null, "tokenization_method": "android_pay" }, "client_ip": "74.125.177.36", "created": 1500483670, "livemode": false, "type": "card", "used": false }
JSON
この JSON の例は、Stripev2 の使用時にデコードされた支払いトークンを表しています。
{ "protocolVersion":"ECv2", "signature":"MEQCIH6Q4OwQ0jAceFEkGF0JID6sJNXxOEi4r+mA7biRxqBQAiAondqoUpU/bdsrAOpZIsrHQS9nwiiNwOrr24RyPeHA0Q\u003d\u003d", "intermediateSigningKey":{ "signedKey": "{\"keyExpiration\":\"1542323393147\",\"keyValue\":\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/1+3HBVSbdv+j7NaArdgMyoSAM43yRydzqdg1TxodSzA96Dj4Mc1EiKroxxunavVIvdxGnJeFViTzFvzFRxyCw\\u003d\\u003d\"}", "signatures": ["MEYCIQCO2EIi48s8VTH+ilMEpoXLFfkxAwHjfPSCVED/QDSHmQIhALLJmrUlNAY8hDQRV/y1iKZGsWpeNmIP+z+tCQHQxP0v"] }, "signedMessage":"{\"tag\":\"jpGz1F1Bcoi/fCNxI9n7Qrsw7i7KHrGtTf3NrRclt+U\\u003d\",\"ephemeralPublicKey\":\"BJatyFvFPPD21l8/uLP46Ta1hsKHndf8Z+tAgk+DEPQgYTkhHy19cF3h/bXs0tWTmZtnNm+vlVrKbRU9K8+7cZs\\u003d\",\"encryptedMessage\":\"mKOoXwi8OavZ\"}" }
JSON
次の JSON の例は、Square の使用時にデコードされた支払いトークンを表しています。
{ "signature": "MEYCIQCMAsWCrY2GfHM/gMAKiK3QCKJJOIkjZeTQGzcdWgvrhwIhAJ3mXwe+wmU9z+Apv1rTDsCVQBzayvWzT4ywxytrSPla", "protocolVersion": "ECv1", "signedMessage": "{\"encryptedMessage\":\"WkYz21EYxojwTqWh6A3oYXtmctu1PlqF+tNYPA4cq017nqj16Ge7kaVR7MI1XG1OrCmcMwP20u5Zb5E28XYan8UI8M4L120orvE9XU1ivZuO4Myq2O3ue8v0lY1MDx8Mnk+5mkAv1kLmzJc91gEQ2leIwrPuMDYqsQUHzTR3Jikh5/v+iWRkyQPKKxgj5c6Erdu/pkg1xV6fQJcHNdq9Jw11zl95x6eQurxw2Uy8v811azGr+noKJbw0uye72MkhmzMS5QKOzwGT9nBfO+zPLYSEewsdOcPbNZF94zk/KU9nxom/gQ+eYEMIZvOj9lO4gQqDqR6DyWyStk7MjeXQTvXWZBI1JpqvOrlTHL0Ct18RpbfOio7hAtafzb0NnqEKlsun+SSpJmvI7U6n6Cnu1JUMUGfT/Jsi6RJ3N6pRw2BubeR1925Xl3jXQnlz5io6X1YRlAcnshZyf6CjBpKES32aTf1m1IHRhZ2Jj6i/g7Y\\u003d\",\"ephemeralPublicKey\":\"BDQA0Cf//BHPcnB0R/GRrWa2g7T1QF97eOhAYy7l45M+kJnsoeL9OaUQV/KIMLvcgbmKkZIm2FQeL7ftd6S4q4c\\u003d\",\"tag\":\"DHtVyXNo+PDr7Thi/EjBBbsr2k7y1SwGIn0D9mmPTJc\\u003d\"}" }
トークンを使用して支払いを処理するには、Square の決済 API へのリクエストで、Base64 でエンコードされたトークン文字列を返します。source_id
フィールドには gpay: という接頭辞が付加されています。
{ "idempotency_key": "ID", "source_id": "gpay:GOOGLE_PAY_BASE64_ENCODED_TOKEN", "amount_money": { "amount": 50, "currency": "USD" }, "location_id": "LOCATION_ID", "billing_address": { "postal_code": "11111" } }
次の例は、Braintree から Base64 でエンコードされた instrumentToken
をデコードする Node.js です。
Node.js
function decodeToken(instrumentToken) { let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii') if (decodedString.androidPayCards) { return decodedString.androidPayCards[0].nonce; } }