AxtonPay API

Document version: 0.9

عام معلومات

اے پی آئی اینڈ پوائنٹ

https://mp.axtonpay.com/api/v1/private/checkout

Content-type

API دو قسم کے مواد کے ساتھ HTTP درخواستیں قبول کرتی ہے: 'application/x-www-form-urlencoded', 'application/json'۔

HTTP ہیڈر کو POST باڈی کے مواد کے مطابق ہونا چاہئے۔

مختصر الفاظ اور تعریفیں

  • {PID} - انویس کا شناختی نمبر، عام طور پر یہ ایک منفرد 8-حروف پر مشتمل عددی و حروفی سلسلہ ہوتا ہے۔
  • Shop - آپ کی ویب سائٹ جو AxtonPay سروس کے ذریعے ادائیگیاں قبول کرتی ہے

API کے ساتھ کام کرنے کا الگورتھم

ادائیگی وصول کرنے کے لیے معمول کے اقدامات کی ترتیب:

  • ایک انوائس بنائیں ('/api/v1/private/checkout/payment/create')، API کا جواب انوائس کا URL واپس کرے گا ('invoice_url')،
  • خریدار کو ادائیگی کرنے کے لیے اس انوائس پر بھیجیں،
  • AxtonPay سرور کی اطلاعات کا انتظار کریں، جو 'server_notification_url' پر آئیں گی،
  • AxtonPay کی طرف سے کسی بھی اطلاع موصول ہونے پر، اس کے دستخط کی صداقت کی جانچ کریں اور ترجیحاً AxtonPay ('/api/v1/private/checkout/payment/confirm/{PID}') کو وصولی کی تصدیق بھیجیں،
  • اگر کسی انوائس کی حیثیت تبدیل ہو جائے تو اس حیثیت سے متعلقہ اقدامات کریں (مثلاً، انوائس کے بارے میں مکمل معلومات طلب کریں، اشیاء بھیجیں، سپورٹ ٹیم کے لیے ٹکٹ بنائیں، وغیرہ)۔

اگر آپ انوائس بناتے وقت خالی یا غلط 'server_notification_url' مرتب کرتے ہیں، تو سروس اسٹیٹس کی تبدیلی کے بارے میں نوٹیفیکیشن بھیجنے سے قاصر ہوتی ہے؛ ایسے معاملات میں، آپ کو کچھ وقفوں ('/api/v1/private/checkout/payment/get/{PID}') پر خود انوائس چیک کرنی چاہیے۔

درخواستوں کی منظوری

کسی درخواست کو منظوری دینے کے لیے ضروری ہے کہ ایک خاص طریقے سے بنائی گئی سٹرنگ سے ہیش نکالا جائے۔ سٹرنگ بنانے کے لیے URL کے دلائل (QUERY_STRING) اور POST درخواست کے باڈی (REQUEST_BODY) کو آپس میں جوڑا جاتا ہے (چپکا دیا جاتا ہے)۔ یہ اہم ہے کہ تمام اجزاء بالکل اسی فارم میں لیے جائیں جیسا کہ وہ سرور کو بھیجے جائیں گے۔ URL کے دلائل (QUERY_STRING) URL سے ایک ہی لائن میں لیے جائیں، بغیر دلائل کے ترتیب کو بدلے اور بغیر کسی عنصر کو چھوڑے۔ POST درخواست کے باڈی (REQUEST_BODY) کو بھی بغیر کسی تبدیلی کے استعمال کرنا چاہیے، جس میں اس سے اقتباسات، خالی جگہیں، بریکٹ، لائن بریک نکالنا شامل نہیں ہے۔

خالی POST درخواست کے جسم کی صورت میں، اور خالی URL دلائل کی صورت میں، وہ جزو بس خالی سٹرنگ ہوگا۔

سائننگ ریکویسٹ میں ڈیٹا کی ترتیب: QUERY_STRING پہلے، پھر POST ڈیٹا۔ آپ کو ان کے درمیان کوئی کنیکٹنگ نشان شامل نہیں کرنا چاہیے، بس دو ٹیکسٹ سٹرنگز کو ملا دیں۔

ایک بار پھر، ہر علامت اہم ہے۔ آپ کو ایک سفید جگہ یا نئی لائن کے علامت کو بھی شامل یا حذف نہیں کرنا چاہیے۔ صرف سرور سے موصول ہونے والے خام ڈیٹا کا استعمال کریں۔

ایک SHA-256 ہیش کلید 'Secret key' کے ساتھ حاصل شدہ سلسلے سے لیا گیا ہے اور فنکشن hash_hmac() کے دوسرے دلیل کے طور پر استعمال کیا جاتا ہے۔

یہ لازمی ہے کہ موجودہ POSIX timestamp (Unix time) کو شامل کرنے والا 'time' پیرامیٹر پاس کیا جائے۔

یہ دستخط 24 گھنٹے کے لیے درست ہے۔ اگر 'time' پیرامیٹر کی قیمت موجودہ سرور کے وقت سے 24 گھنٹے سے زیادہ مختلف ہے (چاہے آگے ہو یا پیچھے)، تو درخواست ناکام ہو جائے گی چاہے دستخط بغیر کسی غلطی کے بھی حساب کیا گیا ہو۔

اگر مرچنٹ پینل نے کسی دستخط کے ساتھ درخواست قبول کی ہے تو وہ دستخط دوبارہ استعمال نہیں کیا جا سکتا، حتیٰ کہ اسی پیرامیٹرز کے ساتھ درخواست بھیجنے کے لیے بھی (اس میں پیرامیٹر 'time' شامل ہے)۔

