يتيح طلب المشروعات الشاملة ضبط وضع الدفع في الوضع التجريبي عند استخدام الاختبار السريع أو بيئة الوضع التجريبي. أثناء اختبار خلاصة بياناتك، يمكنك التبديل بين وضعَي الدفع "الإصدار التجريبي" و"الإنتاج". لاختبار الدفعات في مشروع "الطلب من البداية إلى النهاية" بدون تحصيل الرسوم من البطاقات، استخدِم وضع الحماية كـ وضع الدفع. لا تسمح بيئة الإنتاج باستخدام "وضع الدفع في الوضع التجريبي".
الإعداد
لتفعيل "وضع الدفع في بيئة الاختبار" في بيئة الاختبار، اتّبِع الخطوات التالية:
- في مركز الإجراءات، انتقِل إلى الإعداد > الميزات.
- في بطاقة ميزات الحساب، ابحث عن زر الاختيار وضع الدفع.
- اختَر Sandbox (منطقة اختبار) وانقر على حفظ التغييرات.
لتفعيل "وضع الدفع في وضع الحماية" في بيئة الاختبار السريع، اتّبِع الخطوات التالية:
- في مركز الإجراءات، انتقِل إلى الخلاصات > اختبار سريع.
- انقر على زر الاختيار استخدام وضع المحاكاة لتطبيق GPay.
عند اختيار وضع الدفع Sandbox:
- تعمل ميزة "الطلب من البداية إلى النهاية" على ضبط Google Pay لعرض الرموز المميّزة لوسائل الدفع التي تحتوي على بيانات البطاقة الاختبارية بدلاً من تفاصيل البطاقة الفعلية.
- تم ضبط الحقل
isInSandbox
علىtrue
في CheckoutRequestMessage و SubmitOrderRequestMessage.
في ما يلي التركيبات المختلفة لـ "البيئة" و"وضع الدفع" و"isInSandbox":
البيئة | وضع الدفع | isInSandbox |
---|---|---|
اختبار سريع | وضع الحماية | صحيح |
اختبار سريع | الإنتاج | خطأ |
وضع الحماية | وضع الحماية | صحيح |
وضع الحماية | الإنتاج | خطأ |
الإنتاج | الإنتاج | خطأ |
رسالة الردّ على الدفع
يحتوي CheckoutResponseMessage
الذي أرسلته خدمة Food Ordering على الويب على
PaymentOptions
. عند
إعداد عملية الدفع،
يمكنك تقديم عنصر نائب لخيارات الدفع باستخدام مثال على بوابة دفع.
- احرص على تعديل
CheckoutResponseMessage
الذي ترسله لخدمة الويب باستخدام إعدادات إنشاء الرموز المميّزة المناسبة.
أمثلة على خيارات الدفع
في ما يلي أمثلة على عناصر PaymentOptions
بتنسيق JSON من ملف
CheckoutResponseMessage
لبوابات دفع مختلفة باستخدام مفاتيح وضع المحاكاة:
"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\"}} " } }
"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\"}} " } }
"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\"}} " } }
"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
:
- استخدِم مفاتيح وضع الحماية بدلاً من مفاتيح الإنتاج في إعدادات رمز الاعتماد لبوابة الدفع. توفّر معظم الجهات المسؤولة عن معالجة المعاملات مفاتيح واجهة برمجة التطبيقات لكل من وضع المحاكاة ووضع الإنتاج.
- لا تُجري أي تواصل مع مقدّم خدمة الويب، والذي يكون عادةً مطعمًا، لأنّه ليس من الضروري إبلاغه بأي معاملات في وضع المحاكاة.
لا يمكن استخدام بطاقات الائتمان التجريبية، حتى في حال تفعيل وضع "منطقة اختبار المعاملات". يجب استخدام بطاقة ائتمان حقيقية عند إجراء معاملة. ومع ذلك، تحتوي رموزا أدوات وضع الحماية على تفاصيل البطاقة الاختبارية التي لا يتم تحصيل رسومها.
معالجة الدفعات
عندما يرسل عميل طلبه، تُرسِل ميزة "الطلب من البداية إلى النهاية" الرسالة
SubmitOrderRequestMessage
إلى نقطة نهاية خدمة الويب. يتم تضمين
الرمز المميّز
لخدمة Google Pay كسلسلة مشفّرة بترميز base-64 في الحقل SubmitOrderRequestMessage
instrumentToken. لمعالجة دفعة العميل، نفِّذ أحد الإجراءات التالية استنادًا إلى
بوابة الدفع:
بوابة الدفع | |
---|---|
Stripe أو Braintree | فك ترميز سلسلة الرمز المميّز بترميز base-64 وأرسِل البيانات المناسبة الواردة في الحمولة الخاصة بالرمز المميّز الذي تم فك تشفيره إلى بوابة الدفع لمعالجة الدفعة. |
جميع بوابات الدفع الأخرى (بما في ذلك stripev2) | أرسِل سلسلة الرمز المميّز الكاملة بترميز base-64 إلى واجهة برمجة تطبيقات بوابة الدفع لمعالجة الدفعة. تحتوي بنية رمز مفتاح طريقة الدفع في Google Pay على حقول مشفَّرة يمكن لبوابة الدفع فك تشفيرها لمعالجة الدفعة. |
مثال على الحمولة بعد فك ترميزها
تعرض الأمثلة التالية الحمولات المفكَّكة التي يتم عرضها في الحقل instrumentToken
لبوابات دفع مختلفة:
يمثّل مثال 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 هذا رمز دفع تم فك تشفيره عند استخدام 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 هذا رمز دفع تم فك تشفيره عند استخدام 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 هذا رمز دفع تم فك تشفيره عند استخدام 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 مع طلبك إلى واجهة برمجة تطبيقات 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
المشفَّر بترميز base-64 من Braintree:
function decodeToken(instrumentToken) { let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii') if (decodedString.androidPayCards) { return decodedString.androidPayCards[0].nonce; } }