নেটিভ চেকআউট REST API বাস্তবায়ন, নেটিভ চেকআউট REST API বাস্তবায়ন

এই নির্দেশিকাটি ইউনিভার্সাল কমার্স প্রোটোকল (ইউসিপি) নেটিভ চেকআউটের সংস্করণ 2026-04-08 এর জন্য প্রযুক্তিগত এপিআই রেফারেন্স এবং পেলোড স্কিমা প্রদান করে।

আপনার এন্ডপয়েন্টগুলি তৈরি করার আগে, উচ্চ-স্তরের চেকআউট ফ্লো, প্রমাণীকরণের প্রয়োজনীয়তা এবং ডেভেলপার টুলস সম্পর্কে জানতে নেটিভ চেকআউট ওভারভিউ পর্যালোচনা করেছেন কিনা তা নিশ্চিত করুন।

চেকআউট সেশন তৈরি করুন

এই এন্ডপয়েন্টটি ব্যবহারকারীর কিনতে আগ্রহী পণ্যগুলো সম্বলিত একটি চেকআউট সেশন তৈরি করার সুযোগ দেয়।

  • এন্ডপয়েন্ট: POST /checkout-sessions
  • ট্রিগার: ব্যবহারকারী কোনো পণ্যের "এখনই কিনুন" বোতামে অথবা কার্ট থেকে "গুগলে চেকআউট করুন" বোতামে ক্লিক করলে।

অনুরোধ: গুগল ক্রেতার বিবরণ এবং সীমিত ঠিকানা-সংক্রান্ত তথ্য পাঠায়, যার মধ্যে শহর, রাজ্য এবং জিপ কোড অন্তর্ভুক্ত থাকে।

// Request Example: Create checkout with multiple items.
{
  "line_items": [
    {
      "item": {
        // Must match ID in product feed
        "id": "product_12345"
      },
      "quantity": 1
    },
    {
      "item": {
        // Must match ID in product feed
        "id": "product_67890"
      },
      "quantity": 1
    }
  ],
  "context": {
    "language": "en-US"
  },
  "fulfillment": {
    "methods": [
      {
        "type": "shipping",
        "destinations": [
          {
            "address_locality": "Sunnyvale",
            "address_region": "CA",
            "postal_code": "94089",
            "address_country": "US"
          }
        ]
      }
    ]
  }
}

প্রতিক্রিয়া: আপনি মোট পরিমাণ, কর (প্রাথমিকভাবে আনুমানিক) এবং অর্থপ্রদানের সুবিধাসহ প্রারম্ভিক সেশনটি ফেরত দেন।

ucp.status ফিল্ড সম্পর্কে দ্রষ্টব্য:

2026-04-08 সংস্করণে প্রবর্তিত, ucp.status ফিল্ডটি তৈরির ফলাফল নির্দেশ করে:

  • "success" (বা বাদ দেওয়া হলে): ডিফল্ট। সেশন তৈরি হয়েছে, এমনকি পুনরুদ্ধারযোগ্য messages সহও।
  • "error" : একটি অপূরণীয় ত্রুটির কারণে সেশন তৈরি করা ব্যর্থ হয়েছে (যেমন, সমস্ত আইটেম স্টকের বাইরে)। এই ক্ষেত্রে, রেসপন্স বডিটি একটি Error Response অবজেক্ট হওয়া উচিত, Checkout অবজেক্ট নয়। Error Handling সেকশনে Unrecoverable Error উদাহরণটি দেখুন।

totals অ্যারে পরিবর্তন সংক্রান্ত নোট:

  • totals অ্যারের প্রতিটি অবজেক্টের type ফিল্ডটি এখন একটি ওপেন স্ট্রিং।
  • amount ক্ষেত্রটি এখন ঋণাত্মক হতে পারে (যেমন, ছাড় বোঝানোর জন্য)।
  • totals অন্তর্ভুক্ত অবজেক্টগুলিতে (যেমন type: "fee" এবং type: "tax" ) ঐচ্ছিকভাবে একটি lines অ্যারে অন্তর্ভুক্ত করা যেতে পারে, যা এর উপ-উপাদানগুলিকে (যেমন পরিষেবা বা পুনর্ব্যবহারযোগ্য ফি, অথবা কানাডিয়ান GST, PST, বা QST-এর মতো বহু-স্তরীয় প্রাদেশিক এবং ফেডারেল করের বিভাজন) আইটেমাইজ করে।
  • কর-সহ মূল্য নির্ধারণ: কর-সহ বাজারগুলির জন্য, subtotal অবশ্যই কর অন্তর্ভুক্ত থাকতে হবে, tax লাইন আইটেমটি বাদ দিতে হবে, এবং totals মধ্যে থাকা subtotalfulfillment এন্ট্রিগুলির জন্য display_text স্পষ্টভাবে প্রদান করতে হবে। বিস্তারিত জানতে 'কর-সহ মূল্য নির্ধারণ' দেখুন।