حاصل شدہ ہیش HTTP ہیڈر 'Sign' میں پاس کیا جاتا ہے۔

محسوب شدہ دستخط کے علاوہ، درخواست میں 'Api-Key' ہیڈر بھی ہونا چاہیے جس میں استعمال شدہ API کلید شامل ہو۔ مثال:

$headers = [
      'Api-Key: ' . $the_api_key,
      'Sign: ' . $signature_sha256
    ];

آپ اس درخواست پر دستخط کر سکتے ہیں جو AxtonPay کو بھیجی گئی ہے کسی بھی جائز کلید کے ساتھ جو اس چیک آؤٹ سے متعلق ہو۔ تاہم AxtonPay ہمیشہ وہ کلید استعمال کرتا ہے جو آپ نے مرچنٹ پینل میں منتخب کی ہے۔

دستخط کے حساب کا مثال:

/* 
Imagine there is the POST request:
URI: '/api/v1/private/checkout/payment/create?time=1735084500.3561'
POST body: '[email protected]&shop_payment_id=INVOICE-1746&pms=all&amount=19.95&currency=USD'
So there are HTTP query string and request body:
*/ 
$the_query_string = 'time=1735084500.3561';
$the_request_body = '[email protected]&shop_payment_id=INVOICE-1746&pms=all&amount=19.95&currency=USD';

// • A pair of 'API key' and 'Secret key' gathered from the admin panel
$the_api_key = 'key1';
$the_api_secret = 'secret1';

// • Concatenation:
$string_for_sha = $the_query_string . $the_request_body;
// Value: '[email protected]&shop_payment_id=INVOICE-1746&pms=all&amount=19.95&currency=USD'

// • Calculating the HTTP header 'Sign'
// hash method is SHA-256
$signature_sha256 = hash_hmac("sha256", $string_for_sha, $the_api_secret); 
// '31ca271a15e45802e07b7559a5f520656c050dda79e6fa46d52a15fc51d193cd'

/* • Signed HTTP request:
  Method: POST
  URI: '/api/v1/private/checkout/payment/create?time=1735084500.3561'
  HTTP header 'Api-Key': 'key1'
  HTTP header 'Sign': '31ca271a15e45802e07b7559a5f520656c050dda79e6fa46d52a15fc51d193cd'
  POST body: '[email protected]&shop_payment_id=INVOICE-1746&pms=all&amount=19.95&currency=USD'
*/

دوسرے مثال میں خالی جگہوں اور لائن بریکس پر دھیان دیں:

/* 
Imagine there is the POST request:
URI: '/api/v1/private/checkout/payment/create?shop_name=Very%20useful%20service'
POST body: '{
  "shop_user_id": "[email protected]",
  "shop_payment_id": "INVOICE-1746",
  "shop_payment_desc": "Premium service
(1 month)",

  "pms": "all",
  "amount": "19.95",
  "currency": "USD",
  "time": "1735084500.3561"
}'

Attention! It's important to keep the raw data 'as is', including all tabulations, whitespaces, and line breaks. 
For example, the signature becomes invalid if your software formats json, adds or removes spaces. 

So there are such HTTP query string and POST request body:
*/ 
$the_query_string = 'shop_name=Very%20useful%20service';
$the_request_body = '{
  "shop_user_id": "[email protected]",
  "shop_payment_id": "INVOICE-1746",
  "shop_payment_desc": "Premium service
(1 month)",

  "pms": "all",
  "amount": "19.95",
  "currency": "USD",
  "time": "1735084500.3561"
}';

// • A pair of 'API key' and 'Secret key' gathered from the merchant panel
$the_api_key = 'key1';
$the_api_secret = 'secret1';

// • Concatenation:
//
// hash method is SHA-256 (HTTP query string + request body)
$string_for_sha = $the_query_string . $the_request_body;
/* Value: 'shop_name=Very%20useful%20service{
  "shop_user_id": "[email protected]",
  "shop_payment_id": "INVOICE-1746",
  "shop_payment_desc": "Premium service
(1 month)",

  "pms": "all",
  "amount": "19.95",
  "currency": "USD",
  "time": "1735084500.3561"
}'
*/

// • Calculating the HTTP header 'Sign'

$signature_sha256 = hash_hmac("sha256", $string_for_sha, $the_api_secret); 
// 'ef15476f28b379e4b137a2dcd9ed495332e4766004ac3610bb92a69ba2303c28'

/* • Signed HTTP request:
  Method: POST
  URI: '/api/v1/private/checkout/payment/create'
  HTTP header 'Api-Key': 'key1'
  HTTP header 'Sign': 'ef15476f28b379e4b137a2dcd9ed495332e4766004ac3610bb92a69ba2303c28'
  POST body: '{
  "shop_user_id": "[email protected]",
  "shop_payment_id": "INVOICE-1746",
  "shop_payment_desc": "Premium service
(1 month)",

  "pms": "all",
  "amount": "19.95",
  "currency": "USD",
  "time": "1735084500.3561"
}' 
*/

دستخط کے حساب کے لیے سٹرنگ بنانے کی مثال Python:

string_for_hash_calculation = f'{request.query_params.urlencode()}{request.data.urlencode()}'

پیرامیٹرز

API تمام پیرا میٹرز کو دونوں QUERY_STRING اور POST درخواست کے باڈی میں قبول کرتا ہے۔

بولین متغیرات

