ตั้งค่าการชำระเงินแซนด์บ็อกซ์

การสั่งซื้อโปรเจ็กต์แบบปลายทางถึงปลายทางทำให้สามารถกำหนดค่าโหมดการชำระเงินของแซนด์บ็อกซ์ได้เมื่อ โดยใช้การทดสอบด่วนหรือสภาพแวดล้อมแซนด์บ็อกซ์ ขณะที่คุณทดสอบข้อมูล คุณสามารถสลับระหว่างโหมดแซนด์บ็อกซ์และโหมดการชำระเงินของเวอร์ชันที่ใช้งานจริงได้ หากต้องการ ทดสอบการชำระเงินสำหรับโครงการสั่งซื้อแบบครบวงจรโดยไม่ต้องเรียกเก็บเงินจากบัตร แซนด์บ็อกซ์เป็นวิธีการชำระเงินของคุณ สภาพแวดล้อมการใช้งานจริงไม่ รองรับโหมดการชำระเงินของแซนด์บ็อกซ์

การกำหนดค่า

หากต้องการเปิดใช้โหมดการชำระเงินของแซนด์บ็อกซ์ในสภาพแวดล้อมแซนด์บ็อกซ์ ให้ทำดังนี้ ขั้นตอน:

  1. ในศูนย์การดำเนินการ ให้ไปที่การกำหนดค่า > ฟีเจอร์
  2. ในการ์ดฟีเจอร์บัญชี ให้หาปุ่มตัวเลือกวิธีการชำระเงิน
  3. เลือกตัวเลือกแซนด์บ็อกซ์ และคลิกบันทึกการเปลี่ยนแปลง

การ์ดฟีเจอร์ของบัญชีที่เลือกโหมดแซนด์บ็อกซ์

หากต้องการเปิดใช้โหมดการชำระเงินของแซนด์บ็อกซ์ในสภาพแวดล้อมการทดสอบด่วน ให้ทำดังนี้ ขั้นตอน:

  1. ใน Actions Center ให้ไปที่ฟีด > การทดสอบด่วน
  2. เลือกปุ่มตัวเลือกใช้แซนด์บ็อกซ์สำหรับ GPay

การทดสอบด่วนด้วยโหมดแซนด์บ็อกซ์ที่เลือก

เมื่อเลือกวิธีการชำระเงินแซนด์บ็อกซ์ไว้ จะเป็นดังนี้

  • การสั่งซื้อแบบต้นทางถึงปลายทางจะกำหนดค่า Google Pay ให้แสดงโทเค็นของเครื่องมือที่ มีข้อมูลการ์ดทดสอบแทนรายละเอียดจริงของการ์ด
  • ฟิลด์ isInSandbox ได้รับการตั้งค่าเป็น true ในฟิลด์ CheckoutRequestMessage และ SubmitOrderRequestMessage.

การผสมผสานต่างๆ ของสภาพแวดล้อม โหมดการชำระเงิน และ isInSandbox ดังนี้

สภาพแวดล้อม วิธีการชำระเงิน isInSandbox
การทดสอบด่วน แซนด์บ็อกซ์ จริง
การทดสอบด่วน การผลิต เท็จ
แซนด์บ็อกซ์ แซนด์บ็อกซ์ จริง
แซนด์บ็อกซ์ การผลิต เท็จ
การผลิต การผลิต เท็จ

ข้อความตอบกลับการชำระเงิน

CheckoutResponseMessage ที่ส่งมาจากบริการบนเว็บสำหรับการสั่งอาหารมี PaymentOptions เมื่อคุณ ตั้งค่าการชำระเงิน คุณจะระบุตัวเลือกการชำระเงินตัวยึดตำแหน่งโดยใช้ตัวอย่างเกตเวย์การชำระเงิน

  • อย่าลืมอัปเดต CheckoutResponseMessage ที่ส่งมาจากเว็บของคุณ พร้อมการกำหนดค่าการแปลงข้อมูลเป็นโทเค็นที่เหมาะสม