// Response Example: Initialize Session with multiple items.
{
  "ucp": {
    "version": "2026-04-08",
    "status": "success",
    "capabilities": {
      "dev.ucp.shopping.checkout": [ { "version": "2026-04-08" } ],
      "dev.ucp.shopping.fulfillment": [ { "version": "2026-04-08", "extends": "dev.ucp.shopping.checkout" } ]
    },
    "payment_handlers": {
      "com.google.pay": [
        {
          "id": "8c9202bd-63cc-4241-8d24-d57ce69ea31c",
          "version": "2026-01-23",
          "spec": "https://pay.google.com/gp/p/ucp/2026-01-23/",
          "schema": "https://pay.google.com/gp/p/ucp/2026-01-23/schemas/config.json",
          "config": {
            "api_version": 2,
            "api_version_minor": 0,
            "environment": "TEST",
            "merchant_info": {
              "merchant_name": "Example Merchant",
              "merchant_id": "KWMZPRLQFTYNXSDB",
              "merchant_origin": "checkout.merchant.com"
            },
            "allowed_payment_methods": [
              {
                "type": "CARD",
                "parameters": {
                  "allowed_auth_methods": [ "PAN_ONLY" ],
                  "allowed_card_networks": [ "AMEX", "DISCOVER", "JCB", "MASTERCARD", "VISA" ],
                  "billing_address_required": true,
                  "billing_address_parameters": {
                    "format": "FULL",
                    "phone_number_required": true
                  }
                },
                "tokenization_specification": {
                  "type": "PAYMENT_GATEWAY",
                  "parameters": {
                    "gateway": "example",
                    "gatewayMerchantId": "exampleGatewayMerchantId"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  },
  "id": "bf8c1b4b-6b1c-4c6a-8f2a-53c2a7c3b2e1",
  "status": "incomplete",
  "messages": [
    {
      "type": "error",
      "code": "missing_buyer_info",
      "path": "$.buyer",
      "content_type": "plain",
      "content": "Buyer information is required for checkout",
      "severity": "recoverable"
    },
    {
      "type": "error",
      "code": "missing_fulfillment_info",
      "path": "$.fulfillment.methods[0].destinations[0]",
      "content_type": "plain",
      "content": "Shipping address is incomplete",
      "severity": "recoverable"
    }
  ],
  "currency": "USD",
  "line_items": [
    {
      "id": "line_1",
      "item": {
        "id": "product_12345",
        "title": "Running Shoes",
        "price": 10000,
        "image_url": "https://merchant.example.com/images/product_12345.png"
      },
      "quantity": 1,
      "totals": [
        {
          "type": "subtotal",
          "amount": 10000
        },
        {
          "type": "total",
          "amount": 10000
        }
      ]
    },
    {
      "id": "line_2",
      "item": {
        "id": "product_67890",
        "title": "T-Shirt",
        "price": 2500,
        "image_url": "https://merchant.example.com/images/product_67890.png"
      },
      "quantity": 1,
      "totals": [
        {
          "type": "subtotal",
          "amount": 2500
        },
        {
          "type": "total",
          "amount": 2500
        }
      ]
    }
  ],
  "totals": [
    {
      "type": "subtotal",
      "display_text": "Subtotal", // Tax-inclusive markets: Set to "Subtotal (including taxes)".
      "amount": 12500 // Tax-inclusive markets: Amount must include tax.
    },
    {
      "type": "fee",
      "display_text": "Fees",
      "amount": 549,
      "lines": [
        { "display_text": "Service Fee", "amount": 399 },
        { "display_text": "Recycling Fee", "amount": 150 }
      ]
    },
    {
      "type": "fulfillment",
      "display_text": "Shipping", // Tax-inclusive markets: Provide display text for fulfillment totals.
      "amount": 0
    },
    {
      "type": "tax", // Tax-inclusive markets: Omit this entry.
      "display_text": "Estimated Tax",
      "amount": 1050
    },
    {
      "type": "total",
      "display_text": "Total",
      "amount": 14099
    }
  ],
  "fulfillment": {
    "methods": [
      {
        "id": "method1",
        "type": "shipping",
        "line_item_ids": [
          "line_1",
          "line_2"
        ],
        "destinations": [
          {
            "id": "addr_1",
            "address_locality": "Sunnyvale",
            "address_region": "CA",
            "postal_code": "94089",
            "address_country": "US"
          }
        ],
        "selected_destination_id": "addr_1",
        "groups": [
          {
            "id": "fg1",
            "line_item_ids": [
              "line_1",
              "line_2"
            ],
            "options": [
              {
                "id": "ship_ground",
                "title": "Ground (3-5 days)",
                "description": "Estimated Delivery: Fri 5/8", // Maximum length: 200 characters.
                "totals": [ {"type": "total", "amount": 500} ]
              },
              {
                "id": "ship_express",
                "title": "Express (1-2 days)",
                "description": "Estimated Delivery: Wed 5/6", // Maximum length: 200 characters.
                "totals": [ {"type": "total", "amount": 1500} ]
              }
            ],
            "selected_option_id": "ship_ground"
          }
        ]
      }
    ]
  },
  "links": [
    {
      "type": "terms_of_service",
      "url": "https://m.com/terms",
      "title": "Terms of Service"
    },
    {
      "type": "privacy_policy",
      "url": "https://m.com/privacy",
      "title": "Privacy Policy"
    }
  ]
}

কর-সহ মূল্য

যেসব বাজারে কর আলাদাভাবে উল্লেখ না করে প্রদর্শিত মোট মূল্যের মধ্যেই অন্তর্ভুক্ত থাকে, সেখানে চেকআউট সেশন ডেটা প্রদানের সময় আপনার বাস্তবায়নকে অবশ্যই নিম্নলিখিত শর্তাবলী মেনে চলতে হবে:

  • উপমোটে কর অন্তর্ভুক্ত করুন: subtotal এন্ট্রির জন্য amount ফিল্ডে অবশ্যই সমস্ত প্রযোজ্য কর অন্তর্ভুক্ত করতে হবে।
  • পৃথক কর এন্ট্রি বাদ দিন: totals অ্যারেতে type: "tax" কোনো ডেডিকেটেড অবজেক্ট অন্তর্ভুক্ত করবেন না।
  • কাস্টম ডিসপ্লে টেক্সট প্রদান করুন: আপনাকে অবশ্যই সাবটোটাল অবজেক্টের মধ্যে একটি display_text অ্যাট্রিবিউট অন্তর্ভুক্ত করতে হবে যা স্পষ্টভাবে উল্লেখ করে যে ট্যাক্স অন্তর্ভুক্ত আছে, যেমন "Subtotal (including taxes)" । আপনাকে ফুলফিলমেন্ট এন্ট্রিগুলির জন্যও একটি display_text অ্যাট্রিবিউট অন্তর্ভুক্ত করতে হবে (যেমন "Shipping" )।

উদাহরণ: কর-সহ মোট সংখ্যার অ্যারে

নিম্নলিখিত উদাহরণটি একটি কর-অন্তর্ভুক্ত বাজারের একজন ব্যবসায়ীর জন্য একটি totals অ্যারে প্রদর্শন করে:

"totals": [
  {
    "type": "subtotal",
    "display_text": "Subtotal (including taxes)",
    "amount": 12500
  },
  {
    "type": "fulfillment",
    "display_text": "Shipping",
    "amount": 399
  },
  {
    "type": "total",
    "display_text": "Total",
    "amount": 12899
  }
]

বহু-স্তরীয় কর আইটেমাইজেশন

যেসব বাজারে আইটেমভিত্তিক বহু-স্তরীয় বা বহু-অধিক্ষেত্রীয় কর তথ্য প্রকাশের প্রয়োজন হয় (যেমন কানাডার ফেডারেল জিএসটি বা এইচএসটি এবং প্রাদেশিক পিএসটি বা কিউএসটি), সেখানে আপনি একটি নেস্টেড lines অ্যারে সহ একটি টপ-লেভেল type: "tax" অবজেক্ট প্রদান করতে পারেন:

  • সামগ্রিক শীর্ষ-স্তরের কর: একটি একক সামগ্রিক tax অবজেক্ট ফেরত দেয়, যাতে মোট করের amount এবং একটি বর্ণনামূলক display_text (যেমন "Taxes" ) অন্তর্ভুক্ত থাকে।
  • উপ-লাইন বিভাজন: ` lines অ্যারেতে প্রতিটি কর উপাদানকে তাদের নিজ নিজ ` display_text (যেমন "TPS / GST (5%)" , "TVQ / QST (9.975%)" ) এবং amount সহ আইটেমাইজ করুন।
  • অপরিবর্তনীয়: সকল উপ-লাইনের পরিমাণের যোগফল অবশ্যই মূল tax এন্ট্রির amount সমান হতে হবে।

উদাহরণ: বহু-স্তরীয় কর বিভাজন

{
  "type": "tax",
  "display_text": "Taxes",
  "amount": 1498,
  "lines": [
    { "display_text": "TPS / GST (5%)", "amount": 500 },
    { "display_text": "TVQ / QST (9.975%)", "amount": 998 }
  ]
}

চেকআউট সেশন পান

এই এন্ডপয়েন্টটি একটি চেকআউট সেশন পুনরুদ্ধার করার সুযোগ দেয়।

  • এন্ডপয়েন্ট: GET /checkout-sessions/{id}

অনুরোধ: গুগল চেকআউট সেশনের আইডি পাঠায়। আপনি যদি গ্লোবাল আইডি ব্যবহার করেন (যেমন, gid://merchant.example.com/Checkout/session_abc123 ), তাহলে মনে রাখবেন যে রিকোয়েস্ট পাথের আইডিটি শুধুমাত্র এই আইডির শেষ অংশটি হবে (যেমন, session_abc123 )।

প্রতিক্রিয়া: আপনি সম্পূর্ণ চেকআউট অবজেক্টটি ফেরত দেন। 2026-01-23 বা তার পরবর্তী সংস্করণে তৈরি একাধিক-আইটেম সেশনের ক্ষেত্রে, line_items অ্যারেতে একাধিক আইটেম এন্ট্রি থাকবে।

চেকআউট সেশন আপডেট করুন

এই এন্ডপয়েন্টটি একটি চেকআউট সেশন আপডেট করার সুযোগ দেয়। যখন শিপিং ঠিকানা আপডেট করা হয়, তখন এটিকে অবশ্যই ট্যাক্স এবং শিপিং অপশনগুলো পুনরায় গণনা করে ফেরত দিতে হবে।

  • এন্ডপয়েন্ট: PUT /checkout-sessions/{id}

শিপিং ঠিকানা আপডেট করুন

  • ট্রিগার: ব্যবহারকারী তার শিপিং ঠিকানা নির্বাচন বা পরিবর্তন করেন।

অনুরোধ: ব্যবহারকারী যখন তাঁর শিপিং ঠিকানা পরিবর্তন করেন, তখন গুগল যেন ফুলফিলমেন্ট ঠিকানাটি আপডেট করে।

// Request Example: Update shipping address with multiple items.
{
  "line_items": [
    {
      // line_items id from Create Checkout response
      "id": "line_1",
      "item": {
        "id": "product_12345"
      },
      "quantity": 1
    },
    {
      // line_items id from Create Checkout response
      "id": "line_2",
      "item": {
        "id": "product_67890"
      },
      "quantity": 1
    }
  ],
  "context": {
    "language": "en-US"
  },
  "fulfillment": {
    "methods": [
      {
        "type": "shipping",
        "line_item_ids": [
          "line_1",
          "line_2"
        ],
        "destinations": [
          {
            "address_locality": "Mountain View",
            "address_region": "CA",
            "postal_code": "94043",
            "address_country": "US"
          }
        ],
        "groups": [
          {
            "id": "group1",
             "line_item_ids": [
              "line_1",
              "line_2"
            ],
            "options": [
              {
                "id": "ship_ground"
              }
            ],
            "selected_option_id": "ship_ground"
          }
        ]
      }
    ]
  }
}

প্রতিক্রিয়া: আপনি প্রয়োজন অনুযায়ী কর এবং শিপিং বিকল্পগুলি পুনরায় গণনা করুন এবং সম্পূর্ণ চেকআউট অবজেক্টটি ফেরত দিন।

// Response Example: Updated session with new address for multiple items.
{
  "id": "bf8c1b4b-6b1c-4c6a-8f2a-53c2a7c3b2e1",
  "currency": "USD",
  "line_items": [
    {
      "id": "line_1",
      "item": {
        "id": "product_12345",
        "title": "Running Shoes",
        "price": 10000,
        "image_url": "https://merchant.example.com/images/product_12345.png"
      },
      "quantity": 1,
      "totals": [
        { "type": "subtotal", "amount": 10000 },
        { "type": "total", "amount": 10000 }
      ]
    },
    {
      "id": "line_2",
      "item": {
        "id": "product_67890",
        "title": "T-Shirt",
        "price": 2500,
        "image_url": "https://merchant.example.com/images/product_67890.png"
      },
      "quantity": 1,
      "totals": [
        { "type": "subtotal", "amount": 2500 },
        { "type": "total", "amount": 2500 }
      ]
    }
  ],
  "totals": [
     { "type": "subtotal", "display_text": "Subtotal", "amount": 12500 },
     // Shipping cost might change based on new address
     { "type": "fulfillment", "display_text": "Ground Shipping", "amount": 600 },
     {
       "type": "fee",
       "display_text": "Fees",
       "amount": 549,
       "lines": [
         { "display_text": "Service Fee", "amount": 399 },
         { "display_text": "Recycling Fee", "amount": 150 }
       ]
     },
     // Tax will likely change based on new address
     { "type": "tax", "display_text": "Estimated Tax", "amount": 1120 },
     { "type": "total", "display_text": "Total", "amount": 14769 }
  ],
  "fulfillment": {
    "methods": [
      {
        "id": "method_shipping",
        "type": "shipping",
        "line_item_ids": ["line_1", "line_2"],
        "selected_destination_id": "addr_1",
        "destinations": [
          {
            "id": "addr_1",
            "address_locality": "Mountain View",
            "address_region": "CA",
            "postal_code": "94043",
            "address_country": "US"
          }
        ],
        "groups": [
          {
            "id": "group_1",
            "line_item_ids": ["line_1", "line_2"],
            "selected_option_id": "ship_ground",
            "options": [
              {
                "id": "ship_ground",
                "title": "Ground (3-5 days)",
                "description": "Estimated Delivery: Fri 5/8", // Maximum length: 200 characters.
                "totals": [ { "type": "total", "amount": 600 } ]
              },
              {
                "id": "ship_express",
                "title": "Express (1-2 days)",
                "description": "Estimated Delivery: Wed 5/6", // Maximum length: 200 characters.
                "totals": [ { "type": "total", "amount": 1600 } ]
              }
            ]
          }
        ]
      }
    ]
  }
  // ... other fields like ucp, status, messages, links
}

সম্পূর্ণ চেকআউট বস্তুর হাইড্রেশন

অনুরোধ: ক্রেতা যখন "Pay with GPay" বোতামে ক্লিক করেন, তখন গুগল আপডেট করা তথ্যসহ (সম্পূর্ণ ফুলফিলমেন্ট ঠিকানা এবং পেমেন্ট মাধ্যম সহ) সম্পূর্ণ চেকআউট ফর্মটি পাঠায়।

// Request Example: full checkout object hydration for multiple items.
{
  "buyer": {
    "first_name": "John",
    "last_name": "Buyer",
    "email": "johnbuyer@example.com",
    "phone_number": "+18888888888"
  },
  "line_items": [
    {
      "id": "line_1",
      "item": { "id": "product_12345" },
      "quantity": 1
    },
    {
      "id": "line_2",
      "item": { "id": "product_67890" },
      "quantity": 1
    }
  ],
  "payment": {
    "instruments": [
      {
        "id": "gpay",
        "handler_id": "8c9202bd-63cc-4241-8d24-d57ce69ea31c",
        "type": "com.google.pay",
        "selected": true
      }
    ]
  },
  "context": {
    "language": "en-US"
  },
  "fulfillment": {
    "methods": [
      {
        "type": "shipping",
        "line_item_ids": ["line_1", "line_2"],
        "destinations": [
          {
            "id": "addr_1",
            "first_name": "Alice",
            "last_name": "Receiver",
            "street_address": "1600 Amphitheatre Pkwy",
            "extended_address": "Suite #60",
            "address_locality": "Mountain View",
            "address_region": "CA",
            "postal_code": "94043",
            "address_country": "US"
          }
        ],
        "groups": [
          {
            "id": "group_1",
             "line_item_ids": ["line_1", "line_2"],
            "options": [ { "id": "ship_ground" } ],
            "selected_option_id": "ship_ground"
          }
        ]
      }
    ]
  }
}

প্রতিক্রিয়া: আপনি প্রয়োজন অনুযায়ী কর এবং শিপিং বিকল্পগুলি পুনরায় গণনা করুন এবং সম্পূর্ণ চেকআউট অবজেক্টটি ফেরত দিন।

// Response Example: Session after full hydration with multiple items.
{
  "ucp": {
    "version": "2026-04-08",
    "status": "success",
    "capabilities": {
      "dev.ucp.shopping.checkout": [ { "version": "2026-04-08" } ],
      "dev.ucp.shopping.fulfillment": [ { "version": "2026-04-08", "extends": "dev.ucp.shopping.checkout" } ]
    },
    "payment_handlers": {
      "com.google.pay": [
        {
          "id": "8c9202bd-63cc-4241-8d24-d57ce69ea31c",
          "version": "2026-01-23",
          "spec": "https://pay.google.com/gp/p/ucp/2026-01-23/",
          "schema": "https://pay.google.com/gp/p/ucp/2026-01-23/schemas/config.json",
          "config": {
            "api_version": 2,
            "api_version_minor": 0,
            "environment": "TEST",
            "merchant_info": {
              "merchant_name": "Example Merchant",
              "merchant_id": "KWMZPRLQFTYNXSDB",
              "merchant_origin": "checkout.merchant.com"
            },
            "allowed_payment_methods": [
              {
                "type": "CARD",
                "parameters": {
                  "allowed_auth_methods": [ "PAN_ONLY" ],
                  "allowed_card_networks": [ "AMEX", "DISCOVER", "JCB", "MASTERCARD", "VISA" ],
                  "billing_address_required": true,
                  "billing_address_parameters": {
                    "format": "FULL",
                    "phone_number_required": true
                  }
                },
                "tokenization_specification": {
                  "type": "PAYMENT_GATEWAY",
                  "parameters": {
                    "gateway": "example",
                    "gatewayMerchantId": "exampleGatewayMerchantId"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  },
  "id": "bf8c1b4b-6b1c-4c6a-8f2a-53c2a7c3b2e1",
  "status": "ready_for_complete",
  "currency": "USD",
  "buyer": {
    "first_name": "John",
    "last_name": "Buyer",
    "email": "johnbuyer@example.com",
    "phone_number": "<REDACTED_PII>"
  },
  "line_items": [
    {
      "id": "line_1",
      "item": {
        "id": "product_12345",
        "title": "Running Shoes",
        "price": 10000,
        "image_url": "https://merchant.example.com/images/product_12345.png"
      },
      "quantity": 1,
      "totals": [
        { "type": "subtotal", "amount": 10000 },
        { "type": "total", "amount": 10000 }
      ]
    },
    {
      "id": "line_2",
      "item": {
        "id": "product_67890",
        "title": "T-Shirt",
        "price": 2500,
        "image_url": "https://merchant.example.com/images/product_67890.png"
      },
      "quantity": 1,
      "totals": [
        { "type": "subtotal", "amount": 2500 },
        { "type": "total", "amount": 2500 }
      ]
    }
  ],
  "totals": [
     { "type": "subtotal", "display_text": "Subtotal", "amount": 12500 },
     { "type": "fulfillment", "display_text": "Ground Shipping", "amount": 600 },
      {
        "type": "fee",
        "display_text": "Fees",
        "amount": 549,
        "lines": [
          { "display_text": "Service Fee", "amount": 399 },
          { "display_text": "Recycling Fee", "amount": 150 }
        ]
      },
     { "type": "tax", "display_text": "Estimated Tax", "amount": 1120 },
     { "type": "total", "display_text": "Total", "amount": 14769 }
  ],
  "payment": {
    "instruments": [
      {
        "id": "gpay",
        "handler_id": "8c9202bd-63cc-4241-8d24-d57ce69ea31c",
        "type": "com.google.pay",
        "selected": true
      }
    ]
  },
  "fulfillment": {
    "methods": [
      {
        "id": "method_shipping",
        "type": "shipping",
        "line_item_ids": ["line_1", "line_2"],
        "selected_destination_id": "addr_1",
        "destinations": [
          {
            "id": "addr_1",
            "first_name": "Alice",
            "last_name": "Receiver",
            "street_address": "1600 Amphitheatre Pkwy",
            "extended_address": "Suite #60",
            "address_locality": "Mountain View",
            "address_region": "CA",
            "postal_code": "94043",
            "address_country": "US"
          }
        ],
        "groups": [
          {
            "id": "group_1",
            "line_item_ids": ["line_1", "line_2"],
            "selected_option_id": "ship_ground",
            "options": [
              {
                "id": "ship_ground",
                "title": "Ground (3-5 days)",
                "description": "Estimated Delivery: Fri 5/8", // Maximum length: 200 characters.
                "totals": [ { "type": "total", "amount": 600 } ]
              },
              {
                "id": "ship_express",
                "title": "Express (1-2 days)",
                "description": "Estimated Delivery: Wed 5/6", // Maximum length: 200 characters.
                "totals": [ { "type": "total", "amount": 1600 } ]
              }
            ]
          }
        ]
      }
    ]
  },
  "links": [
    {
      "type": "terms_of_service",
      "url": "https://m.com/terms",
      "title": "Terms of Service"
    },
    {
      "type": "privacy_policy",
      "url": "https://m.com/privacy",
      "title": "Privacy Policy"
    }
  ]
}

চেকআউট সেশন সম্পূর্ণ করুন

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

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

{
  "payment": {
    "instruments": [
      {
        "billing_address": {
          "first_name": "John",
          "last_name": "Buyer",
          "street_address": "1600 Amphitheatre Pkwy",
          "address_locality": "Mountain View",
          "address_region": "CA",
          "postal_code": "94043",
          "address_country": "US"
        },
        "credential": {
          "token": "examplePaymentMethodToken",
          "type": "PAYMENT_GATEWAY"
        },
        "display": {
          "brand": "VISA",
          "description": "Visa •••• 1234",
          "last_digits": "1234"
        },
        "handler_id": "8c9202bd-63cc-4241-8d24-d57ce69ea31c",
        "id": "94e7fee0-1a82-4c2a-9ef4-0861a3c829b2",
        "selected": true,
        "type": "CARD"
      }
    ]
  },
  "signals": {} // Placeholder for risk signals
}

চেকআউট সম্পন্ন করার জন্য যদি এমন কোনো আবশ্যিক তথ্যের প্রয়োজন হয় যা চেকআউট সেশনে প্রদান করা হয়নি, তাহলে আপনি রেসপন্সে একটি 'অসম্পূর্ণ' স্ট্যাটাস ফেরত দিয়ে চেকআউট সম্পন্ন হওয়া আটকাতে এবং সেই তথ্যের জন্য অনুরোধ করতে পারেন।

যদি গুগল UCP-সংজ্ঞায়িত ফিল্ড ব্যবহার করে অনুপস্থিত তথ্য সংগ্রহ করতে পারে (উদাহরণস্বরূপ, ক্রেতার ইমেল ঠিকানা), তাহলে status incomplete ) হিসেবে সেট করুন এবং messages ) অ্যারেতে ' recoverable ) severity সহ এক বা একাধিক মেসেজ অন্তর্ভুক্ত করুন, যা নির্দেশ করবে কোন তথ্যটি অনুপস্থিত।

{
  "id": "da2e25ec-eef8-41b7-a439-4e62dea41bdc",
  "status": "incomplete",
  "messages": [
    {
      "type": "error",
      "code": "missing_buyer_info",
      "severity": "recoverable",
      "content": "Buyer email is required"
    },
    {
      "type": "error",
      "code": "missing_fulfillment_info",
      "severity": "recoverable",
      "content": "Select delivery window for your purchase"
    }
  ]
}

Google Pay পেমেন্ট ইন্সট্রুমেন্ট গ্রহণ করার পর, আপনাকে অবশ্যই:

  1. হ্যান্ডলার যাচাই করুন: নিশ্চিত করুন যে handler_id Google Pay পেমেন্ট হ্যান্ডলারের সাথে সঙ্গতিপূর্ণ।
  2. টোকেন সংগ্রহ করুন: payment_data.credential.token থেকে তৈরি হওয়া পেমেন্ট পদ্ধতির টোকেনটি সংগ্রহ করুন।
  3. পেমেন্ট প্রক্রিয়া করুন: পেমেন্ট সম্পন্ন করতে টোকেন এবং লেনদেনের বিবরণ ব্যবহার করুন। টোকেনাইজেশন স্পেসিফিকেশন এবং হ্যান্ডলিং সম্পর্কিত বিস্তারিত তথ্যের জন্য Google Pay API ডকুমেন্টেশন দেখুন।

প্রতিক্রিয়া: যদি চেকআউট সম্পন্ন করা যায় এবং আপনি পেমেন্ট করে থাকেন, তাহলে আপনি সম্পূর্ণ চেকআউট অবজেক্টটি ফেরত দেবেন যা নির্দেশ করে যে অর্ডারটি সম্পন্ন হয়েছে। এতে অর্ডার আইডি এবং অর্ডারের একটি পারমালিঙ্ক ইউআরএল অন্তর্ভুক্ত থাকবে।

{
  "ucp": {
      "version": "2026-04-08",
      "capabilities": [...]
  },
  "id": "da2e25ec-eef8-41b7-a439-4e62dea41bdc",
  "status": "completed",

  // ... other fields (line_items, currency, etc.)

  "order": {
    "id": "ORD1773956535.2727807",
    // Example customer-facing order number
    "label": "#100",
    "permalink_url": "https://merchant.example.com/orders/789"
  }
}

চেকআউট সেশন বাতিল করুন

এই এন্ডপয়েন্টটি একটি চেকআউট সেশন বাতিল করে।

  • এন্ডপয়েন্ট: POST /checkout-sessions/{id}/cancel

অনুরোধ: গুগল চেকআউট সেশনের আইডি পাঠায়।

প্রতিক্রিয়া: আপনি স্ট্যাটাসটি canceled হিসেবে আপডেট করে সম্পূর্ণ চেকআউট অবজেক্টটি ফেরত দেন।

ত্রুটি পরিচালনা

এরর মেসেজ কীভাবে ফরম্যাট করতে হয় এবং প্রোটোকল ও বিজনেস লজিক এররের মধ্যে পার্থক্য সম্পর্কে সম্পূর্ণ নির্দেশনার জন্য, এরর কোড ওভারভিউ দেখুন।

অপ্রত্যাহারযোগ্য ত্রুটি

2026-04-08 সংস্করণ থেকে শুরু করে, যখন কোনো অপূরণীয় ত্রুটির কারণে চেকআউট সেশন তৈরি করা যায় না (যেমন, সব আইটেম স্টক শেষ হয়ে গেছে), তখন একটি HTTP 200 OK রিটার্ন করুন। রেসপন্স বডিতে, ucp অবজেক্টের মধ্যে "status": "error" সেট করুন। এটি গুগলকে জানায় যে অনুরোধটি বৈধ ছিল, কিন্তু একটি ব্যবসায়িক নিয়ম সেশন তৈরি হতে বাধা দিয়েছে। এই ক্ষেত্রে কোনো চেকআউট সেশন আইডি রিটার্ন করা হয় না।

HTTP/1.1 200 OK
Content-Type: application/json

{
  "ucp": {
    "version": "2026-04-08",
    "status": "error"
  },
  "messages": [
    {
      "type": "error",
      "code": "out_of_stock",
      "content": "All requested items are currently out of stock",
      "severity": "unrecoverable"
    }
  ],
  "continue_url": "https://merchant.com/"
}