سفارش پروژه های End-to-End امکان پیکربندی حالت پرداخت Sandbox را هنگام استفاده از تست سریع یا محیط Sandbox می دهد. در حین آزمایش فید داده، میتوانید بین حالتهای پرداخت Sandbox و Production جابجا شوید. برای آزمایش پرداختها برای پروژه سفارش پایان به پایان خود بدون شارژ کردن کارتها، از Sandbox به عنوان حالت پرداخت خود استفاده کنید. محیط تولید از حالت پرداخت Sandbox پشتیبانی نمی کند.
پیکربندی
برای فعال کردن حالت پرداخت Sandbox در محیط Sandbox ، این مراحل را دنبال کنید:
- در مرکز اقدامات ، به پیکربندی > ویژگیها بروید.
- در کارت ویژگی های حساب ، دکمه رادیویی حالت پرداخت را پیدا کنید.
- گزینه Sandbox را انتخاب کنید و روی ذخیره تغییرات کلیک کنید.
برای فعال کردن حالت پرداخت Sandbox در محیط تست سریع ، این مراحل را دنبال کنید:
- در مرکز اقدامات ، به Feeds > Quick Test بروید.
- دکمه رادیویی Use sandbox for GPay را انتخاب کنید.
هنگامی که حالت پرداخت Sandbox انتخاب شده است:
- سفارش End-to-End Google Pay را پیکربندی میکند تا نشانههای ابزاری را که حاوی دادههای کارت آزمایشی به جای جزئیات واقعی کارت هستند، برگرداند.
- فیلد
isInSandbox
در CheckoutRequestMessage و SubmitOrderRequestMessage رویtrue
تنظیم شده است.
ترکیبات مختلف Environment، Payment Mode و isInSandbox به شرح زیر است:
محیط زیست | حالت پرداخت | isInSandbox است |
---|---|---|
تست سریع | جعبه شنی | درست است |
تست سریع | تولید | نادرست |
جعبه شنی | جعبه شنی | درست است |
جعبه شنی | تولید | نادرست |
تولید | تولید | نادرست |
پیام پاسخ پرداخت
CheckoutResponseMessage
ارسال شده توسط سرویس وب سفارش غذای شما حاوی PaymentOptions
است. وقتی تسویه حساب خود را تنظیم میکنید ، با استفاده از یک درگاه پرداخت نمونه، گزینههای پرداخت جایبانی را ارائه میدهید.
- مطمئن شوید که
CheckoutResponseMessage
ارسال شده توسط وب سرویس خود را با پیکربندی نشانه گذاری مناسب به روز کنید.
نمونه های گزینه پرداخت
موارد زیر نمونهای از اشیاء JSON PaymentOptions
از 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\"}} " } }
علامت گذاری معاملات جعبه ایمنی
هنگامی که حالت پرداخت Sandbox فعال است، فیلد isInSandbox
در درخواست گنجانده شده و برای درخواستهای دریافتی به نقطه پایانی سرویس وب شما ( CheckoutRequestMessage
و SubmitOrderRequestMessage
) روی true
تنظیم میشود. هنگامی که فیلد isInSandbox
روی true
تنظیم شده است، موارد زیر را انجام دهید:
- از کلیدهای جعبه ایمنی به جای کلیدهای تولید در پیکربندی توکن سازی برای درگاه پرداخت خود استفاده کنید. اکثر پردازندههای پرداخت، کلیدهای API را هم برای جعبه ایمنی و هم برای تولید ارائه میکنند.
- هیچ ارتباطی با ارائهدهنده خدمات وب، معمولاً یک رستوران، ایجاد نکنید، زیرا آنها مجبور نیستند از تراکنشهای جعبه ایمنی مطلع شوند.
کارتهای اعتباری آزمایشی پشتیبانی نمیشوند، حتی وقتی جعبه ایمنی تراکنش فعال باشد. هنگام انجام معامله باید از کارت اعتباری واقعی استفاده کنید. با این حال، نشانههای ابزار سندباکس حاوی جزئیات کارت تست هستند که قابل شارژ نیستند.
فرآیند پرداخت ها
هنگامی که یک مشتری سفارش خود را ارسال می کند، Ordering End-to-End پیام SubmitOrderRequest را به نقطه پایانی وب سرویس شما ارسال می کند. رمز Google Pay به عنوان یک رشته کدگذاری شده پایه 64 در قسمت SubmitOrderRequestMessage
instrumentToken گنجانده شده است. برای پردازش پرداخت مشتری، بسته به درگاه پرداخت خود یکی از موارد زیر را انجام دهید:
درگاه پرداخت | |
---|---|
راه راه یا Braintree | رشته رمز رمزگذاری شده پایه 64 را رمزگشایی کنید و داده های مناسب موجود در محموله رمزگشایی شده را برای پردازش پرداخت به دروازه پرداخت خود ارسال کنید. |
همه درگاههای پرداخت دیگر (از جمله stripev2) | برای پردازش پرداخت، رشته توکن رمزگذاری شده کامل پایه ۶۴ را به 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\"}" }
برای پردازش پرداخت با استفاده از توکن، رشته توکن کدگذاری شده base-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 است که instrumentToken
کدگذاری شده پایه ۶۴ را از Braintree رمزگشایی می کند:
Node.js
function decodeToken(instrumentToken) { let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii') if (decodedString.androidPayCards) { return decodedString.androidPayCards[0].nonce; } }