AK Pay provides secure, high-availability payment solutions for Bangladesh (bkash, nagad, rocket), India (UPI), and Pakistan (easypaisa, jazzcash). All endpoints require MD5 signature authentication.
Signature Workflow
- Remove
sign parameter from request array
- Sort remaining parameters alphabetically by key
- Create query string:
key1=value1&key2=value2...
- Append
&key=YOUR_SECRET_KEY
- Generate MD5 hash (lowercase) → final signature
function generateSign($params, $secretKey) {
unset($params['sign']);
ksort($params);
$str = http_build_query($params) . '&key=' . $secretKey;
return strtolower(md5($str));
}
Supported Payment Methods
| Country | Methods |
|---|
| 🇧🇩 Bangladesh | bkash, nagad, rocket |
| 🇮🇳 India | upi |
| 🇵🇰 Pakistan | easypaisa, jazzcash |
| Parameter | Required | Description |
|---|
| mchId | ✓ | Your merchant ID |
| out_trade_no | ✓ | Unique order ID |
| money | ✓ | Amount, e.g., "100.00" |
| pay_type | ✓ | bkash, nagad, rocket, upi, easypaisa, jazzcash |
| currency | ✓ | BDT, INR, PKR |
| notify_url | ✓ | Webhook callback URL (HTTPS) |
| returnUrl | ✓ | User redirect after payment |
| sign | ✓ | MD5 signature |
{
"mchId": "test123",
"out_trade_no": "ORD_1703123456",
"money": "250.00",
"pay_type": "bkash",
"currency": "BDT",
"notify_url": "https://yourdomain.com/callback",
"returnUrl": "https://yourdomain.com/success",
"sign": "abcd1234..."
}
Success Response
{"code":0,"msg":"success","data":{"url":"https://payment-page-url.com/xxx","transaction_Id":"TXN123456789"}}
{"mchId":"your_merchant_id","out_trade_no":"ORD001","sign":"md5_signature"}
Response
{"code":0,"data":{"out_trade_no":"ORD001","status":"1","amount":"100","transaction_id":"TXN123"}}
Status Codes
0 → Pending 1 → Success 2 → Failed
| Param | Required | Description |
|---|
| account | ✓ | Customer mobile number |
| userName | ✓ | Full name |
| money | ✓ | Withdrawal amount |
| pay_type | ✓ | BKASH, NAGAD, ROCKET, UPI |
{
"mchId": "merchant123",
"out_trade_no": "WD001",
"money": "500",
"pay_type": "BKASH",
"currency": "BDT",
"account": "01XXXXXXXXX",
"userName": "John Doe",
"notify_url": "https://yourdomain.com/payout_callback",
"sign": "..."
}
Success Response
{"code":200,"message":"success","data":{"out_trade_no":"WD001","amount":"500","status":"processing","transaction_id":"POUT123"}}
Callbacks are sent as application/json with POST. Return exactly "ok".
✅ Success Callback
{"status":"success","out_trade_no":"ORD001","mchId":"merchant","pay_money":250,"real_amount":245,"merchant_rate":2,"currency":"BDT","timestamp":1703123456,"transaction_id":"TXN123","sign":"..."}
❌ Failed Callback
{"status":"failed","out_trade_no":"ORD001","mchId":"merchant","pay_money":250,"timestamp":1703123456,"message":"Payment failed","sign":"..."}
Payout Callbacks
// Success: {"status":"success","out_trade_no":"WD001","amount":500,"real_amount":500,"currency":"BDT","type":"payout","transaction_id":"POUT123","sign":"..."}
// Failed: {"status":"failed","out_trade_no":"WD001","amount":500,"currency":"BDT","type":"payout","message":"Insufficient balance","sign":"..."}
// Handler example
$data = json_decode(file_get_contents('php://input'), true);
if ($data['status'] === 'success') { echo "ok"; } else { echo "fail"; }