إعداد عمليات الدفع في وضع الحماية

يسمح طلب المشاريع الشاملة بضبط وضع الدفع في وضع الحماية عند استخدام بيئة "الاختبار السريع" أو بيئة "وضع الحماية". أثناء اختبار خلاصة البيانات، يمكنك التبديل بين وضعَي الدفع في وضع الحماية ووضع الدفع عند الإنتاج. من أجل اختبار عمليات الدفع لمشروع الشراء الشامل بدون شحن البطاقات، استخدم وضع الحماية باعتباره وضع الدفع. لا تتوافق بيئة الإنتاج مع وضع الدفع في وضع الحماية.

الإعدادات

لتفعيل وضع الدفع في وضع الحماية في بيئة وضع الحماية، يمكنك اتّباع الخطوات التالية:

  1. في مركز الإجراءات، انتقِل إلى الإعدادات > الميزات.
  2. في بطاقة ميزات الحساب، ابحث عن زر الاختيار وضع الدفع.
  3. حدِّد الخيار وضع الحماية وانقر على حفظ التغييرات.

بطاقة ميزات الحساب مع اختيار وضع الحماية

لتفعيل وضع الدفع في وضع الحماية في بيئة الاختبار السريع، يُرجى اتّباع الخطوات التالية:

  1. في مركز الإجراءات، انتقِل إلى الخلاصات > اختبار سريع.
  2. حدِّد زر الاختيار استخدام وضع الحماية لخدمة GPay.

تم اختيار الاختبار السريع باستخدام وضع الحماية

عند اختيار وضع الدفع في وضع الحماية:

  • يؤدي إجراء "طلب الشراء الشامل" إلى تهيئة Google Pay لعرض الرموز المميّزة للوسائل التي تحتوي على بيانات بطاقة الاختبار بدلاً من تفاصيل البطاقة الفعلية.
  • تم ضبط الحقل isInSandbox على true في CheckoutRequestMessage وSubmitOrderRequestMessage.

في ما يلي المجموعات المختلفة للبيئة ووضع الدفع وisInSandbox:

البيئة وضع الدفع isInSandbox
اختبار سريع وضع الحماية صحيح
اختبار سريع الإنتاج false
وضع الحماية وضع الحماية صحيح
وضع الحماية الإنتاج false
الإنتاج الإنتاج false

رسالة الرد على Checkout

تحتوي 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:

  • استخدِم مفاتيح وضع الحماية بدلاً من مفاتيح الإنتاج خلال عملية إعداد الرموز المميّزة لبوابة الدفع. توفر معظم معالجات الدفع مفاتيح واجهة برمجة التطبيقات لكل من وضع الحماية والإنتاج.
  • لا تجري أي اتصال مع مقدم خدمة الويب، الذي يكون عادةً مطعمًا، لأنه ليس من الضروري إبلاغه بأي معاملات في وضع الحماية.

لا يمكن استخدام بطاقات الائتمان الاختبارية، حتى في حال تفعيل وضع الحماية للمعاملة. يجب استخدام بطاقة ائتمان حقيقية عند إجراء معاملة. ومع ذلك، تحتوي الرموز المميزة لأداة وضع الحماية على تفاصيل بطاقة الاختبار التي لا يتم تحصيل رسومها.

معالجة الدفعات

عندما يرسل العميل طلبه، ترسل ميزة "الطلب التام بين الأطراف" SubmitOrderRequestMessage إلى نقطة نهاية خدمة الويب. يتمّ تضمين الرمز المميّز لـ Google Pay كسلسلة Base-64 مرمّزة في الحقل SubmitOrderRequestMessage instrumentToken. لمعالجة عملية الدفع التي يجريها العميل، يمكنك تنفيذ أحد الإجراءات التالية استنادًا إلى بوابة الدفع:

بوابة الدفع
Stripe أو Braintree يمكنك فك ترميز سلسلة الرمز المميز المشفّر base-64 وإرسال البيانات المناسبة الواردة في حمولة الرمز المميز الذي تم فك ترميزه إلى بوابة الدفع لمعالجة الدفعة.
جميع بوابات الدفع الأخرى (بما في ذلك barev2) أرسِل سلسلة الرمز المميّز المرمّزة الأساسية 64 الكاملة إلى واجهة برمجة تطبيقات بوابة الدفع لمعالجة الدفعة. تحتوي بنية الرمز المميّز لطريقة الدفع في 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 هذا رمزًا مميّزًا للدفع تم فك ترميزه عند استخدام tripev2.

  {
  "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 مع طلبك إلى واجهة برمجة تطبيقات الدفع في 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:

Node.js

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