API توقع کرتا ہے کہ Boolean متغیرات میں '0' یا '1' حاصل کریں، لیکن ضمنی قسم کے تبدیلی کی وجہ سے، کوئی بھی متن کا سلسلہ '1' کے طور پر سمجھا جائے گا، حتی کہ لفظ 'false' بھی۔ لہٰذا، Boolean متغیر کے لیے واضح طور پر 'FALSE' ویلیو مقرر کرنے کے لیے، آپ کو اسے یا تو '0' کی ویلیو یا خالی سلسلہ دینا ہوگا۔

اعشاریہ جدا کنندہ

اعشاری اعداد میں اعشاریہ کے طور پر صرف اعشاری نقطہ استعمال ہوتا ہے۔

پیرامیٹرز میں حرف کی صورت

چند استثناؤں کے ساتھ، تمام پیرامیٹرز کیس سینسیٹو ہیں۔

کال بیک یو آر ایل

AxtonPay کے ایڈمن پینل میں، چیک آؤٹ سیٹنگز کے صفحے پر، یہ ممکن ہے کہ اسٹور URLs مقرر کی جائیں تاکہ AxtonPay سے سرور-سرور نوٹیفیکیشن وصول کی جا سکیں، نیز URLs بھی مقرر کی جا سکتی ہیں تاکہ خریدار کو انوائس کی ادائیگی یا اس کی منسوخی کے بعد ری ڈائریکٹ کیا جا سکے، اور اس کے علاوہ کسی غلطی کی صورت میں بھی۔

ان یو آر ایل کو انوائس بنانے کی درخواست میں اووررائیڈ کیا جا سکتا ہے۔

AxtonPay API کے طریقے

انوائس کی تخلیق: /api/v1/private/checkout/payment/create

طریقہ /api/v1/private/checkout/payment/create انوائس کی تخلیق شروع کرتا ہے۔

اگر کامیاب ہو جائے، تو طریقہ ایک لنک ('invoice_url') واپس کرتا ہے جس پر آپ کو صارف کو ادائیگی کے لیے بھیجنا چاہیے۔

اپنے انوائس کے پیرامیٹرز:

  • time (ضروری) - POSIX timestamp (Unix time)
  • amount (ضروری) - ادا کی جانے والی رقم (پروڈکٹ یا سروس کی قیمت جو اسٹور وصول کرنا چاہتا ہے)
  • currency (ضروری) - ISO 4217-alpha کے مطابق 3 حرفی کرنسی کوڈ، حروف کی چھوٹی یا بڑی صورت سے بے نیاز
  • pms (ضروری) - انوائس پیج پر دکھائے گئے ادائیگی کے طریقے۔ اگر آپ تمام ادائیگی کے طریقے اجازت دینا چاہتے ہیں، تو قدر 'all' ہے؛ اگر آپ صرف کچھ کو اجازت دینا چاہتے ہیں، تو ان کے نمبریک شناخت کنندگان کومہ سے الگ کر کے فہرست بنائیں۔
  • pm - منتخب شدہ ادائیگی کے طریقہ کار کا شناخت کنندہ۔ یہ اہم ہے کہ اگر 'pm' پیرامیٹر پاس کیا جائے تو انوائس 'شفاف موڈ' میں بنائی جائے گی، یعنی خریدار انوائس کا صفحہ نہیں دیکھے گا، بلکہ براہ راست ادائیگی کے نظام پر جائے گا۔
  • extra_data - ایک ایسوسی ایٹیو ارے جس میں کوئی بھی اضافی ڈیٹا شامل ہو؛ یہ ڈیٹا مکمل طور پر اسٹور کو واپس کیا جاتا ہے
  • shop_user_id - دکان میں صارف کا شناخت کنندہ، یہ بغیر کسی تبدیلی کے دکان کو واپس کیا جاتا ہے
  • shop_payment_id - دکان میں ادائیگی کی شناخت، یہ بغیر کسی تبدیلی کے دکان کو واپس کی جاتی ہے
  • shop_name - دکان کا نام (رسید کے صفحے پر دکھایا گیا)
  • shop_payment_desc - آرڈر کی تفصیل (انوائس صفحے پر دکھائی گئی)
  • shop_payment_remark - اس ادائیگی کے بارے میں آپ کے نوٹس (یہ ادائیگی کے بارے میں آپ کے کسی بھی نوٹس کے لیے ایک فیلڈ ہے، جسے AxtonPay کسی جگہ پر منتقل نہیں کرتا؛ یہ صرف ادائیگیوں کی فہرست میں قابلِ دید ہے؛ یہ اسٹور میں واپس نہیں جاتا)
  • valid_time - وہ وقتی وقفہ جس میں بل کی ادائیگی کی جا سکتی ہے؛ سیکنڈز میں
  • view_time - وقت کا وقفہ جس کے دوران انوائس بیرونی لنک کے ذریعے دیکھنے کے لیے دستیاب ہے؛ سیکنڈز میں؛ کاؤنٹ ڈاؤن اُس وقت شروع ہوتا ہے جب 'valid_time' مدت ختم ہو جائے
  • server_notification_method - ادائیگی کی صورتحال کے بارے میں اسٹور کو سرور سے سرور نوٹیفکیشن بھیجنے کا طریقہ؛ جائز قدریں: POST, GET

انوائس کے کچھ سیٹنگز چیک آؤٹ سیٹنگز پیج پر سیٹ کی گئی ہیں۔ لیکن درخواست میں دی گئی قدریں ان سیٹنگز پر فوقیت رکھیں گی۔

