訂購端對端專案,可讓您在使用快速測試或沙箱環境時設定沙箱付款模式。測試資料動態饋給時,您可以在沙箱和實際執行付款模式之間切換。如要在不向卡片扣款的情況下測試訂購端對端專案付款,請使用「沙箱」做為付款模式。正式環境不支援沙箱付款模式。
設定
如要在沙箱環境中啟用沙箱付款模式,請按照下列步驟操作:
- 在 Actions Center 中,依序前往「Configuration」>「Feature」。
- 在「帳戶功能」資訊卡中,找出「付款模式」圓形按鈕。
- 選取「沙箱」選項,然後按一下「儲存變更」。
如要在快速測試環境中啟用沙箱付款模式,請按照下列步驟操作:
- 前往 Actions Center 的「動態消息」動態消息 >快速測試。
- 選取「使用 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 金鑰。
- 不觸發與網路服務供應商 (通常是餐廳) 的任何通訊,因為對方無需收到任何沙箱交易的通知。
即使啟用交易沙箱,也不支援測試信用卡。交易時請務必使用真實的信用卡。不過,沙箱檢測權杖含有不收費的測試卡片資料。
處理付款
客戶提交訂單時,訂單端對端會將 SubmitOrderRequestMessage 傳送至您的網路服務端點。Google Pay 權杖會以 Base-64 編碼字串的形式包含在 SubmitOrderRequestMessage
「instrumentToken」欄位中。如要處理客戶的付款,請根據付款閘道執行下列其中一項操作:
付款閘道 | |
---|---|
Stripe 或 Braintree | 將 Base-64 編碼的權杖字串解碼,然後將已解碼權杖酬載中包含的適當資料傳送至付款閘道,以便處理付款。 |
所有其他付款閘道 (包括 tripev2) | 將完整的 Base-64 編碼權杖字串傳送至付款閘道 API,以便處理付款。Google Pay 付款方式權杖結構內含的加密欄位,可讓付款閘道解密來處理付款。 |
已解碼的酬載範例
以下範例顯示各種付款閘道的 instrumentToken
欄位中傳回的已解碼酬載:
JSON
此 JSON 範例代表使用 Braintree 時的已解碼付款權杖。擷取 nonce
欄位的值,並將值傳送至 Braintree 來處理付款。
{ "androidPayCards": [{ "type": "AndroidPayCard", "nonce": "aeeb8297-4242...", "description": "AndroidPay", "consumed": false, "details": { "cardType": "Visa", "lastTwo": "29" } }] }
如果「Brintree」控制台中未啟用 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 範例代表使用 barev2 時已解碼的付款權杖。
{ "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\"}" }
如要使用權杖處理付款,請在 source_id
欄位中以 gpay: 開頭,將包含的 Base-64 編碼權杖字串傳回 Square 的付款 API。
{ "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" } }
下列 Node.js 範例會從 Braintree 解碼 Base-64 編碼的 instrumentToken
:
Node.js
function decodeToken(instrumentToken) { let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii') if (decodedString.androidPayCards) { return decodedString.androidPayCards[0].nonce; } }