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