چیک آؤٹ کے پیرامیٹرز جنہیں اس انوائس کے لیے اوور رائیڈ کیا جا سکتا ہے:

  • customer_success_url - ایک لنک جس پر خریدار کو ری ڈائریکٹ کیا جائے گا اگر انوائس کامیابی کے ساتھ ادا ہو جائے (یعنی اگر انوائس کی حیثیت 'paid' یا 'overpaid' ہو).
  • customer_cancel_url - ایک لنک جس پر خریدار کو ری ڈائریکٹ کیا جائے گا اگر ادائیگی منسوخ ہو جائے
  • customer_fail_url - ایک لنک جس کی طرف خریدار کو ری ڈائریکٹ کیا جائے گا اگر ادائیگی میں خرابی ہو جائے
  • server_notification_url - ادائیگی کی صورتحال کی سرور سے سرور نوٹیفکیشنز اسٹور کو بھیجنے کے لیے لنک

نوٹ: اپنی ذاتی معلومات کی پالیسی کی پابندی کے لیے، عام طور پر یہ ضروری نہیں کہ آپ اپنے گاہک کے ذاتی ڈیٹا کو انوائس کی خصوصیات میں شامل کریں۔ مثال کے طور پر، "shop_user_id" پیرامیٹر میں، ان کے ای میل یا فون نمبر کے بجائے ایک خلاصہ گاہک کا آئی ڈی درج کرنا بہتر ہے۔ اسی طرح "shop_payment_desc" میں بھی، گاہک کا ڈیٹا بالکل شامل نہ کرنا بہتر ہے، کیونکہ وہ پہلے ہی اپنے بارے میں سب کچھ جانتے ہیں؛ اس کے بجائے، آپ ادائیگی شدہ اشیاء یا خدمات کے بارے میں کچھ معلومات لکھ سکتے ہیں، یا صرف کارروائی کی قسم لکھ سکتے ہیں، جیسے کہ "خریداری" یا "بیلنس ٹاپ اپ"۔

تمام حوالہ جات لازمی طور پر پروٹوکول کے ساتھ منتقل کیے جاتے ہیں۔

درخواست کی مثال:

<?php
// API credentials - get it from settings of the checkout
$api_key = 'API_KEY';
$api_secret = 'API_SECRET';
// API endpoint
$api_endpoint = 'https://mp.axtonpay.com/api/v1/private/checkout';
// Current POSIX timestamp
$time = time();
// API method URL
$api_url = $api_endpoint . '/payment/create';

// Prepare POST parameters
$post_data = [
    'amount' => 4.99,
    'currency' => 'USD',
    'pms' => 'all', // visible payment methods; either 'all' or comma-separated list of selected GUIDs
    // 'pm' => '92807385', // define the certain payment method if you do not want payer to see the list of all possible payment methods

    // Below parameters are optional
    'extra_data' => ['param1'=>'value 1', 'param2'=>'value 2'],

    'shop_user_id' => '[email protected]',
    'shop_payment_id' => 'TEST-333-' . $time,
    'shop_name' => 'TEST-333 web shop',
    'shop_payment_desc' => 'TEST-333 payment description visible to payer',
    'shop_payment_remark' => 'TEST-333 payment remark for admin',

    'customer_success_url' => 'https://example.com/?status=paid-or-overpaid&once=TEST-333-' . $time, 
    'customer_cancel_url' => 'https://example.com/?status=cancelled-by-payer&once=TEST-333-' . $time,
    'customer_fail_url' => 'https://example.com/?status=error&once=TEST-333-' . $time,
    'server_notification_url' => 'https://example.com/?for=server-to-server-notificataions',
    'server_notification_method' => 'POST',
	
    'valid_time' => 60*60*24*7, // seconds
    'view_time'  => 60*60*24*21, // seconds, clock starts after ending of 'valid_time' period
];

// Prepare GET parameters
$query_string = 'time=' . $time;

// Build the request body
$request_body = json_encode($post_data); // Encode as JSON
// $request_body = http_build_query($post_data);

// Concatenate QUERY_STRING and REQUEST_BODY
$string_for_sha = $query_string . $request_body;

// Calculate the signature
$signature = hash_hmac('sha256', $string_for_sha, $api_secret);

// Prepare HTTP headers
$headers = [
    'Api-Key: ' . $api_key,
    'Sign: ' . $signature,
    'Content-Type: application/json'
];

// Initialize cURL
$ch = curl_init($api_url . '?' . $query_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request_body);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

// Execute the request
$response = curl_exec($ch);

// Close cURL
curl_close($ch);
?>

انوائس بنانے کی درخواست کرتے وقت کامیاب جواب کی مثال:

{
    "status": "ok",
    "data": "invoice created",
    "pid": "HNQ5CAHM",
    "test": false,
    "created_at": "2025-12-27T08:14:55.000000Z",
    "invoice_url": "https:\/\/27375212.b88pay.com\/i\/HNQ5CAHM"
}

انوائس کی معلومات حاصل کرنا: /api/v1/private/checkout/payment/get/{PID}

ضروری معلومات حاصل کرنے کے لیے /api/v1/private/checkout/payment/get/{PID} طریقہ کو کال کریں، URL کے آخر میں انوائس کا PID بتا کر۔

درخواست کے پیرامیٹرز:

  • time (ضروری) - POSIX timestamp (Unix time)

دستخط بنانے کے لیے ایک لائن کی مثال:

// Full URL:
https://mp.axtonpay.com/api/v1/private/checkout/payment/get/GIKR3XPY?time=1766837343

