যা পেতে পারো
শুধু নেটিভ ADA, Koios-এর মতো সামঞ্জস্যপূর্ণ উৎসের লেনদেন ইতিহাস দিয়ে। Cardano নেটিভ টোকেন ইনভয়েস অ্যাসেট নয়। ফান্ড সরাতে ন্যূনতম আউটপুটের চাহিদা ধরো।
Store সেট করো
- Wholly Crypto install করে project/store বানাও, private wallet backup রাখো।
- Scanner-compatible connection দেখে Store → Payment methods-এ chain আর intended asset চালু করো।
- Confirmation/expiry সেট করো। ছোট invoice পরীক্ষা করে order fulfil-এর আগে settlement verify করো।
Payment কোথায় আসে
Invoice আলাদা receiving address নেয়। Full backup, address list/derivation detail রাখো; imported wallet সব invoice address সঙ্গে সঙ্গে নাও খুঁজে পেতে পারে।
Wallet setup guideপ্রস্তুত হলে fund সরাও
Manual send/automatic sweep spendable output একত্র করে। অনেক small receipt transaction size/fee বাড়াতে পারে। Preview দেখে destination একই network-এ রাখো।
Automatic sweep tutorialPayment সমস্যা সমাধান
আগে এই network দেখো
ন্যূনতম আউটপুটের চাহিদার জন্য যথেষ্ট ADA রাখো। পাঠানোতে শুধু-ADA আউটপুট ব্যবহার হয়; অন্য টোকেন থাকা আউটপুট রাখা হয়, সুইপ নয়।
Payment missing বা delayed
Network, address, asset আর required reference invoice-এর সঙ্গে মিলাও। Scanner readiness/confirmation progress দেখো। প্রথম transaction না দেখে দ্বিতীয় payment চেয়ো না।
অর্থ গ্রহণের গাইডWallet restore বা একত্র করো
Private backup/derivation detail রাখো। অন্য wallet app সব receiving address নাও দেখাতে পারে। Sending/recovery chain আর wallet format-এর ওপর নির্ভর করে; শুধু recovery word import-এ কোনোটি নিশ্চিত নয়।
ব্যাকআপ ও পুনরুদ্ধারFee আর verification
Default processing fee invoice fiat value-এর 1%, separate credit থেকে। তোমার assigned rate প্রযোজ্য। Network fee/server cost আলাদা।
Public provider outage/rate limit হতে পারে। Submitted transaction বা return redirect payment-এর প্রমাণ নয়। Verified invoice status আর signed notification নাও।
প্রসেসিং ক্রেডিট API, IPN ও ওয়েবহুকরেট ক্যালকুলেটর
একটি পরিমাণ রূপান্তর করো
এটি আনুমানিক হিসাব, পেমেন্ট কোট নয়। নেটওয়ার্ক ফি, এক্সচেঞ্জ ফি ও মার্চেন্টের স্প্রেড ধরা নেই।
রেট কোথা থেকে আসে?
ক্রিপ্টোর অনুমানে ক্যাশ করা পাবলিক Kraken দাম ব্যবহৃত হয়, যেখানে আছে সেখানে Binance-ও। কিছু Binance দামে USD-এর রেফারেন্স হিসেবে USDT ব্যবহৃত হয়। প্রচলিত মুদ্রার রেট Frankfurter থেকে আসে; এগুলো দৈনিক রেফারেন্স, লাইভ ট্রেডিং কোট নয়।
স্ন্যাপশট নিজে থেকে রিফ্রেশ হয়। ফলের নিচে উৎসের তারিখ দেখো। তোমার দেওয়া পরিমাণ ব্রাউজারেই থাকে। অ্যাসেট তালিকায় থাকা পেমেন্ট সমর্থনের নিশ্চয়তা নয়।
Kraken · Binance · Frankfurter · অ্যাসেটের নাম ও আইকন: CoinGecko
API দিয়ে invoice তৈরি
Server-এ example চালাও। API host, project/store ID বদলাও, credential private রাখো। Amount decimal string।
আগে store-এ method চালু করো। Selection enabled method কমায়, asset যোগ করে না। কিছু না মিললে store default। Checkout দেখানোর আগে returned method দেখো।
: "${WHOLLY_TOKEN:?Set WHOLLY_TOKEN to your server-side API token}"
# Keep this key and the exact body for retries; use a new key for each new invoice.
curl --fail-with-body --max-time 30 \
--request POST \
--url "https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices" \
--header "Authorization: Bearer $WHOLLY_TOKEN" \
--header 'Idempotency-Key: order-1042-attempt-1' \
--header 'Content-Type: application/json' \
--data-raw '{
"amount": "25.00",
"currency": "EUR",
"order_id": "order-1042",
"payment_methods": [
{
"chain_slug": "cardano",
"asset_tickers": [
"ADA"
]
}
]
}'// Node.js 18+ · run on your server, never in browser code.
const token = process.env.WHOLLY_TOKEN;
if (!token) throw new Error("Set WHOLLY_TOKEN");
// Keep this key and the exact body for retries; use a new key for each new invoice.
const body = `{
"amount": "25.00",
"currency": "EUR",
"order_id": "order-1042",
"payment_methods": [
{
"chain_slug": "cardano",
"asset_tickers": [
"ADA"
]
}
]
}`;
const response = await fetch("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices", {
method: "POST",
headers: {
"Authorization": `Bearer ${token}`,
"Idempotency-Key": "order-1042-attempt-1",
"Content-Type": "application/json"
},
body,
redirect: "error",
signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());<?php
// PHP 8+ with the cURL extension; run on your server.
$token = getenv('WHOLLY_TOKEN');
if (!$token) { throw new RuntimeException('Set WHOLLY_TOKEN'); }
// Keep this key and the exact body for retries; use a new key for each new invoice.
$body = <<<'JSON'
{
"amount": "25.00",
"currency": "EUR",
"order_id": "order-1042",
"payment_methods": [
{
"chain_slug": "cardano",
"asset_tickers": [
"ADA"
]
}
]
}
JSON;
$ch = curl_init("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices");
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $token, "Idempotency-Key: order-1042-attempt-1", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
if ($status < 200 || $status >= 300) { throw new RuntimeException("HTTP $status: $response"); }
print_r(json_decode($response, true, 512, JSON_THROW_ON_ERROR));# Python 3 · standard library; run on your server.
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
class NoRedirect(HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
# Keep this key and the exact body for retries; use a new key for each new invoice.
headers = {
"Idempotency-Key": "order-1042-attempt-1",
"Content-Type": "application/json"
}
headers["Authorization"] = "Bearer " + os.environ["WHOLLY_TOKEN"]
body = """{
"amount": "25.00",
"currency": "EUR",
"order_id": "order-1042",
"payment_methods": [
{
"chain_slug": "cardano",
"asset_tickers": [
"ADA"
]
}
]
}""".encode("utf-8")
request = Request("https://api.example.com/v1/projects/YOUR_PROJECT_ID/stores/YOUR_STORE_ID/invoices",
method="POST", headers=headers, data=body)
# Non-2xx responses raise HTTPError. Do not retry writes with a new key.
with build_opener(NoRedirect()).open(request, timeout=30) as response:
print(json.load(response))