Thiết lập thanh toán trong hộp cát

Đặt hàng các dự án đầu cuối cho phép định cấu hình Phương thức thanh toán Hộp cát khi bằng cách sử dụng môi trường Kiểm tra nhanh hoặc Hộp cát. Trong khi bạn kiểm tra dữ liệu của mình nguồn cấp dữ liệu, bạn có thể chuyển đổi giữa Hộp cát và Phương thức thanh toán chính thức. Để thử nghiệm thanh toán cho dự án Đặt hàng đầu cuối của bạn mà không tính phí vào thẻ, sử dụng Hộp cát làm Phương thức thanh toán của bạn. Môi trường phát hành công khai không hỗ trợ Chế độ thanh toán Sandbox.

Cấu hình

Để bật Chế độ thanh toán hộp cát trong môi trường Hộp cát, hãy làm theo các bước sau các bước:

  1. Trong Trung tâm hành động, hãy chuyển đến phần Cấu hình > Tính năng.
  2. Trên thẻ Tính năng tài khoản, hãy tìm nút radio Phương thức thanh toán.
  3. Chọn lựa chọn Hộp cát rồi nhấp vào Lưu thay đổi.

Thẻ tính năng của tài khoản đã chọn chế độ Hộp cát

Để bật Chế độ thanh toán trong Hộp cát trong môi trường Thử nghiệm nhanh, hãy làm theo các bước sau các bước:

  1. Trong Trung tâm hành động, hãy chuyển đến phần Nguồn cấp dữ liệu > Kiểm tra nhanh.
  2. Chọn nút chọn Use Sandbox for GPay (Sử dụng hộp cát cho GPay).

Kiểm thử nhanh bằng chế độ Hộp cát được chọn

Khi Phương thức thanh toán Hộp cát được chọn:

  • Dịch vụ Đặt hàng hai đầu sẽ định cấu hình Google Pay để trả về mã thông báo của phương thức thanh toán chứa dữ liệu thẻ thử nghiệm thay vì thông tin chi tiết thực tế của thẻ.
  • Trường isInSandbox được đặt thành true trong CheckoutRequestMessageSubmitOrderRequestMessage.

Các cách kết hợp khác nhau của Môi trường, Phương thức thanh toán và isInSandbox như sau:

Môi trường Phương thức thanh toán isInSandbox
Thử nghiệm nhanh Hộp cát đúng
Thử nghiệm nhanh Sản xuất false
Hộp cát Hộp cát đúng
Hộp cát Sản xuất false
Sản xuất Sản xuất false

Thông báo phản hồi về quy trình thanh toán

CheckoutResponseMessage do dịch vụ web Đặt món ăn của bạn gửi chứa PaymentOptions Khi thiết lập quy trình thanh toán, bạn cung cấp tuỳ chọn thanh toán giữ chỗ bằng cách sử dụng cổng thanh toán mẫu.

  • Hãy nhớ cập nhật CheckoutResponseMessage mà web của bạn gửi có cấu hình mã hoá thích hợp.

Ví dụ về cách thanh toán

Sau đây là ví dụ về các đối tượng PaymentOptions JSON qua một CheckoutResponseMessage cho nhiều cổng thanh toán sử dụng khoá hộp cát:

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\"}} "
    }
}

Gắn cờ giao dịch trong hộp cát

Khi Chế độ thanh toán hộp cát được bật, trường isInSandbox sẽ được bao gồm trong yêu cầu và đặt thành true cho các yêu cầu gửi đến trang web của bạn điểm cuối dịch vụ (CheckoutRequestMessageSubmitOrderRequestMessage). Hãy làm như sau khi trường isInSandbox được đặt thành true:

  • Sử dụng khoá hộp cát thay vì khoá sản xuất trong quá trình mã hoá cho cổng thanh toán của bạn. Hầu hết các công ty xử lý thanh toán đều cung cấp API cho cả hộp cát và phiên bản chính thức.
  • Không kích hoạt bất kỳ liên lạc nào với nhà cung cấp dịch vụ web, thường là nhà hàng của bạn, vì họ không cần phải nhận thông báo về bất kỳ giao dịch trong hộp cát nào.

Thẻ tín dụng thử nghiệm không được hỗ trợ, ngay cả khi hộp cát giao dịch được bật. Bạn phải sử dụng thẻ tín dụng thực khi thực hiện giao dịch. Tuy nhiên, mã thông báo công cụ hộp cát chứa chi tiết thẻ thử nghiệm không thể tính phí.

Xử lý khoản thanh toán

Khi khách hàng gửi đơn đặt hàng, hệ thống Đặt hàng hai đầu sẽ gửi SubmitOrderRequestMessage đến điểm cuối dịch vụ web của bạn. Google Pay mã thông báo được đưa vào dưới dạng chuỗi mã hoá base-64 trong SubmitOrderRequestMessage instrumentToken . Để xử lý thanh toán của khách hàng, hãy thực hiện một trong các cách sau tuỳ thuộc vào cổng thanh toán của bạn:

Cổng thanh toán
Kẻ sọc hoặc cây não Giải mã chuỗi mã thông báo được mã hoá base-64 rồi gửi dữ liệu thích hợp có trong tải trọng mã thông báo đã giải mã tới cổng thanh toán của bạn để xử lý khoản thanh toán.
Tất cả các cổng thanh toán khác (bao gồm cả stringev2) Gửi chuỗi mã thông báo được mã hoá base-64 hoàn chỉnh tới API cổng thanh toán của bạn để xử lý khoản thanh toán. Cấu trúc mã thông báo phương thức thanh toán của Google Pay chứa các trường đã mã hoá mà cổng thanh toán của bạn có thể giải mã để xử lý khoản thanh toán.

Ví dụ về tải trọng đã giải mã

Các ví dụ sau đây minh hoạ các tải trọng đã giải mã được trả về trong instrumentToken cho các cổng thanh toán khác nhau:

JSON

Ví dụ JSON này minh hoạ mã thông báo thanh toán đã giải mã khi sử dụng Braintree. Trích xuất giá trị của trường nonce và gửi giá trị này đến Braintree để xử lý khoản thanh toán.

{
  "androidPayCards": [{
    "type": "AndroidPayCard",
    "nonce": "aeeb8297-4242...",
    "description": "AndroidPay",
    "consumed": false,
    "details": {
      "cardType": "Visa",
      "lastTwo": "29"
    }
  }]
}

Nếu bạn không bật Google Pay trong bảng điều khiển Braintree, thì Trường instrumentToken giải mã thành lỗi sau:

{
  "error": {
    "message": "Record not found"
  },
  "fieldErrors": []
}

JSON

Ví dụ JSON này minh hoạ mã thông báo thanh toán đã giải mã khi sử dụng Stripe. Trích xuất giá trị của trường id rồi gửi giá trị đó cho Stripe để xử lý khoản thanh toán.

{
  "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

Ví dụ JSON này đại diện cho mã thông báo thanh toán đã giải mã khi sử dụng stringev2.

  {
  "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

Ví dụ JSON này minh hoạ mã thông báo thanh toán đã giải mã khi sử dụng 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\"}"
  }
    

Để xử lý khoản thanh toán bằng mã thông báo, hãy trả về chuỗi mã thông báo được mã hoá base-64 kèm theo yêu cầu của bạn đến API thanh toán của Square trong trường source_id với tiền tố là 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"
    }
  }

Sau đây là ví dụ về Node.js giúp giải mã mã hoá base-64 instrumentToken từ Braintree:

Node.js

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