একটি Android পেমেন্ট অ্যাপ থেকে শিপিং এবং যোগাযোগের তথ্য প্রদান করুন

ওয়েব পেমেন্টস এপিআই (Web Payments APIs) ব্যবহার করে শিপিং ঠিকানা এবং অর্থ প্রদানকারীর যোগাযোগের তথ্য যোগ করার জন্য আপনার অ্যান্ড্রয়েড পেমেন্ট অ্যাপটি কীভাবে আপডেট করবেন।

সাহেল শরিফি
Sahel Sharify

প্রকাশিত: ১৭ জুলাই, ২০২০, সর্বশেষ হালনাগাদ: ২৭ মে, ২০২৫

ওয়েব ফর্মের মাধ্যমে শিপিং ঠিকানা এবং যোগাযোগের তথ্য প্রবেশ করানো গ্রাহকদের জন্য একটি ঝামেলার অভিজ্ঞতা হতে পারে। এর ফলে ভুল হতে পারে এবং কনভার্সন রেট কমে যেতে পারে।

এই কারণেই পেমেন্ট রিকোয়েস্ট এপিআই-তে শিপিং ঠিকানা এবং যোগাযোগের তথ্য অনুরোধ করার একটি ফিচার রয়েছে। এর একাধিক সুবিধা রয়েছে:

  • ব্যবহারকারীরা মাত্র কয়েকটি ট্যাপেই সঠিক ঠিকানা বেছে নিতে পারেন।
  • ঠিকানাটি সর্বদা প্রমিত বিন্যাসে ফেরত দেওয়া হয়।
  • ভুল ঠিকানা জমা দেওয়ার সম্ভাবনা কম।

একটি সমন্বিত পেমেন্ট অভিজ্ঞতা প্রদানের জন্য ব্রাউজারগুলো শিপিং ঠিকানা এবং যোগাযোগের তথ্য সংগ্রহের কাজটি কোনো পেমেন্ট অ্যাপের ওপর ছেড়ে দিতে পারে। এই কার্যকারিতাকে ডেলিগেশন বলা হয়।

যতটা সম্ভব, ক্রোম গ্রাহকের শিপিং ঠিকানা এবং যোগাযোগের তথ্য সংগ্রহের কাজটি সংশ্লিষ্ট অ্যান্ড্রয়েড পেমেন্ট অ্যাপের ওপর অর্পণ করে। এই দায়িত্ব অর্পণ চেকআউটের সময় জটিলতা কমিয়ে দেয়।

গ্রাহকের পছন্দের শিপিং ঠিকানা এবং শিপিং অপশনের ওপর নির্ভর করে মার্চেন্ট ওয়েবসাইটটি স্বয়ংক্রিয়ভাবে শিপিং অপশন ও মোট মূল্য আপডেট করতে পারে।

শিপিং অপশন এবং শিপিং ঠিকানা পরিবর্তনের প্রক্রিয়া। দেখুন এটি কীভাবে শিপিং অপশন এবং মোট মূল্যকে গতিশীলভাবে প্রভাবিত করে।

ইতিমধ্যে বিদ্যমান একটি অ্যান্ড্রয়েড পেমেন্ট অ্যাপে ডেলিগেশন সাপোর্ট যোগ করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. সমর্থিত প্রতিনিধিদল ঘোষণা করুন ।
  2. প্রয়োজনীয় পেমেন্ট অপশনগুলোর জন্য PAY ইনটেন্ট এক্সট্রাগুলো পার্স করুন ।
  3. পেমেন্ট সংক্রান্ত উত্তরে প্রয়োজনীয় তথ্য প্রদান করুন ।
  4. ঐচ্ছিক: গতিশীল প্রবাহ সমর্থন করুন :
    1. ব্যবহারকারীর নির্বাচিত অর্থপ্রদানের পদ্ধতি, শিপিং ঠিকানা বা শিপিং বিকল্পে কোনো পরিবর্তন হলে বিক্রেতাকে অবহিত করুন ।
    2. মার্চেন্টের কাছ থেকে পেমেন্টের হালনাগাদ বিবরণ গ্রহণ করুন (উদাহরণস্বরূপ, নির্বাচিত শিপিং অপশনের খরচের উপর ভিত্তি করে সমন্বয়কৃত মোট পরিমাণ) ।

সমর্থিত প্রতিনিধিদল ঘোষণা করুন

