1. مقدمه
این Codelab ادامه Google Pay API برای Web 101: Basics است و بر روی کد نوشته شده در آن Codelab متکی است. برای تکمیل این کد، حتماً ابتدا آن را تکمیل کنید.
چیزی که یاد خواهید گرفت
- چگونه دکمه Google Pay را سفارشی کنیم
- نحوه شروع فرآیند پرداخت
- نحوه تأیید وضعیت مجوز پرداخت
- نحوه رسیدگی به تغییرات آدرس حمل و نقل
- نحوه مدیریت کدهای بازخرید
آنچه شما نیاز دارید
- یک ویرایشگر متن انتخابی شما برای ویرایش فایل های HTML و جاوا اسکریپت.
- مرورگر وب Google Chrome یا روش دیگری برای آزمایش یک وب سایت محلی.
- برای تولید،
merchantIdGoogle Pay نیاز دارید. ثبتنام در Google Pay & Wallet Console فقط یک دقیقه طول میکشد، بنابراین میتوانید همین الان از آن مراقبت کنید.
با استفاده از Firebase Studio همراه باشید
2. سفارشی سازی دکمه
این یک نمای کلی از ButtonOptions است. برای توضیحات بیشتر به مستندات مراجعه کنید
گزینه | ضرورت | ارزش ها |
روی کلیک کنید | مورد نیاز | نام کنترل کننده رویداد جاوا اسکریپت |
روش های پرداخت مجاز | اختیاری | |
دکمه رنگ | اختیاری | پیش فرض، سیاه، سفید |
buttonLocale | اختیاری | کد ISO 639-1 دو حرفی. |
شعاع دکمه | اختیاری | 0 تا 100 |
buttonRootNode | اختیاری | HTMLDocument یا ShadowRoot |
buttonSizeMode | اختیاری | استاتیک، پر کردن |
نوع دکمه | اختیاری | کتاب، خرید، پرداخت، اهدا، سفارش، پرداخت، ساده، اشتراک |
به دنبال متد 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: callbackIntentscomment را در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 تماشا کنید