ওয়েব পেমেন্টস এপিআই ব্যবহার করে শিপিং ঠিকানা এবং প্রদানকারীর যোগাযোগের তথ্য প্রদানের জন্য আপনার অ্যান্ড্রয়েড পেমেন্ট অ্যাপটি কীভাবে আপডেট করবেন।
প্রকাশিত: ১৭ জুলাই, ২০২০, সর্বশেষ আপডেট: ২৭ মে, ২০২৫
ওয়েব ফর্মের মাধ্যমে শিপিং ঠিকানা এবং যোগাযোগের তথ্য প্রবেশ করা গ্রাহকদের জন্য একটি ঝামেলাপূর্ণ অভিজ্ঞতা হতে পারে। এতে ত্রুটি হতে পারে এবং রূপান্তর হার কমতে পারে।
এই কারণেই পেমেন্ট রিকোয়েস্ট API শিপিং ঠিকানা এবং যোগাযোগের তথ্য অনুরোধ করার জন্য একটি বৈশিষ্ট্য সমর্থন করে। এটি একাধিক সুবিধা প্রদান করে:
- ব্যবহারকারীরা মাত্র কয়েকটি ট্যাপ করেই সঠিক ঠিকানা বেছে নিতে পারবেন।
- ঠিকানাটি সর্বদা প্রমিত বিন্যাসে ফেরত পাঠানো হয়।
- ভুল ঠিকানা জমা দেওয়ার সম্ভাবনা কম।
ব্রাউজারগুলি একটি সমন্বিত পেমেন্ট অভিজ্ঞতা প্রদানের জন্য একটি পেমেন্ট অ্যাপে শিপিং ঠিকানা এবং যোগাযোগের তথ্য সংগ্রহ স্থগিত করতে পারে। এই কার্যকারিতাটিকে ডেলিগেশান বলা হয়।
যখনই সম্ভব, ক্রোম গ্রাহকের শিপিং ঠিকানা এবং যোগাযোগের তথ্য সংগ্রহের দায়িত্ব অ্যান্ড্রয়েড পেমেন্ট অ্যাপের উপর অর্পণ করে। এই অর্পণ চেকআউটের সময় ঝামেলা কমায়।
গ্রাহকের পছন্দের শিপিং ঠিকানা এবং শিপিং বিকল্পের উপর নির্ভর করে মার্চেন্ট ওয়েবসাইটটি শিপিং বিকল্পগুলি এবং মোট মূল্য গতিশীলভাবে আপডেট করতে পারে।
ইতিমধ্যেই বিদ্যমান অ্যান্ড্রয়েড পেমেন্ট অ্যাপে ডেলিগেশন সাপোর্ট যোগ করতে, নিম্নলিখিত পদক্ষেপগুলি বাস্তবায়ন করুন:
- সমর্থিত প্রতিনিধিদল ঘোষণা করুন ।
- প্রয়োজনীয় পেমেন্ট বিকল্পগুলির জন্য
PAYইন্টেন্ট এক্সট্রা পার্স করুন । - পেমেন্টের প্রতিক্রিয়ায় প্রয়োজনীয় তথ্য প্রদান করুন ।
- ঐচ্ছিক: গতিশীল প্রবাহ সমর্থন করুন :
সমর্থিত প্রতিনিধিদল ঘোষণা করুন
আপনার পেমেন্ট অ্যাপ যে অতিরিক্ত তথ্য সরবরাহ করতে পারে তার তালিকা ব্রাউজারকে জানতে হবে যাতে এটি সেই তথ্য সংগ্রহ আপনার অ্যাপে অর্পণ করতে পারে। আপনার অ্যাপের AndroidManifest.xml এ সমর্থিত ডেলিগেশনগুলিকে <meta-data> হিসাবে ঘোষণা করুন।
<activity
android:name=".PaymentActivity"
…
<meta-data
android:name="org.chromium.payment_supported_delegations"
android:resource="@array/chromium_payment_supported_delegations" />
</activity>
android:resource অবশ্যই একটি <string-array> নির্দেশ করবে যেখানে নিম্নলিখিত মানগুলির সমস্ত অথবা একটি উপসেট থাকবে:
-
payerName -
payerEmail -
payerPhone -
shippingAddress
নিম্নলিখিত উদাহরণটি শুধুমাত্র একটি শিপিং ঠিকানা এবং প্রদানকারীর ইমেল ঠিকানা প্রদান করতে পারে।
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="chromium_payment_supported_delegations">
<item>payerEmail</item>
<item>shippingAddress</item>
</string-array>
</resources>
প্রয়োজনীয় পেমেন্ট বিকল্পগুলির জন্য PAY ইন্টেন্ট এক্সট্রা পার্স করুন
ব্যবসায়ী paymentOptions অভিধান ব্যবহার করে অতিরিক্ত প্রয়োজনীয় তথ্য নির্দিষ্ট করতে পারেন। ক্রোম আপনার অ্যাপের প্রয়োজনীয় বিকল্পগুলির তালিকা প্রদান করবে, যা paymentOptions ইন্টেন্ট অতিরিক্তগুলি PAY কার্যকলাপে প্রেরণ করে।
paymentOptions
paymentOptions হল বণিক নির্দিষ্ট পেমেন্ট বিকল্পগুলির একটি উপসেট যার জন্য আপনার অ্যাপ ডেলিগেশন সাপোর্ট ঘোষণা করেছে।
কোটলিন
val paymentOptions: Bundle? = extras.getBundle("paymentOptions")
val requestPayerName: Boolean? = paymentOptions?.getBoolean("requestPayerName")
val requestPayerPhone: Boolean? = paymentOptions?.getBoolean("requestPayerPhone")
val requestPayerEmail: Boolean? = paymentOptions?.getBoolean("requestPayerEmail")
val requestShipping: Boolean? = paymentOptions?.getBoolean("requestShipping")
val shippingType: String? = paymentOptions?.getString("shippingType")
জাভা
Bundle paymentOptions = extras.getBundle("paymentOptions");
if (paymentOptions != null) {
Boolean requestPayerName = paymentOptions.getBoolean("requestPayerName");
Boolean requestPayerPhone = paymentOptions.getBoolean("requestPayerPhone");
Boolean requestPayerEmail = paymentOptions.getBoolean("requestPayerEmail");
Boolean requestShipping = paymentOptions.getBoolean("requestShipping");
String shippingType = paymentOptions.getString("shippingType");
}
এতে নিম্নলিখিত পরামিতিগুলি অন্তর্ভুক্ত থাকতে পারে:
-
requestPayerName- বুলিয়ান যা নির্দেশ করে যে প্রদানকারীর নাম প্রয়োজন কিনা। -
requestPayerPhone- বুলিয়ান যা নির্দেশ করে যে অর্থপ্রদানকারীর ফোন প্রয়োজন কিনা। -
requestPayerEmail- বুলিয়ান যা নির্দেশ করে যে প্রদানকারীর ইমেল প্রয়োজন কিনা। -
requestShipping- শিপিং তথ্য প্রয়োজন কিনা তা নির্দেশ করে এমন বুলিয়ান। -
shippingType- শিপিংয়ের ধরণ দেখানো স্ট্রিং। শিপিংয়ের ধরণ"shipping","delivery", অথবা"pickup"হতে পারে। ব্যবহারকারীর ঠিকানা বা শিপিং বিকল্পগুলির পছন্দ জিজ্ঞাসা করার সময় আপনার অ্যাপটি তার UI-তে এই ইঙ্গিতটি ব্যবহার করতে পারে।
shippingOptions
shippingOptions হল মার্চেন্ট নির্দিষ্ট শিপিং বিকল্পগুলির একটি পার্সেলযোগ্য অ্যারে। এই প্যারামিটারটি কেবল তখনই বিদ্যমান থাকবে যখন paymentOptions.requestShipping == true ।
কোটলিন
val shippingOptions: List<ShippingOption>? =
extras.getParcelableArray("shippingOptions")?.mapNotNull {
p -> from(p as Bundle)
}
জাভা
Parcelable[] shippingOptions = extras.getParcelableArray("shippingOptions");
for (Parcelable it : shippingOptions) {
if (it != null && it instanceof Bundle) {
Bundle shippingOption = (Bundle) it;
}
}
প্রতিটি শিপিং বিকল্প হল নিম্নলিখিত কীগুলি সহ একটি Bundle ।
-
id- শিপিং বিকল্প শনাক্তকারী। -
label- ব্যবহারকারীকে দেখানো শিপিং বিকল্পের লেবেল। -
amount- স্ট্রিং মান সহcurrencyএবংvalueকী ধারণকারী শিপিং খরচ বান্ডেল।-
currencyশিপিং খরচের মুদ্রা দেখায়, একটি ISO4217 সুগঠিত 3-অক্ষরের বর্ণমালা কোড হিসাবে -
valueশিপিং খরচের মান দেখায়, একটি বৈধ দশমিক আর্থিক মান হিসাবে
-
-
selected- পেমেন্ট অ্যাপ যখন শিপিং বিকল্পগুলি প্রদর্শন করে তখন শিপিং বিকল্পটি নির্বাচন করা উচিত কিনা।
selected কী ছাড়া অন্য সকল কী-এর স্ট্রিং মান আছে। selected একটি বুলিয়ান মান আছে।
কোটলিন
val id: String = bundle.getString("id")
val label: String = bundle.getString("label")
val amount: Bundle = bundle.getBundle("amount")
val selected: Boolean = bundle.getBoolean("selected", false)
জাভা
String id = bundle.getString("id");
String label = bundle.getString("label");
Bundle amount = bundle.getBundle("amount");
Boolean selected = bundle.getBoolean("selected", false);
পেমেন্টের প্রতিক্রিয়ায় প্রয়োজনীয় তথ্য প্রদান করুন
আপনার অ্যাপে PAY কার্যকলাপের প্রতিক্রিয়ায় প্রয়োজনীয় অতিরিক্ত তথ্য অন্তর্ভুক্ত করা উচিত।
এটি করার জন্য নিম্নলিখিত প্যারামিটারগুলিকে Intent অতিরিক্ত হিসাবে নির্দিষ্ট করতে হবে:
-
payerName- প্রদানকারীর পুরো নাম।paymentOptions.requestPayerNameসত্য হলে এটি একটি খালি স্ট্রিং হওয়া উচিত নয়। -
payerPhone- প্রদানকারীর ফোন নম্বর।paymentOptions.requestPayerPhoneসত্য হলে এটি একটি খালি স্ট্রিং হওয়া উচিত নয়। -
payerEmail- প্রদানকারীর ইমেল ঠিকানা।paymentOptions.requestPayerEmailসত্য হলে এটি একটি খালি স্ট্রিং হওয়া উচিত নয়। -
shippingAddress- ব্যবহারকারীর দ্বারা প্রদত্ত শিপিং ঠিকানা।paymentOptions.requestShippingসত্য হলে এটি একটি খালি বান্ডেল হওয়া উচিত নয়। বান্ডেলটিতে নিম্নলিখিত কীগুলি থাকা উচিত যা একটি প্রকৃত ঠিকানার বিভিন্ন অংশকে প্রতিনিধিত্ব করে।-
countryCode -
postalCode -
sortingCode -
region -
city -
dependentLocality -
addressLine -
organization -
recipient -
phoneaddressLineছাড়া অন্য সকল কী-এর স্ট্রিং মান থাকে।addressLineহল স্ট্রিংগুলির একটি অ্যারে।
-
-
shippingOptionId- ব্যবহারকারী-নির্বাচিত শিপিং বিকল্পের শনাক্তকারী।paymentOptions.requestShippingসত্য হলে এটি একটি খালি স্ট্রিং হওয়া উচিত নয়।
পেমেন্টের প্রতিক্রিয়া যাচাই করুন
যদি ইনভোক করা পেমেন্ট অ্যাপ থেকে প্রাপ্ত পেমেন্ট প্রতিক্রিয়ার কার্যকলাপের ফলাফল RESULT_OK তে সেট করা থাকে, তাহলে Chrome তার অতিরিক্ত তথ্যের মধ্যে প্রয়োজনীয় অতিরিক্ত তথ্য পরীক্ষা করবে। যদি যাচাইকরণ ব্যর্থ হয়, তাহলে Chrome নিম্নলিখিত ডেভেলপার-মুখী ত্রুটি বার্তাগুলির মধ্যে একটি সহ request.show() থেকে একটি প্রত্যাখ্যাত প্রতিশ্রুতি ফেরত দেবে:
'Payment app returned invalid response. Missing field "payerEmail".'
'Payment app returned invalid response. Missing field "payerName".'
'Payment app returned invalid response. Missing field "payerPhone".'
'Payment app returned invalid shipping address in response.'
'... is not a valid CLDR country code, should be 2 upper case letters [A-Z].'
'Payment app returned invalid response. Missing field "shipping option".'
নিম্নলিখিত কোড নমুনাটি একটি বৈধ প্রতিক্রিয়ার উদাহরণ:
কোটলিন
fun Intent.populateRequestedPaymentOptions() {
if (requestPayerName) {
putExtra("payerName", "John Smith")
}
if (requestPayerPhone) {
putExtra("payerPhone", "5555555555")
}
if (requestPayerEmail) {
putExtra("payerEmail", "john.smith@gmail.com")
}
if (requestShipping) {
val address: Bundle = Bundle()
address.putString("countryCode", "CA")
val addressLines: Array<String> =
arrayOf<String>("111 Richmond st. West")
address.putStringArray("addressLines", addressLines)
address.putString("region", "Ontario")
address.putString("city", "Toronto")
address.putString("postalCode", "M5H2G4")
address.putString("recipient", "John Smith")
address.putString("phone", "5555555555")
putExtra("shippingAddress", address)
putExtra("shippingOptionId", "standard")
}
}
জাভা
private Intent populateRequestedPaymentOptions() {
Intent result = new Intent();
if (requestPayerName) {
result.putExtra("payerName", "John Smith");
}
if (requestPayerPhone) {
presult.utExtra("payerPhone", "5555555555");
}
if (requestPayerEmail) {
result.putExtra("payerEmail", "john.smith@gmail.com");
}
if (requestShipping) {
Bundle address = new Bundle();
address.putExtra("countryCode", "CA");
address.putExtra("postalCode", "M5H2G4");
address.putExtra("region", "Ontario");
address.putExtra("city", "Toronto");
String[] addressLines = new String[] {"111 Richmond st. West"};
address.putExtra("addressLines", addressLines);
address.putExtra("recipient", "John Smith");
address.putExtra("phone", "5555555555");
result.putExtra("shippingAddress", address);
result.putExtra("shippingOptionId", "standard");
}
return result;
}
ঐচ্ছিক: গতিশীল প্রবাহ সমর্থন করুন
কখনও কখনও লেনদেনের মোট খরচ বেড়ে যায়, যেমন যখন ব্যবহারকারী এক্সপ্রেস শিপিং বিকল্পটি বেছে নেন, অথবা যখন ব্যবহারকারী আন্তর্জাতিক শিপিং ঠিকানা বেছে নেন তখন উপলব্ধ শিপিং বিকল্পগুলির তালিকা বা তাদের দাম পরিবর্তিত হয়। যখন আপনার অ্যাপ ব্যবহারকারী-নির্বাচিত শিপিং ঠিকানা বা বিকল্প প্রদান করে, তখন এটি ব্যবসায়ীকে যেকোনো শিপিং ঠিকানা বা বিকল্পের পরিবর্তন সম্পর্কে অবহিত করতে এবং ব্যবহারকারীকে আপডেট করা অর্থপ্রদানের বিবরণ (বণিক দ্বারা সরবরাহিত) দেখাতে সক্ষম হওয়া উচিত।
নতুন পরিবর্তন সম্পর্কে মার্চেন্টকে অবহিত করতে, IPaymentDetailsUpdateServiceCallback ইন্টারফেসটি প্রয়োগ করুন এবং UPDATE_PAYMENT_DETAILS ইন্টেন্ট ফিল্টার সহ আপনার AndroidManifest.xml এ এটি ঘোষণা করুন।
PAY ইন্টেন্ট ব্যবহার করার পরপরই, Chrome PAY ইন্টেন্টের মতো একই প্যাকেজে UPDATE_PAYMENT_DETAILS পরিষেবার সাথে সংযুক্ত হবে (যদি এটি বিদ্যমান থাকে) এবং setPaymentDetailsUpdateService(service) এ কল করে আপনার পেমেন্ট অ্যাপটিকে IPaymentDetailsUpdateService এন্ড-পয়েন্ট প্রদান করবে এবং ব্যবহারকারীর পেমেন্ট পদ্ধতি, শিপিং বিকল্প বা শিপিং ঠিকানার পরিবর্তন সম্পর্কে অবহিত করবে।
ইন্টার-প্রসেস কমিউনিকেশন (IPC) গ্রহণ করার সময় packageManager.getPackagesForUid(Binder.getCallingUid()) ব্যবহার করে যাচাই করুন যে PAY ইন্টেন্ট ব্যবহার করা অ্যাপটির প্যাকেজের নাম IPaymentDetailsUpdateServiceCallback পদ্ধতি ব্যবহার করা অ্যাপের মতোই।
AIDL সম্পর্কে
নিম্নলিখিত বিষয়বস্তু সহ দুটি AIDL ফাইল তৈরি করুন:
org/chromium/components/payments/IPaymentDetailsUpdateServiceCallback.aidl
package org.chromium.components.payments;
import android.os.Bundle;
import org.chromium.components.payments.IPaymentDetailsUpdateService;
interface IPaymentDetailsUpdateServiceCallback {
oneway void updateWith(in Bundle updatedPaymentDetails);
oneway void paymentDetailsNotUpdated();
oneway void setPaymentDetailsUpdateService(IPaymentDetailsUpdateService service);
}
org/chromium/components/payments/IPaymentDetailsUpdateService.aidl
package org.chromium.components.payments;
import android.os.Bundle;
import org.chromium.components.payments.IPaymentDetailsUpdateServiceCallback;
interface IPaymentDetailsUpdateService {
oneway void changePaymentMethod(in Bundle paymentHandlerMethodData,
IPaymentDetailsUpdateServiceCallback callback);
oneway void changeShippingOption(in String shippingOptionId,
IPaymentDetailsUpdateServiceCallback callback);
oneway void changeShippingAddress(in Bundle shippingAddress,
IPaymentDetailsUpdateServiceCallback callback);
}
সেবা
IPaymentDetailsUpdateServiceCallback পরিষেবাটি বাস্তবায়ন করুন।
কোটলিন
class SampleUpdatePaymentDetailsCallbackService : Service() {
private val binder = object : IPaymentDetailsUpdateServiceCallback.Stub() {
override fun updateWith(updatedPaymentDetails: Bundle) {}
override fun paymentDetailsNotUpdated() {}
override fun setPaymentDetailsUpdateService(service: IPaymentDetailsUpdateService) {}
}
override fun onBind(intent: Intent?): IBinder? {
return binder
}
}
জাভা
import org.chromium.components.paymsnts.IPaymentDetailsUpdateServiceCallback;
public class SampleUpdatePaymentDetailsCallbackService extends Service {
private final IPaymentDetailsUpdateServiceCallback.Stub mBinder =
new IPaymentDetailsUpdateServiceCallback.Stub() {
@Override
public void updateWith(Bundle updatedPaymentDetails) {}
@Override
public void paymentDetailsNotUpdated() {}
@Override
public void setPaymentDetailsUpdateService(IPaymentDetailsUpdateService service) {}
};
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
}
AndroidManifest.xml
আপনার AndroidManifest.xml এ IPaymentDetailsUpdateServiceCallback এর পরিষেবাটি প্রকাশ করুন।
<service
android:name=".SampleUpdatePaymentDetailsCallbackService"
android:exported="true">
<intent-filter>
<action android:name="org.chromium.intent.action.UPDATE_PAYMENT_DETAILS" />
</intent-filter>
</service>
ব্যবহারকারীর নির্বাচিত পেমেন্ট পদ্ধতি, শিপিং ঠিকানা, অথবা শিপিং বিকল্পের পরিবর্তন সম্পর্কে ব্যবসায়ীকে অবহিত করুন।
কোটলিন
try {
if (isOptionChange) {
service?.changeShippingOption(selectedOptionId, callback)
} else (isAddressChange) {
service?.changeShippingAddress(selectedAddress, callback)
} else {
service?.changePaymentMethod(methodData, callback)
}
} catch (e: RemoteException) {
// Handle the remote exception
}
জাভা
if (service == null) {
return;
}
try {
if (isOptionChange) {
service.changeShippingOption(selectedOptionId, callback);
} else (isAddressChange) {
service.changeShippingAddress(selectedAddress, callback);
} else {
service.changePaymentMethod(methodData, callback);
}
} catch (RemoteException e) {
// Handle the remote exception
}
changePaymentMethod
ব্যবহারকারীর নির্বাচিত পেমেন্ট পদ্ধতিতে পরিবর্তন সম্পর্কে ব্যবসায়ীকে অবহিত করে। paymentHandlerMethodData বান্ডেলে methodName এবং ঐচ্ছিক details কী উভয়ই স্ট্রিং মান সহ থাকে। Chrome একটি খালি নয় এমন methodName সহ একটি খালি বান্ডেল পরীক্ষা করবে এবং যাচাইকরণ ব্যর্থ হলে callback.updateWith ব্যবহার করে নিম্নলিখিত ত্রুটি বার্তাগুলির মধ্যে একটি সহ একটি updatePaymentDetails পাঠাবে।
'Method data required.'
'Method name required.'
changeShippingOption
ব্যবহারকারীর নির্বাচিত শিপিং বিকল্পে পরিবর্তন সম্পর্কে বণিককে অবহিত করে। shippingOptionId বণিক-নির্দিষ্ট শিপিং বিকল্পগুলির একটির শনাক্তকারী হওয়া উচিত। Chrome একটি খালি নয় এমন shippingOptionId পরীক্ষা করবে এবং যাচাইকরণ ব্যর্থ হলে callback.updateWith ব্যবহার করে নিম্নলিখিত ত্রুটি বার্তা সহ একটি updatePaymentDetails পাঠাবে।
'Shipping option identifier required.'
changeShippingAddress
ব্যবহারকারীর দ্বারা প্রদত্ত শিপিং ঠিকানার পরিবর্তন সম্পর্কে ব্যবসায়ীকে অবহিত করে। Chrome একটি বৈধ countryCode সহ একটি খালি নয় এমন shippingAddress বান্ডেল পরীক্ষা করবে এবং যাচাইকরণ ব্যর্থ হলে callback.updateWith ব্যবহার করে নিম্নলিখিত ত্রুটি বার্তা সহ একটি updatePaymentDetails পাঠাবে।
'Payment app returned invalid shipping address in response.'
অবৈধ অবস্থা ত্রুটি বার্তা
যদি কোনও পরিবর্তনের অনুরোধ পাওয়ার পরে Chrome কোনও অবৈধ অবস্থার সম্মুখীন হয়, তাহলে এটি একটি সংশোধন করা updatePaymentDetails বান্ডেল সহ callback.updateWith কল করবে। বান্ডেলটিতে কেবল "Invalid state" সহ error কী থাকবে। একটি অবৈধ অবস্থার উদাহরণ হল:
- যখন Chrome এখনও পূর্ববর্তী কোনও পরিবর্তনের (যেমন চলমান কোনও পরিবর্তন ইভেন্ট) জন্য ব্যবসায়ীর প্রতিক্রিয়ার জন্য অপেক্ষা করছে।
- পেমেন্ট-অ্যাপ-প্রদত্ত শিপিং বিকল্প শনাক্তকারীটি কোনও বণিক-নির্দিষ্ট শিপিং বিকল্পের সাথে সম্পর্কিত নয়।
বণিকের কাছ থেকে আপডেট করা পেমেন্টের বিবরণ পান
কোটলিন
override fun updateWith(updatedPaymentDetails: Bundle) {}
override fun paymentDetailsNotUpdated() {}
জাভা
@Override
public void updateWith(Bundle updatedPaymentDetails) {}
@Override
public void paymentDetailsNotUpdated() {}
updatedPaymentDetails হল PaymentRequestDetailsUpdate WebIDL অভিধানের সমতুল্য বান্ডেল এবং এতে নিম্নলিখিত ঐচ্ছিক কীগুলি রয়েছে:
-
total-currencyএবংvalueকী সমন্বিত একটি বান্ডেল, উভয় কীতেই স্ট্রিং মান রয়েছে -
shippingOptions- পার্সেলযোগ্য শিপিং অপশনের একটি অ্যারে -
error- একটি স্ট্রিং যার মধ্যে একটি জেনেরিক ত্রুটি বার্তা রয়েছে (যেমন যখনchangeShippingOptionএকটি বৈধ শিপিং বিকল্প শনাক্তকারী প্রদান করে না) -
stringifiedPaymentMethodErrors- একটি JSON স্ট্রিং যা পেমেন্ট পদ্ধতির জন্য বৈধতা ত্রুটিগুলি উপস্থাপন করে -
addressErrors- শিপিং ঠিকানা এবং স্ট্রিং মানের অনুরূপ ঐচ্ছিক কী সহ একটি বান্ডিল। প্রতিটি কী শিপিং ঠিকানার সংশ্লিষ্ট অংশের সাথে সম্পর্কিত একটি বৈধতা ত্রুটি উপস্থাপন করে। -
modifiers- বান্ডেলের একটি পার্সেলযোগ্য অ্যারে, প্রতিটিতে একটিtotalএবং একটিmethodDataফিল্ড থাকে, যা আবার বান্ডেলও।
একটি অনুপস্থিত চাবি মানে এর মান পরিবর্তিত হয়নি।