サンドボックスでの支払いを設定する

エンドツーエンド プロジェクトを注文する場合、クイックテスト環境またはサンドボックス環境を使用している場合は、サンドボックス支払いモードを構成できます。データフィードをテストする際に、サンドボックスと本番環境のお支払いモードを切り替えることができます。カードに請求せずに Ordering End-to-End プロジェクトのお支払いをテストするには、お支払いモードとして サンドボックスを使用します。本番環境では、サンドボックスのお支払いモードはサポートされていません。

構成

サンドボックス環境でサンドボックスのお支払いモードを有効にするには、次の手順を行います。

  1. Actions Center で、[Configuration] > [Features] に移動します。
  2. [アカウントの機能] カードで、[お支払いモード] ラジオボタンを見つけます。
  3. [サンドボックス] オプションを選択し、[変更を保存] をクリックします。

サンドボックス モードが選択されたアカウント機能カード

クイックテスト環境でサンドボックス支払いモードを有効にするには、次の操作を行います。

  1. Actions Center で、[フィード] > [クイックテスト] に移動します。
  2. [GPay にサンドボックスを使用する] ラジオボタンを選択します。

サンドボックス モードを選択したクイックテスト

お支払いモードが [サンドボックス] の場合:

  • エンドツーエンドの注文では、実際のカード情報ではなくテストカードデータを含む支払い方法トークンを返すように Google Pay が構成されます。
  • isInSandbox フィールドは、CheckoutRequestMessageSubmitOrderRequestMessagetrue に設定されています。

Environment、Payment Mode、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 フィールドがリクエストに含まれ、ウェブサービス エンドポイント(CheckoutRequestMessageSubmitOrderRequestMessage)への受信リクエストに対して true に設定されます。isInSandbox フィールドが true に設定されている場合は、次の操作を行います。

  • 決済ゲートウェイのトークン化構成では、本番環境鍵ではなくサンドボックス鍵を使用します。ほとんどの決済代行業者は、サンドボックス環境と本番環境の両方の API キーを提供しています。
  • サンドボックス取引をウェブサービス プロバイダ(通常はレストラン)に通知する必要がないため、ウェブサービス プロバイダとの通信はトリガーしないでください。

取引サンドボックスが有効になっている場合でも、テスト用クレジット カードはサポートされていません。取引を行う際は、実際のクレジット カードを使用する必要があります。ただし、サンドボックスの支払い方法トークンには、請求対象ではないテストカードの詳細が含まれています。

支払い処理

お客様が注文を送信すると、Ordering End-to-End は SubmitOrderRequestMessage をウェブサービス エンドポイントに送信します。Google Pay のトークンは、SubmitOrderRequestMessage instrumentToken フィールドに base64 でエンコードされた文字列として含まれます。お客様のお支払いを処理するには、ご利用の決済ゲートウェイに応じて次のいずれかを行います。

支払いゲートウェイ
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 の payment 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;
  }
}