// String for signature calculation: 
time=1766837343

جواب کی مثال:

{
    "status": "ok",
    "data": {
        "pid": "HNQ5CAHM",
        "checkout_guid": 34677320,
        "created_at": "2025-12-27 12:07:21",
        "updated_at": "2025-12-27 12:07:34",
        "data": {
            "ip": "1.2.3.4",
            "pms": "all",
            "extra_data": {
                "param1": "val1",
                "param2": "val2",
                "server_notification_url": "https:\/\/example.com\/?for=server-to-server-notificataions"
            },
            "redirect_url": "\/wait\/HNQ5CAHM",
            "customer_fail_url": "https:\/\/example.com\/?status=error&id=TEST-333-1766837240",
            "allow_change_amount": false,
            "customer_cancel_url": "https:\/\/example.com\/?status=cancelled-by-payer&id=TEST-333-1766837240",
            "customer_success_url": "https:\/\/example.com\/?status=paid-or-overpaid&id=TEST-333-1766837240"
        },
        "payment_status": 0,
        "amount": "4.99",
        "filled": "0.00",
        "currency_id": 5,
        "transparent": 1,
        "expires_at": "2026-01-03 12:07:21",
        "invisible_at": "2026-01-26 12:07:21",
        "paid_at": null,
        "confirmed_at": null,
        "shop_name": "TEST-333 web shop",
        "shop_user_id": "[email protected]",
        "shop_payment_id": "TEST-333-1766837240",
        "shop_payment_desc": "TEST-333 payment description visible to payer",
        "shop_payment_remark": "TEST-333 payment remark for merchant",
        "payment_method_id": 92807385,
        "gateway_id": 40056646,
        "payment_option_id": 297,
        "txid": null,
        "account_from": null,
        "account_to": "TEnYvbfg9YqJeaVtVHAwEvG2kmAJcTzxTh",
        "payment_option_amount": "17.865973",
        "payment_option_filled": "0.000000",
        "payment_option_currency_id": 317,
        "exchange_rates_expires_at": "2025-12-27 12:27:33",
        "test": false,
        "initiator": "api",
        "initiator_info": null,
        "payment_option": {
            "id": 297,
            "gateway_id": 40056646,
            "pm": "trx",
            "currency_id": 317,
            "name": "Tron",
            "icon": "crypto\/tron.png",
            "min_invoice": null,
            "max_invoice": null
        },
        "payment_option_currency": {
            "id": 317,
            "name": "Tron",
            "code": "TRX",
            "minor_unit": 6
        },
        "currency": {
            "id": 5,
            "name": "United States dollar",
            "code": "USD",
            "minor_unit": 2
        },
        "invoice_url": "https:\/\/27375212.b88pay.com\/i\/HNQ5CAHM"
    }
}

درخواست کی گئی رقم اور ادا کی گئی رقم کا موازنہ

جواب میں کئی مختلف رقمیں شامل ہیں (اس کرنسی میں جس میں انوائس جاری کی گئی تھی):

  • "amount" - انویس شدہ رقم،
  • "filled" - انوائس کا ادا شدہ حصہ,
  • "total_filled" - کل کلائنٹ نے کتنا ادا کیا، کمیشن سمیت۔

اگر "filled = amount"، تو یہ بالکل اتنا ہی ادا کیا جاتا ہے جتنا کہ ضروری ہے۔

اگر "filled > amount"، تو زیادہ ادائیگی ہوئی ہے۔

اگر "filled < amount"، تو انوائس مکمل طور پر ادا نہیں کی گئی ہے (کم ادائیگی)۔

انوائس: AxtonPay سے اسٹیٹس کی تبدیلی کے بارے میں اطلاع کے پروسیسنگ

ہر بار جب کسی انوائس کی حیثیت تبدیل کی جاتی ہے، AxtonPay server_notification_url کو اطلاع بھیجتا ہے (server_notification_method کا استعمال کرتے ہوئے)

مثالی ڈیٹا:

{
    "pid": "U5IB4WIO",
    "status": "3",
    "shop_user_id": "3q23g",
    "shop_payment_id": "h76r5",
    "amount": "240.00000000",
    "filled": "0.00000000",
    "fee": "0",
    "total_filled": "0.00000000",
    "currency": "DASH",
    "test": "0"
}

اس اطلاع کے جواب میں AxtonPay کی توقع ہے کہ HTTP code 200 وصول کرے گا، جو اس کی کامیاب وصولی کی تصدیق کرتا ہے۔ بصورت دیگر، AxtonPay مزید 12 بار کوشش کرے گا، جو بتدریج بڑھتے ہوئے وقفوں پر ہوں گی، اور پھر اطلاع کی حالت 'error' میں بدل جاتی ہے (لیکن اس کا خود انوائس کی حالت پر کوئی اثر نہیں پڑتا ہے)۔

ممکنہ حیثیت کی قدریں:

  • 0 - pending
  • 1 - paid
  • 2 - error
  • 3 - cancelled by customer
  • 4 - underpaid
  • 5 - overpaid
  • 8 - expired

