1. مقدمه
این Codelab ادامه Google Pay API برای Web 101: Basics است و بر روی کد نوشته شده در آن Codelab متکی است. برای تکمیل این کد، حتماً ابتدا آن را تکمیل کنید.
چیزی که یاد خواهید گرفت
- چگونه دکمه Google Pay را سفارشی کنیم
- نحوه شروع فرآیند پرداخت
- نحوه تأیید وضعیت مجوز پرداخت
- نحوه رسیدگی به تغییرات آدرس حمل و نقل
- نحوه مدیریت کدهای بازخرید
آنچه شما نیاز دارید
- یک ویرایشگر متن انتخابی شما برای ویرایش فایل های HTML و جاوا اسکریپت.
- مرورگر وب Google Chrome یا روش دیگری برای آزمایش یک وب سایت محلی.
- برای تولید،
merchantId
Google Pay نیاز دارید. ثبتنام در Google Pay & Wallet Console فقط یک دقیقه طول میکشد، بنابراین میتوانید همین الان از آن مراقبت کنید.
با استفاده از Project IDX همراه باشید
2. سفارشی سازی دکمه
این یک نمای کلی از ButtonOptions
است. برای توضیحات بیشتر به مستندات مراجعه کنید
گزینه | ضرورت | ارزش ها |
روی کلیک کنید | مورد نیاز | نام کنترل کننده رویداد جاوا اسکریپت |
روش های پرداخت مجاز | اختیاری | |
دکمه رنگ | اختیاری | پیش فرض، سیاه، سفید |
buttonLocale | اختیاری | کد ISO 639-1 دو حرفی. |
شعاع دکمه | اختیاری | 0 تا 100 |
buttonRootNode | اختیاری | HTMLDocument یا ShadowRoot |
دکمهSizeMode | اختیاری | استاتیک، پر کردن |
نوع دکمه | اختیاری | کتاب، خرید، پرداخت، اهدا، سفارش، پرداخت، ساده، اشتراک |
به دنبال متد renderGooglePayButton()
در فایل main.js
خود بگردید و آن را با کد فهرست شده در اینجا جایگزین کنید.
function renderGooglePayButton() {
const button = getGooglePaymentsClient().createButton({
buttonColor: 'default',
buttonType: 'buy',
buttonRadius: 4,
buttonLocale: 'en',
onClick: onGooglePaymentButtonClicked,
allowedPaymentMethods: baseGooglePayRequest.allowedPaymentMethods,
});
document.getElementById(GPAY_BUTTON_CONTAINER_ID).appendChild(button);
}
توضیح کد
- متد کتابخانه
createButton()
یک آرگومان پیکربندیButtonOptions
می گیرد که به شما امکان می دهد نحوه ظاهر و رفتار دکمه را تعریف کنید.
3. بازخوانی داده های پرداخت
مشتری پرداخت مکانیزمی را برای شما فراهم می کند تا عملکردهایی را ثبت کنید تا در مواقعی که رویدادهای خاصی اتفاق می افتد رسیدگی کنید. اولی مجوز پرداخت و دومی تغییر داده های پرداخت است.
- نظر
// todo: paymentDataCallbacks
درmain.js
پیدا کنید و آن را با این کد جایگزین کنید.paymentDataCallbacks: { onPaymentAuthorized: onPaymentAuthorized, onPaymentDataChanged: onPaymentDataChanged },
- سپس بخش
Event Handlers
را درmain.js
پیدا کنید و کد زیر را به انتهای بخش اضافه کنید.function onPaymentAuthorized(paymentData) { // We'll fill this in later } function onPaymentDataChanged(intermediatePaymentData) { // We'll fill this in later }
- در نهایت،
// todo: callbackIntents
comment را درmain.js
پیدا کنید و کامنت را با این کد جایگزین کنید. در این کد لبه قصد داریم هر 4 هدف را پیاده سازی کنیم.callbackIntents: [ 'PAYMENT_AUTHORIZATION', 'SHIPPING_ADDRESS', 'SHIPPING_OPTION', 'OFFER', ], shippingAddressRequired: true, shippingOptionRequired: true, shippingOptionParameters: { defaultSelectedOptionId: 'shipping-001', shippingOptions: [ { id: 'shipping-001', label: '$0.00: Free shipping', description: 'Free Shipping delivered in 5 business days.' }, { id: 'shipping-002', label: '$1.99: Standard shipping', description: 'Standard shipping delivered in 3 business days.' }, { id: 'shipping-003', label: '$1000: Express shipping', description: 'Express shipping delivered in 1 business day.' }, ], },
توضیح کد
- ویژگی
PaymentDataCallbacks
دارای دو ویژگی فرعی است که یکی برای یک بازخوانی مجوز پرداخت و دیگری برای یک تماس تغییر داده پرداخت است. - در صورت اجرای تماسهای برگشتی،
onPaymentAuthorized
مورد نیاز است. این پاسخ تماس زمانی فراخوانی میشود که فهرستcallbackIntents
شاملPAYMENT_AUTHORIZATION
درPaymentDataRequest
باشد. -
onPaymentDataChanged
اختیاری است. این پاسخ تماس زمانی فراخوانی می شود که لیستcallbackIntents
شاملOFFER
،SHIPPING_ADDRESS
، یاSHIPPING_OPTION
درPaymentDataRequest
باشد. -
callbackIntents
درPaymentDataRequest
تنظیم کنید تا هر دو تماس را برای این Codelab فعال کنند.
4. مجوز پرداخت
مجوز پرداخت برای شروع فرآیند پرداخت و تأیید وضعیت مجوز پرداخت استفاده می شود.
تابع onPaymentAuthorized()
را در main.js
که در مرحله آخر اضافه کردید پیدا کنید و کد زیر را جایگزین آن کنید.
function onPaymentAuthorized(paymentData) {
return new Promise(function(resolve, reject) {
// Write the data to console for debugging
console.log("onPaymentAuthorized", paymentData);
// Do something here to pass token to your gateway
// To simulate the payment processing, there is a 70% chance of success
const paymentAuthorizationResult = (Math.random() > 0.3)
? {transactionState: 'SUCCESS'}
: {
transactionState: 'ERROR',
error: {
intent: 'PAYMENT_AUTHORIZATION',
message: 'Insufficient funds',
reason: 'PAYMENT_DATA_INVALID'
}
};
resolve(paymentAuthorizationResult);
});
}
توضیح کد
- تابع callback
onPaymentAuthorized()
با آرگومانPaymentData
فراخوانی می شود و باید یک وعده را برگرداند. در این مثال، تابع به طور تصادفی انتخاب می کند که آیا موفقیت یا خطا را بازگرداند. در پروژه خود، از این فرصت برای پردازش تراکنش با دروازه خود با استفاده از رمز موجود درpaymentData
درpaymentData.paymentMethodData.tokenizationData.token
استفاده خواهید کرد.
5. تغییر داده های پرداخت
بهروزرسانیهای قیمت پویا به تاجر اجازه میدهد تا بهصورت پویا گزینههای حمل و نقل و اطلاعات تراکنش را بر اساس آدرس حمل و نقل انتخابی بهروزرسانی کند. علاوه بر این، می توانید به صورت پویا اطلاعات تراکنش را بر اساس گزینه حمل و نقل انتخابی به روز کنید.
تابع onPaymentDataChanged()
را در main.js
که در مرحله آخر اضافه کردید پیدا کنید و کد زیر را جایگزین آن کنید.
function onPaymentDataChanged(intermediatePaymentData) {
return new Promise(function(resolve, reject) {
let paymentDataRequestUpdate = {};
// Write the data to console for debugging
console.log("onPaymentDataChanged", intermediatePaymentData);
switch(intermediatePaymentData.callbackTrigger)
{
case "INITIALIZE":
// Handle initialize
break;
case "SHIPPING_ADDRESS":
// Read intermediatePaymentData.transactionInfo
// Read intermediatePaymentData.shippingAddress
// Update paymentDataRequestUpdate.newTransactionInfo
break;
case "SHIPPING_OPTION":
// Read intermediatePaymentData.transactionInfo
// Read intermediatePaymentData.shippingOptionData
// Update paymentDataRequestUpdate.newTransactionInfo
// Update paymentDataRequestUpdate.newShippingOptionParameters
break;
case "OFFER":
// Read intermediatePaymentData.offerData
// Read intermediatePaymentData.transactionInfo
// Update paymentDataRequestUpdate.newTransactionInfo
// Update paymentDataRequestUpdate.newOfferInfo
break;
default:
// Update paymentDataRequestUpdate.error
}
resolve(paymentDataRequestUpdate);
});
}
توضیح کد
- تابع
onPaymentDataChanged()
IntermediatePaymentData
به عنوان آرگومان می گیرد. هنگامی که آدرس حمل و نقل یا گزینه های حمل و نقل در برگه پرداخت تغییر می کند، این عملکرد فراخوانی می شود. - تابع
onPaymentDataChanged()
باید قولی را برگرداند که یک شیPaymentDataRequestUpdate
را که اطلاعات جدید تراکنش، گزینه های حمل و نقل و خطا را برای به روز رسانی برگه پرداخت مشخص می کند، حل کند. -
redemptionCodes
مجموعه ای از کدهای تبلیغاتی هستند که در برگه پرداخت وارد می شوند. شامل کدهایی است که قبلاً تأیید شده اند.
6. نتیجه گیری
بابت تکمیل این Codelab تبریک می گویم! شما یاد گرفته اید که چگونه ...
پروژه را اجرا کنید
با گوگل کروم تست کنید
با استفاده از مرورگر وب Google Chrome ، index.html
با استفاده از File > Open File... از منوی اصلی Chrome باز کنید. وقتی پروژه به این شکل باز شود، Chrome main.js
را اجرا می کند. سایر مرورگرهای وب ممکن است اجازه اجرای جاوا اسکریپت را ندهند.
– یا –
با یک وب سرور محلی تست کنید
اگر پایتون را نصب کرده اید، python3 -m http.server
از یک دستور ترمینال در پوشه root pay-web-101
اجرا کنید.
$ cd /your/path/to/pay-web-101
$ python3 -m http.server
Serving HTTP on :: port 8000 (http://[::]:8000/) ...
سپس، از سایت خود در http://localhost:8000
دیدن کنید.
از اینجا به کجا برویم
منابع اضافی
- به گفتگو در کانال #پرداخت در دیسکورد بپیوندید
- @GooglePayDevs را در X دنبال کنید
- ویدیوهای مرتبط با Google Pay را در YouTube تماشا کنید