আপনার পেমেন্ট অ্যাপ যে অতিরিক্ত তথ্যগুলো সরবরাহ করতে পারে, ব্রাউজারের সেই তালিকাটি জানা প্রয়োজন, যাতে এটি সেই তথ্য সংগ্রহের দায়িত্ব আপনার অ্যাপকে অর্পণ করতে পারে। আপনার অ্যাপের 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 ডিকশনারি ব্যবহার করে অতিরিক্ত প্রয়োজনীয় তথ্য নির্দিষ্ট করতে পারেন। PAY অ্যাক্টিভিটিতে paymentOptions Intent এক্সট্রাগুলো পাস করার মাধ্যমে Chrome আপনার অ্যাপের জন্য প্রয়োজনীয় অপশনগুলোর একটি তালিকা সরবরাহ করবে।

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 সুগঠিত ৩-অক্ষরের বর্ণমালা কোড প্রদর্শন করে।
    • 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 কার্যকলাপের প্রতিক্রিয়ায় প্রয়োজনীয় অতিরিক্ত তথ্য অন্তর্ভুক্ত করা উচিত।

এর জন্য নিম্নলিখিত প্যারামিটারগুলো ইন্টেন্ট এক্সট্রা হিসেবে নির্দিষ্ট করতে হবে:

  • payerName - অর্থ প্রদানকারীর পুরো নাম। paymentOptions.requestPayerName মান true হলে এটি একটি অ-খালি স্ট্রিং হওয়া উচিত।
  • payerPhone - অর্থ প্রদানকারীর ফোন নম্বর। যখন paymentOptions.requestPayerPhone এর মান true হয়, তখন এটি একটি অ-খালি স্ট্রিং হওয়া উচিত।
  • payerEmail - অর্থ প্রদানকারীর ইমেল ঠিকানা। যখন paymentOptions.requestPayerEmail মান true হয়, তখন এটি একটি অ-খালি স্ট্রিং হওয়া উচিত।
  • shippingAddress - ব্যবহারকারীর দেওয়া শিপিং ঠিকানা। paymentOptions.requestShipping সত্য হলে এটি একটি অ-খালি বান্ডেল হওয়া উচিত। বান্ডেলটিতে নিম্নলিখিত কী-গুলো থাকা উচিত, যা একটি বাস্তব ঠিকানার বিভিন্ন অংশকে নির্দেশ করে।
    • countryCode
    • postalCode
    • sortingCode
    • region
    • city
    • dependentLocality
    • addressLine
    • organization
    • recipient
    • phone ছাড়া অন্য সব কী addressLine এর মান স্ট্রিং। addressLine হলো স্ট্রিং-এর একটি অ্যারে।
  • shippingOptionId - ব্যবহারকারীর নির্বাচিত শিপিং অপশনের শনাক্তকারী। যখন paymentOptions.requestShipping মান true হয়, তখন এটি একটি অ-খালি স্ট্রিং হওয়া উচিত।

পেমেন্টের প্রতিক্রিয়া যাচাই করুন

যদি ব্যবহৃত পেমেন্ট অ্যাপ থেকে প্রাপ্ত পেমেন্ট রেসপন্সের অ্যাক্টিভিটি রেজাল্ট RESULT_OK সেট করা থাকে, তাহলে Chrome তার extras-এ প্রয়োজনীয় অতিরিক্ত তথ্য যাচাই করবে। যদি এই যাচাইকরণ ব্যর্থ হয়, তাহলে 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 ইন্টারফেসটি ইমপ্লিমেন্ট করুন এবং আপনার AndroidManifest.xml এ UPDATE_PAYMENT_DETAILS ইন্টেন্ট ফিল্টারসহ এটি ডিক্লেয়ার করুন।

PAY ইন্টেন্টটি চালু করার ঠিক পরেই, Chrome PAY ইন্টেন্টের একই প্যাকেজে থাকা UPDATE_PAYMENT_DETAILS সার্ভিসের (যদি এটি বিদ্যমান থাকে) সাথে সংযোগ স্থাপন করবে এবং setPaymentDetailsUpdateService(service) কল করবে। এর ফলে আপনার পেমেন্ট অ্যাপ ব্যবহারকারীর পেমেন্ট পদ্ধতি, শিপিং অপশন বা শিপিং ঠিকানার পরিবর্তন সম্পর্কে অবহিত করার জন্য IPaymentDetailsUpdateService এন্ড-পয়েন্টটি পাবে।

ইন্টার-প্রসেস কমিউনিকেশন (IPC) গ্রহণ করার সময়, PAY ইন্টেন্টটি কল করা অ্যাপ এবং IPaymentDetailsUpdateServiceCallback মেথডগুলো কল করা অ্যাপের প্যাকেজ নেম একই কিনা তা যাচাই করতে packageManager.getPackagesForUid(Binder.getCallingUid()) ব্যবহার করুন।

এআইডিএল

নিম্নলিখিত বিষয়বস্তু সহ দুটি 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 ফিল্ড থাকে, যেগুলোও বান্ডেল।

একটি অনুপস্থিত কী-এর অর্থ হলো এর মান পরিবর্তিত হয়নি।