ডেভেলপারদের জন্য
তিনটি কল আর একটি webhook।
Gateway একটি hosted checkout, তাই ইন্টিগ্রেশন ইচ্ছে করেই ছোট রাখা হয়েছে: অর্ডার তৈরি করুন, গ্রাহককে পেজে পাঠান, সাইন করা ফলাফল যাচাই করুন। নিচে যা আছে সেটাই পুরো সারফেস — পেমেন্ট UI, মেথড লজিক, 3-D Secure, ওয়ালেট ও রিসিপ্ট তৈরি করা এবং হালনাগাদ রাখা আমাদের কাজ।
কাঠামো
যার সঙ্গে আপনি ইন্টিগ্রেট করছেন।
- HTTPS-এর ওপর REST
- JSON ইন, JSON আউট
- Bearer API key
- Idempotency key
- সাইন করা webhook
- Replay protection
- Test ও live মোড
- iOS ও Android SDK
- স্টোর প্লাগইন
- Embedded ফিল্ড
কুইকস্টার্ট
শূন্য থেকে পেইড অর্ডার পর্যন্ত।
পুরো happy path। অ্যামাউন্ট minor unit-এ, রেফারেন্স আপনার নিজের, আর গ্রাহককে redirect করতে হবে checkout URL-এ। API base URL আপনার sandbox key-এর সঙ্গে দেওয়া হয়; সেটি PROTOCORE_API_BASE হিসেবে export করুন, নিচের কলগুলো ঠিক যেমন লেখা আছে তেমনই চলবে।
অর্ডার তৈরি করুন
অ্যামাউন্ট, কারেন্সি ও আপনার নিজের রেফারেন্স দিয়ে একটি কল। Idempotency key আপনি নিজেই তৈরি করবেন — রিট্রাই করা রিকোয়েস্ট দ্বিতীয় অর্ডার না বানিয়ে মূল অর্ডারটিই ফেরত দেয়।
curl -X POST "$PROTOCORE_API_BASE/v1/orders" \
-H "Authorization: Bearer $PROTOCORE_API_KEY" \
-H "Idempotency-Key: 9F21-0716" \
-H "Content-Type: application/json" \
-d '{
"amount": 4900,
"currency": "EUR",
"reference": "9F21-0716",
"line_items": [
{ "name": "Brand identity sprint", "amount": 3850 },
{ "name": "Typeface licensing", "amount": 600 },
{ "name": "Rush delivery", "amount": 400 }
],
"return_url": "https://arcstudio.ro/thanks"
}'গ্রাহককে checkout-এ পাঠান
রেসপন্সে আপনার নিজস্ব checkout হোস্টের একটি checkout URL থাকে — sandbox-এর সঙ্গে দেওয়া হোস্ট, অথবা ডোমেইন আমাদের দিকে পয়েন্ট করার পর আপনার নিজের ডোমেইন। সেখানে redirect করুন, কিংবা SDK-তে খুলুন; মেথড, ওয়ালেট ও 3-D Secure সবই ওই পেজে আছে, তাই আপনার দিকে কিছু বানাতে হবে না।
{
"id": "ord_2h4Kq9wRz",
"reference": "9F21-0716",
"amount": 4900,
"currency": "EUR",
"status": "pending",
"checkout_url": "https://<your-checkout-host>/c/2h4Kq9wRz"
}সাইন করা ফলাফল যাচাই করুন
পেমেন্ট সম্পন্ন হলে আপনার endpoint-এ একটি সাইন করা ইভেন্ট পৌঁছায়। কিছু বিশ্বাস করার আগে webhook secret দিয়ে signature যাচাই করুন, তারপর আপনার জানা রেফারেন্স ধরে অর্ডার পূরণ করুন।
{
"type": "order.paid",
"id": "evt_7Ka2Lm",
"created": "2026-07-23T09:41:02Z",
"data": {
"id": "ord_2h4Kq9wRz",
"reference": "9F21-0716",
"amount": 4900,
"currency": "EUR",
"method": "usdc",
"settlement": { "currency": "EUR", "amount": 4900, "rate": "0.9184" }
}
}রেফারেন্স
যে endpoint গুলো আপনি আসলে ব্যবহার করবেন।
ডক্সে আরও অনেক কিছু আছে, তবে বেশির ভাগ ইন্টিগ্রেশন এই সেটের বাইরে যায় না।
Webhook
আপনার backend যা শুনতে পায়।
প্রতিটি ইভেন্টে আপনার তৈরি করা অর্ডার রেফারেন্স থাকে, তাই আপনার হ্যান্ডলার হতে পারে type-এর ওপর একটি switch আর নিজের দিকে একটি lookup।
বডি বিশ্বাস করার আগে signature দেখে নিন।
প্রতিটি ডেলিভারিতে একটি timestamp এবং raw body-র ওপর HMAC signature থাকে। Constant time-এ তুলনা করুন, আপনার tolerance window-এর চেয়ে পুরোনো সবকিছু বাতিল করুন, আর একই ইভেন্ট id আবার এলে সেটি আগেই সামলানো হয়েছে ধরে নিন — non-2xx রেসপন্সে আমরা retry করি, তাই আপনার হ্যান্ডলারও idempotent হওয়া উচিত।
import { createHmac, timingSafeEqual } from "node:crypto";
export function verify(rawBody, header, secret) {
const [ts, sig] = header.split(",").map((p) => p.split("=")[1]);
const expected = createHmac("sha256", secret)
.update(`${ts}.${rawBody}`)
.digest("hex");
const a = Buffer.from(sig, "hex");
const b = Buffer.from(expected, "hex");
if (a.length !== b.length || !timingSafeEqual(a, b)) return false;
// Reject replays outside a five-minute window.
return Math.abs(Date.now() / 1000 - Number(ts)) < 300;
}গ্যারান্টি
যেসব বৈশিষ্ট্যের ওপর আপনি নির্ভর করতে পারেন।
Idempotent তৈরি
প্রতিটি অর্ডার তৈরিতে একটি idempotency key লাগে। টাইমআউট, ডিপ্লয় বা queue redelivery-র পর রিট্রাই করা রিকোয়েস্ট দুবার চার্জ না করে মূল অর্ডারটিই ফেরত দেয়।
সাইন করা, replay-protected ইভেন্ট
Webhook-এ timestamp-যুক্ত HMAC signature এবং একটি স্থির ইভেন্ট id থাকে। আপনার endpoint 2xx না দেওয়া পর্যন্ত backoff-সহ ডেলিভারি retry হয়, তাই ডিপ্লয়ের সময়ে কোনো পেমেন্ট হারায় না।
একটি রেফারেন্স, শুরু থেকে শেষ পর্যন্ত
তৈরির সময় আপনার দেওয়া রেফারেন্স checkout, রিসিপ্ট, webhook, payout এবং পরবর্তী যেকোনো refund-এ দেখা যায়। সিস্টেমগুলোর মধ্যে মেলানোর জন্য দ্বিতীয় কোনো আইডেন্টিফায়ার নেই।
Test মোডও একই কোড পাথ
Test key একই ফ্লো test সেশনের বিপরীতে চালায়। Test-এ যা পাস করে, সেটাই প্রোডাকশনে যায় — পার্থক্য শুধু কোন key পাঠাচ্ছেন, কোন endpoint কল করছেন তাতে নয়।
টেস্ট ডেটা
গুরুত্বপূর্ণ পাথগুলো কীভাবে যাচাই করবেন।
নিচের প্রতিটি পথের জন্য একটি test card রয়েছে, sandbox ইস্যু করার সময় আপনার keys-এর সঙ্গে সেগুলো দেওয়া হয়। কার্ড নম্বর এখানে প্রকাশ করা হয় না, কারণ নম্বর প্রতিটি sandbox-এর জন্য আলাদা; ফলে scheme-এর test range বদলালেও সেগুলো সঠিক থাকে। আচরণ সব ক্ষেত্রেই নির্ধারিত (deterministic): সফল লেনদেনের মতোই সহজে decline-এর ওপরও test assert করা যায়।
Keys নিন, শুরু করুন।
API keys, webhook secrets ও সব method চালু করা একটি sandbox merchant — সঙ্গে সম্পূর্ণ reference, যাতে কিছু স্বাক্ষরের আগেই আপনার টিম integrate করতে পারে।