کامیاب ادائیگی کی حیثیتیں 1 (paid) اور 5 (overpaid) ہیں؛ ان کی وصولی کی صورت میں آپ ادائیگی شدہ خریداری کو صارف کو منتقل کر سکتے ہیں یا بیلنس کو دوبارہ بھریں۔ 5 (overpaid) حیثیت والی ادائیگیوں کے لیے، بیلنس کی دوبارہ بھرتی کی صورت میں، آپ اصل وصول شدہ ادائیگی کی رقم کے مطابق بیلنس کو دوبارہ بھر سکتے ہیں، لیکن اگر سامان/خدمات کی فروخت ہو اور زیادہ ادائیگی کی مقدار اہم ہو تو مشورہ دیا جاتا ہے کہ ادائیگی کرنے والے سے رابطہ کریں اور اس کے ساتھ طے کریں کہ زیادہ ادائیگی کے ساتھ کیسے نمٹا جائے۔

جزوی طور پر کامیاب حیثیت 4 (underpaid) ہے؛ اس حیثیت کے موصول ہونے کی صورت میں، اصل میں وصول شدہ ادائیگی کی مقدار کے مطابق بیلنس کو ریچارج کرنا ممکن ہے۔ تاہم، اس حیثیت کو مال/سروسز کی فروخت کے لیے کامیاب نہیں سمجھا جا سکتا۔

تمام دیگر حیثیتیں - 0 (pending), 2 (error), 3 (canceled by customer) ادائیگی کی مکمل غیر موجودگی کو ظاہر کرتی ہیں؛ ان کی وصولی کی صورت میں بیلنس کی تکمیل یا اشیاء/خدمات کی فروخت پر کوئی کارروائی نہیں کی جانی چاہیے۔

دستخط کی تصدیق

اس بات کو یقینی بنانے کے لیے کہ نوٹیفیکیشن بالکل AxtonPay کی طرف سے بھیجی گئی ہے، یہ ضروری ہے کہ موصولہ نوٹیفیکیشن کے دستخط کی تصدیق کی جائے اس پر اعتماد کرنے سے پہلے۔ تصدیق آپ کی اپنی درخواستوں پر دستخط کرنے جیسی ہے، صرف آخری قدم شامل کیا گیا ہے، جب آپ کو حساب شدہ دستخط کو موصولہ HTTP ہیڈر کے ساتھ موازنہ کرنا چاہیے 'Sign'۔

ادائیگی کی حالت میں تبدیلی کی اطلاع موصول ہونے کے بعد اہم اقدامات درج ذیل ہیں:

  • موصول شدہ اطلاع سے دلائل کی پوری لکیر (QUERY_STRING) لے لیں،
  • موصولہ اطلاع سے سارا POST data (REQUEST_BODY) لے لو,
  • ان QUERY_STRING + REQUEST_BODY اور مناسب 'Secret key' کا استعمال کرتے ہوئے دستخط حساب کریں،
  • حساب شدہ دستخط کا موازنہ اس سے کریں جو HTTP ہیڈر میں وصول ہوا ہو 'Sign'،
  • اگر دستخط ایک جیسے ہیں، تو اطلاع واقعی AxtonPay سے آئی ہے؛
  • اگر دستخط مختلف ہیں، تو یہ ادا کرنے والے کی جانب سے دھوکہ دینے کی کوشش ہو سکتی ہے۔

دستخط بنانے کے لیے ایک لائن کی مثال:

// Full URL:
https://EXAMPLE.COM?time=1737027838.1237

// POST body: 
pid=ABCD5678&status=1&shop_user_id=&shop_payment_id=&amount=25.00000000&filled=25.00000000&fee=0&total_filled=25.00000000&currency=RDD&test=0

// String for signature calculation: 
time=1737027838.1237pid=ABCD5678&status=1&shop_user_id=&shop_payment_id=&amount=25.00000000&filled=25.00000000&fee=0&total_filled=25.00000000&currency=RDD&test=0

تصدیق کہ اسٹور نے ادائیگی کی معلومات پر کارروائی کر دی ہے: /api/v1/private/checkout/payment/confirm/{PID}

یہ درخواست AxtonPay کو بھیجی جاتی ہے جس کا مقصد اس سے موصول ہونے والی اطلاع کے جواب میں ہے۔ عملی طور پر، یہ اس بات کی تصدیق ہے کہ اسٹور نے موصولہ اطلاع کو کامیابی کے ساتھ موصول اور پراسیس کر لیا ہے۔

درخواست بھیجنے کے لیے، /api/v1/private/checkout/payment/confirm/{PID} طریقہ کار کو کال کریں، URL کے آخر میں انوائس کا pid بتا کر۔

درخواست کے پیرا میٹر:

  • time (ضروری) - POSIX timestamp (Unix time)
  • status (درکار، عدد) - ادائیگی کی صورتحال کا نمبر جس کے لیے اسٹور تصدیق بھیجتا ہے

اگر منتقل شدہ حیثیت اس سسٹم میں اس انوائس کی موجودہ حیثیت سے میل کھاتی ہے، AxtonPay 'OK' کے ساتھ جواب دے گا اور اگر میل نہیں کھاتی تو یہ ایک خرابی کے ساتھ جواب دے گا۔

دستخط بنانے کے لیے ایک لائن کی مثال:

// Full URL:
https://mp.axtonpay.com/api/v1/private/checkout/payment/confirm/ABCD5678?time=1737011414

// POST body: 
{"status":"1"}

// String for signature calculation:
time=1737011414{"status":"1"}

اگر موجودہ ادائیگی کی حالت ایک جیسی ہو تو جواب کی مثال:

{
    "status": "ok",
    "data": "\"Paid\" status notification is confirmed"
}

اگر موجودہ ادائیگی کی حیثیت درخواست میں بھیجی گئی حیثیت سے مختلف ہو تو ردعمل کی مثال:

