הזמנת פרויקטים מקצה לקצה מאפשרת להגדיר את מצב התשלום של Sandbox כאשר באמצעות הבדיקה המהירה או סביבת ה-Sandbox. בזמן בדיקת הנתונים בפיד, ניתן לעבור בין אמצעי התשלום 'ארגז חול' לבין אמצעי התשלום 'ייצור'. כדי כדי לבדוק תשלומים לפרויקט מקצה לקצה (end-to-end) של ההזמנות בלי לחייב את הכרטיסים, משתמשים Sandbox בתור מצב התשלום שלך. בסביבת הייצור אין לתמוך במצב התשלום של Sandbox.
תצורה
כדי להפעיל את מצב התשלום של Sandbox בסביבת Sandbox יש לפעול לפי שלבים:
- במרכז הפעולות, עוברים אל הגדרות אישיות > תכונות.
- בכרטיס תכונות החשבון, מחפשים את לחצן הבחירה מצב תשלום.
- בוחרים באפשרות Sandbox ולוחצים על Save changes (שמירת השינויים).
כדי להפעיל את מצב התשלום של Sandbox בסביבת הבדיקה המהירה יש לפעול לפי שלבים:
- במרכז הפעולות, מנווטים אל פידים > בדיקה מהירה.
- בוחרים בלחצן הבחירה שימוש ב-Sandbox ל-GPay.
כאשר נבחר מצב התשלום Sandbox:
- הזמנה מקצה לקצה מגדירה את Google Pay להחזרת אסימונים של אמצעים מכילים נתונים של כרטיס בדיקה במקום את פרטי הכרטיס בפועל.
- השדה
isInSandbox
מוגדר כ-true
CheckoutRequestMessage וגם SubmitOrderRequestMessage.
השילובים השונים של סביבה, מצב תשלום ו-isInSandbox הן:
סביבה | שיטת תשלום | isInSandbox |
---|---|---|
בדיקה מהירה | ארגז חול | true |
בדיקה מהירה | ייצור | false |
ארגז חול | ארגז חול | true |
ארגז חול | ייצור | false |
ייצור | ייצור | false |
הודעת תגובה לבקשת תשלום
קובץ ה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\"}} " } }
דיווח על עסקאות ב-Sandbox
כאשר מצב תשלום ארגז חול מופעל, השדה isInSandbox
הוא
נכללות בבקשה ומוגדרת ל-true
עבור בקשות נכנסות לאינטרנט
נקודת הקצה של השירות (CheckoutRequestMessage
ו-SubmitOrderRequestMessage
).
צריך לבצע את הפעולות הבאות כשהשדה isInSandbox
מוגדר ל-true
:
- שימוש במפתחות ארגז חול במקום במפתחות ייצור לצורך יצירת האסימונים את ההגדרה של שער התשלומים. רוב החברות לעיבוד תשלומים מספקות API גם ל-Sandbox וגם לסביבת הייצור.
- אל תפעילו תקשורת עם ספק האינטרנט, בדרך כלל מסעדה, כי לא צריך ליידע אותם לגבי עסקאות שמתבצעות ב-Sandbox.
כרטיסי אשראי לבדיקה אינם נתמכים, גם כאשר Sandbox של העסקאות מופעל. כשמבצעים עסקה, חובה להשתמש בכרטיס אשראי אמיתי. אבל, לפעמים אסימונים של אמצעי ארגז חול מכילים פרטי כרטיס בדיקה שלא ניתנים לחיוב.
עיבוד תשלומים
כשלקוח שולח את ההזמנה שלו, התכונה 'הזמנה מקצה לקצה' שולחת את
SubmitOrderRequestMessage
לנקודת הקצה של שירות האינטרנט. Google Pay
אסימון
נכלל כמחרוזת בקידוד base-64 ב-SubmitOrderRequestMessage
instrumentToken
השדה הזה. כדי לעבד את התשלום של הלקוח, צריך לבצע אחת מהפעולות הבאות, בהתאם
שער התשלומים שלך:
שער לתשלומים | |
---|---|
פסים או בריינטרי | מפענחים את מחרוזת האסימון בקידוד base-64 ושולחים את הנתונים המתאימים שנכללים במטען הייעודי (payload) של האסימון המפוענח לשער התשלום שלכם כדי לעבד את התשלום. |
כל שאר שערי התשלומים (כולל Strave2) | כדי לעבד את התשלום, צריך לשלוח את המחרוזת המלאה של האסימון בקידוד base-64 לממשק ה-API של שער התשלומים. המבנה של אסימון אמצעי התשלום ב-Google Pay מכיל שדות מוצפנים ששער התשלומים יכול לפענח אותם כדי לעבד את התשלום. |
דוגמה למטען ייעודי (payload) מפוענח
בדוגמאות הבאות מוצגים מטענים ייעודיים (payloads) מפוענחים שהוחזרו בפונקציה instrumentToken
לשדה לשערי תשלום שונים:
JSON
הדוגמה הבאה בפורמט JSON מייצגת אסימון תשלום מפוענח כשמשתמשים
Braintree. צריך לחלץ את הערך מהשדה nonce
ושולחים את הערך ל-Brainree כדי לעבד את התשלום.
{ "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 שמפענחים את זה בקידוד base-64
instrumentToken
מ-Brainree:
Node.js
function decodeToken(instrumentToken) { let decodedString = new Buffer(instrumentToken, 'base64').toString('ascii') if (decodedString.androidPayCards) { return decodedString.androidPayCards[0].nonce; } }