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

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

الإعداد

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

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

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

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

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

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

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

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

المجموعات المختلفة من Environment و"وضع الدفع" و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\"}} "
    }
}

الإبلاغ عن المعاملات في وضع الحماية

عندما يكون وضع الدفع في وضع الحماية مفعَّلاً، يصبح حقل isInSandbox تم تضمينها في الطلب وضبطها على true للطلبات الواردة إلى الويب نقطة نهاية الخدمة (CheckoutRequestMessage وSubmitOrderRequestMessage). يُرجى تنفيذ ما يلي عند ضبط حقل isInSandbox على true:

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

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

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

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

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

لمعالجة الدفعة باستخدام الرمز المميّز، عليك إرجاع سلسلة الرمز المميّز المشفر 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 يفك ترميز 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;
  }
}