{
    "status": "error",
    "message": "Something went wrong"
}

کرنسی کوڈز

وہ کرنسیاں جو انوائس بنانے کے لیے استعمال کی جا سکتی ہیں۔

زیادہ تر استعمال شدہ کرنسی کوڈز فیاٹ کرنسیوں سے تعلق رکھتے ہیں، اور وہ ISO 4217 کے برابر ہیں۔ اس فہرست میں کچھ کریپٹو کرنسیاں بھی شامل ہیں۔

کوڈ نام اعشاریہ ہندسے قسم
BCH Bitcoin Cash 8 کریپٹو کرنسی
BLK Blackcoin 8 کریپٹو کرنسی
BNB Binancecoin 18 کریپٹو کرنسی
BTC Bitcoin 8 کریپٹو کرنسی
BTT BitTorrent 18 کریپٹو ٹوکن
BUSD Binance USD 18 کریپٹو ٹوکن
DAI Dai 18 کریپٹو ٹوکن
DASH Dash 8 کریپٹو کرنسی
DOGE Dogecoin 8 کریپٹو کرنسی
ETC Ethereum Classic 18 کریپٹو کرنسی
ETH Ethereum 18 کریپٹو کرنسی
LTC Litecoin 8 کریپٹو کرنسی
NLG Gulden 8 کریپٹو کرنسی
RDD ReddCoin 8 کریپٹو کرنسی
TRX Tron 6 کریپٹو کرنسی
USDC USD Coin 6 کریپٹو ٹوکن
USDD Decentralized USD 18 کریپٹو ٹوکن
USDT Tether USDT 6 کریپٹو ٹوکن
VTC Vertcoin 8 کریپٹو کرنسی
XVG Verge 8 کریپٹو کرنسی
AED United Arab Emirates dirham 2 فیات کرنسی
AFN Afghan afghani 2 فیات کرنسی
ALL Albanian lek 2 فیات کرنسی
AMD Armenian dram 2 فیات کرنسی
ANG Netherlands Antillean guilder 2 فیات کرنسی
AOA Angolan kwanza 2 فیات کرنسی
ARS Argentine peso 2 فیات کرنسی
AUD Australian dollar 2 فیات کرنسی
AWG Aruban florin 2 فیات کرنسی
AZN Azerbaijani manat 2 فیات کرنسی
BAM Bosnia and Herzegovina convertible mark 2 فیات کرنسی
BBD Barbados dollar 2 فیات کرنسی
BDT Bangladeshi taka 2 فیات کرنسی
BGN Bulgarian lev 2 فیات کرنسی
BHD Bahraini dinar 3 فیات کرنسی
BIF Burundian franc 2 فیات کرنسی
BMD Bermudian dollar 2 فیات کرنسی
BND Brunei dollar 2 فیات کرنسی
BOB Boliviano 2 فیات کرنسی
BRL Brazilian real 2 فیات کرنسی
BSD Bahamian dollar 2 فیات کرنسی
BTN Bhutanese ngultrum 2 فیات کرنسی
BWP Botswana pula 2 فیات کرنسی
BYN Belarusian ruble 2 فیات کرنسی
BZD Belize dollar 2 فیات کرنسی
CAD Canadian dollar 2 فیات کرنسی
CDF Congolese franc 2 فیات کرنسی
CHF Swiss franc 2 فیات کرنسی
CLP Chilean peso 2 فیات کرنسی
CNY Renminbi (Chinese) yuan 2 فیات کرنسی
COP Colombian peso 2 فیات کرنسی
CRC Costa Rican colon 2 فیات کرنسی
CUC Cuban convertible peso 2 فیات کرنسی
CUP Cuban peso 2 فیات کرنسی
CVE Cape Verde escudo 2 فیات کرنسی
CZK Czech koruna 2 فیات کرنسی
DJF Djiboutian franc 2 فیات کرنسی
DKK Danish krone 2 فیات کرنسی
DOP Dominican peso 2 فیات کرنسی
DZD Algerian dinar 2 فیات کرنسی
EGP Egyptian pound 2 فیات کرنسی
ERN Eritrean nakfa 2 فیات کرنسی
ETB Ethiopian birr 2 فیات کرنسی
EUR Euro 2 فیات کرنسی
FJD Fiji dollar 2 فیات کرنسی
FKP Falkland Islands pound 2 فیات کرنسی
GBP Pound sterling 2 فیات کرنسی
GEL Georgian lari 2 فیات کرنسی
GHS Ghanaian cedi 2 فیات کرنسی
GIP Gibraltar pound 2 فیات کرنسی
GMD Gambian dalasi 2 فیات کرنسی
GNF Guinean franc 0 فیات کرنسی
GTQ Guatemalan quetzal 2 فیات کرنسی
GYD Guyanese dollar 2 فیات کرنسی
HKD Hong Kong dollar 2 فیات کرنسی
HNL Honduran lempira 2 فیات کرنسی
HRK Croatian kuna 2 فیات کرنسی
HTG Haitian gourde 2 فیات کرنسی
HUF Hungarian forint 2 فیات کرنسی
IDR Indonesian rupiah 2 فیات کرنسی
ILS Israeli new shekel 2 فیات کرنسی
INR Indian rupee 2 فیات کرنسی
IQD Iraqi dinar 3 فیات کرنسی
IRR Iranian rial 2 فیات کرنسی
ISK Icelandic krona 2 فیات کرنسی
JMD Jamaican dollar 2 فیات کرنسی
JOD Jordanian dinar 3 فیات کرنسی
JPY Japanese yen 3 فیات کرنسی
KES Kenyan shilling 2 فیات کرنسی
KGS Kyrgyzstani som 2 فیات کرنسی
KHR Cambodian riel 2 فیات کرنسی
KMF Comoro franc 2 فیات کرنسی
KPW North Korean won 2 فیات کرنسی
KRW South Korean won 2 فیات کرنسی
KWD Kuwaiti dinar 3 فیات کرنسی
KYD Cayman Islands dollar 2 فیات کرنسی
KZT Kazakhstani tenge 2 فیات کرنسی
LAK Lao kip 2 فیات کرنسی
LBP Lebanese pound 2 فیات کرنسی
LKR Sri Lankan rupee 2 فیات کرنسی
LRD Liberian dollar 2 فیات کرنسی
LSL Lesotho loti 2 فیات کرنسی
LYD Libyan dinar 3 فیات کرنسی
MAD Moroccan dirham 2 فیات کرنسی
MDL Moldovan leu 2 فیات کرنسی
MGA Malagasy ariary 2 فیات کرنسی
MKD Macedonian denar 2 فیات کرنسی
MMK Myanmar kyat 2 فیات کرنسی
MNT Mongolian togrog 2 فیات کرنسی
MOP Macanese pataca 2 فیات کرنسی
MRU Mauritanian ouguiya 2 فیات کرنسی
MUR Mauritian rupee 2 فیات کرنسی
MVR Maldivian rufiyaa 2 فیات کرنسی
MWK Malawian kwacha 2 فیات کرنسی
MXN Mexican peso 2 فیات کرنسی
MYR Malaysian ringgit 2 فیات کرنسی
MZN Mozambican metical 2 فیات کرنسی
NAD Namibian dollar 2 فیات کرنسی
NGN Nigerian naira 2 فیات کرنسی
NIO Nicaraguan cordoba 2 فیات کرنسی
NOK Norwegian krone 2 فیات کرنسی
NPR Nepalese rupee 2 فیات کرنسی
NZD New Zealand dollar 2 فیات کرنسی
OMR Omani rial 3 فیات کرنسی
PAB Panamanian balboa 2 فیات کرنسی
PEN Peruvian sol 2 فیات کرنسی
PGK Papua New Guinean kina 2 فیات کرنسی
PHP Philippine peso 2 فیات کرنسی
PKR Pakistani rupee 2 فیات کرنسی
PLN Polish zloty 2 فیات کرنسی
PYG Paraguayan guarani 2 فیات کرنسی
QAR Qatari riyal 2 فیات کرنسی
RON Romanian leu 2 فیات کرنسی
RSD Serbian dinar 2 فیات کرنسی
RUB Russian ruble 2 فیات کرنسی
RWF Rwandan franc 2 فیات کرنسی
SAR Saudi riyal 2 فیات کرنسی
SBD Solomon Islands dollar 2 فیات کرنسی
SCR Seychelles rupee 2 فیات کرنسی
SDG Sudanese pound 2 فیات کرنسی
SEK Swedish krona/kronor 2 فیات کرنسی
SGD Singapore dollar 2 فیات کرنسی
SHP Saint Helena pound 2 فیات کرنسی
SLL Sierra Leonean leone 2 فیات کرنسی
SOS Somali shilling 2 فیات کرنسی
SRD Surinamese dollar 2 فیات کرنسی
SSP South Sudanese pound 2 فیات کرنسی
STN Sao Tome and Pricipe dobra 2 فیات کرنسی
SVC Salvadoran colon 2 فیات کرنسی
SYP Syrian pound 2 فیات کرنسی
SZL Swazi lilangeni 2 فیات کرنسی
THB Thai baht 2 فیات کرنسی
TJS Tajikistani somoni 2 فیات کرنسی
TMT Turkmenistan manat 2 فیات کرنسی
TND Tunisian dinar 3 فیات کرنسی
TOP Tongan paanga 2 فیات کرنسی
TRY Turkish lira 2 فیات کرنسی
TTD Trinidad and Tobago dollar 2 فیات کرنسی
TWD New Taiwan dollar 2 فیات کرنسی
TZS Tanzanian shilling 2 فیات کرنسی
UAH Ukrainian hryvnia 2 فیات کرنسی
UGX Ugandan shilling 0 فیات کرنسی
USD United States dollar 2 فیات کرنسی
UYU Uruguayan peso 2 فیات کرنسی
UZS Uzbekistan som 2 فیات کرنسی
VES Venezuelan bolivar soberano 2 فیات کرنسی
VND Vietnamese dong 2 فیات کرنسی
VUV Vanuatu vatu 0 فیات کرنسی
WST Samoan tala 2 فیات کرنسی
XAF CFA franc BEAC 3 فیات کرنسی
XCD East Caribbean dollar 2 فیات کرنسی
XOF CFA franc BCEAO 2 فیات کرنسی
XPF CFP franc (franc Pacifique) 3 فیات کرنسی
XTS کوڈز جو خاص طور پر جانچ کے مقاصد کے لیے مخصوص ہیں 2 محفوظ کوڈ
XXX ان لین دین کے لیے مختص شدہ کوڈز جہاں کوئی کرنسی شامل نہیں ہوتی 2 محفوظ کوڈ
YER Yemeni rial 2 فیات کرنسی
ZAR South African rand 2 فیات کرنسی
ZMW Zambian kwacha 2 فیات کرنسی
ZWL Zimbabwean dollar 2 فیات کرنسی