ตัวอย่างตัวเลือกการชำระเงิน

ต่อไปนี้คือตัวอย่างออบเจ็กต์ PaymentOptions ของ JSON จาก CheckoutResponseMessageสำหรับเกตเวย์การชำระเงินต่างๆ ที่ใช้คีย์แซนด์บ็อกซ์:

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 จะ รวมอยู่ในคำขอและตั้งค่าเป็น true สำหรับคำขอที่เข้ามาใหม่ในเว็บ ปลายทางของบริการ (CheckoutRequestMessage และ SubmitOrderRequestMessage) ทำตามขั้นตอนต่อไปนี้เมื่อตั้งค่าช่อง isInSandbox เป็น true

  • ใช้คีย์แซนด์บ็อกซ์แทนคีย์ที่ใช้งานจริงในการแปลงเป็นโทเค็น สำหรับเกตเวย์การชำระเงินของคุณ ผู้ประมวลผลการชำระเงินส่วนใหญ่มี API สำหรับทั้งแซนด์บ็อกซ์และเวอร์ชันที่ใช้งานจริง
  • อย่าเริ่มการสื่อสารใดๆ กับผู้ให้บริการเว็บ ซึ่งโดยปกติแล้ว ร้านอาหาร เนื่องจากลูกค้าไม่ต้องได้รับแจ้งถึงการทำธุรกรรมใดๆ บนแซนด์บ็อกซ์

ไม่รองรับบัตรเครดิตสำหรับทดสอบ แม้ว่าแซนด์บ็อกซ์ธุรกรรมจะเป็น เปิดอยู่ คุณต้องใช้บัตรเครดิตจริงเมื่อทำธุรกรรม อย่างไรก็ตาม โทเค็นเครื่องมือแซนด์บ็อกซ์มีรายละเอียดการ์ดทดสอบที่ไม่สามารถเรียกเก็บเงินได้

ประมวลผลการชำระเงิน

เมื่อลูกค้าส่งคำสั่งซื้อ การสั่งซื้อแบบครบวงจรจะส่ง SubmitOrderRequestMessage กับปลายทางบริการเว็บ Google Pay โทเค็น รวมอยู่ด้วยเป็นสตริงที่เข้ารหัส base-64 ใน SubmitOrderRequestMessage instrumentToken ด้วย ในการประมวลผลการชำระเงินของลูกค้า ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้ เกตเวย์การชำระเงินของคุณ:

เกตเวย์การชำระเงิน
Stripe หรือ Braintree ถอดรหัสสตริงโทเค็นที่เข้ารหัสแบบ Base64 และส่งข้อมูลที่เหมาะสมซึ่งมีอยู่ในเพย์โหลดโทเค็นที่ถอดรหัสแล้วไปยังเกตเวย์การชำระเงินเพื่อประมวลผลการชำระเงิน
เกตเวย์การชำระเงินอื่นๆ ทั้งหมด (รวมถึง Stripev2) ส่งสตริงโทเค็นที่เข้ารหัสฐาน 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"
    }
  }]
}

หากไม่ได้เปิดใช้ Google Pay ในแผงควบคุม Braintree ระบบจะดำเนินการต่อไปนี้ ช่อง 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\"}"
  }
    

หากต้องการประมวลผลการชำระเงินโดยใช้โทเค็น ให้แสดงผลสตริงโทเค็นที่เข้ารหัสฐาน 64 พร้อมคำขอไปยัง API การชำระเงินของ Square ในช่อง 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"
    }
  }

ต่อไปนี้เป็นตัวอย่าง Node.js ที่ถอดรหัส base-64 ที่เข้ารหัส instrumentToken จาก Braintree:

Node.js

function decodeToken(instrumentToken) {
  let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii')
  if (decodedString.androidPayCards) {
    return decodedString.androidPayCards[0].nonce;
  }
}