Unofficial Behpardakht Mellat Gateway implementation in Node.JS
NOTICE: SUBJECT TO BACKWARD INCOMPATIBLE CHANGES (Due to under V1.0.0 version).
Install the package from npm
or yarn
.
npm install mellat-checkout
yarn add mellat-checkout
Import the package:
const MellatCheckout = require('mellat-checkout');
// or (ES6):
import MellatCheckout from 'mellat-checkout';
Then create an instance:
const mellat = new MellatCheckout({
terminalId: 'xxxxxxx',
username: 'xxxxxxx',
password: 'xxxxxxx',
timeout: 10000, // Optional, number in millisecond (defaults to 10 sec)
apiUrl: 'https://bpm.shaparak.ir/pgwchannel/services/pgw?wsdl', // Optional, exists (and may updated) in bank documentation (defaults to this)
});
// Initialize the client, this step is optional
// but gives you more control over your flow
// and speeds up the first (and just first) request.
mellat.initialize().then(function () {
console.log("Mellat client ready")
})
.catch(function (error) {
// you can retry here
console.log("Mellat client encountered error:", error)
});
mellat.paymentRequest({
amount: 1000, // Payment Amount In Rials
orderId: '12345678912', // OrderID Generated By You
callbackUrl: 'https://call.back/mellat', // Payment Callback URL
payerId: '0' // Optional
}).then(function (response) {
if (response.resCode === 0) {
console.log(response.refId);
// Now redirect user to following address with post param
// { RefId: response.refId }
// https://bpm.shaparak.ir/pgwchannel/startpay.mellat
} else {
console.warn('Gateway Error: ', response.resCode);
}
}).catch(function (error) {
console.error(error);
});
mellat.verifyPayment({
orderId: '12345678912', // OrderID Used In Payment Request
saleOrderId: '12345678912', // Get From Payment Callback Post Params
saleReferenceId: '5142510', // Get From Payment Callback Post Params
}).then(function (response) {
if (response.resCode === 0) {
console.log("Verified, Call settlePayment");
} else {
console.warn('Gateway Error: ', response.resCode);
}
}).catch(function (error) {
console.error(error);
});
mellat.settlePayment({
orderId: '12345678912', // OrderID Used In Payment Request
saleOrderId: '12345678912', // Get From Payment Callback Post Params
saleReferenceId: '5142510', // Get From Payment Callback Post Params
}).then(function (response) {
if (response.resCode === 0) {
console.log("Payment Is Done.");
} else if (response.resCode === 45) {
console.log("Payment Already Done(Settled Before).");
} else {
console.warn('Gateway Error: ', response.resCode);
}
}).catch(function (error) {
console.error(error);
});
mellat.inquiryRequest({
orderId: '12345678912', // OrderID Used In Payment Request
saleOrderId: '12345678912', // Get From Payment Callback Post Params
saleReferenceId: '5142510', // Get From Payment Callback Post Params
}).then(function (response) {
console.log('Payment Status: ' + response.resCode)
}).catch(function (error) {
console.error(error);
});
mellat.reversalRequest({
orderId: '12345678912', // OrderID Used In Payment Request
saleOrderId: '12345678912', // Get From Payment Callback Post Params
saleReferenceId: '5142510', // Get From Payment Callback Post Params
}).then(function (response) {
if (response.resCode === 0) {
console.log("Payment Is Reversed.");
} else {
console.warn('Gateway Error: ', response.resCode);
}
}).catch(function (error) {
console.error(error);
});
All methods can be called by using Callbacks instead of Promises, lets take paymentRequest
as an example:
mellat.paymentRequest({
amount: 1000, // Payment Amount In Rials
orderId: '12345678912', // OrderID Generated By You
callbackUrl: 'https://call.back/mellat', // Payment Callback URL
payerId: '0' // Optional
}, function (error, response) {
if (error) {
console.error(error);
} else if (response.resCode === 0) {
console.log(response.refId);
} else {
console.warn('Gateway Error: ', response.resCode);
}
});
mocha
Contributions are welcome. Please submit PRs or just file an Issue if you see something broken or in need of improving.
ResCode | Description |
---|---|
0 | تراکنش با موفقیت انجام شد |
11 | شماره کارت نا معتبر است |
12 | موجودی کافی نیست |
13 | رمز نادرست است |
14 | تعداد دفعات وارد کردن رمز بیش از حد مجاز است |
15 | کارت نامعتبر است |
16 | دفعات برداشت وجه بیش از حد مجاز است |
17 | کاربر از انجام تراکنش منصرف شده است |
18 | تاریخ انقضای کارت گذشته است |
19 | مبلغ برداشت وجه بیش از حد مجاز است |
21 | پذیرنده نا معتبر است |
23 | خطای امنیتی رخ داده است |
24 | اطلاعات کاربری پذیرنده نا معتبر است |
25 | مبلغ نا معتبر است |
31 | پاسخ نا معتبر است |
32 | فرمت اطلاعات وارد شده صحیح نمی باشد |
33 | حساب نا معتبر است |
34 | خطای سیستمی |
35 | تاریخ نا معتبر است |
41 | شماره درخواست تکراری است |
42 | تراکنش Sale یافت نشد |
43 | قبلا درخواست Verify داده شده است |
44 | درخواست Verify یافت نشد |
45 | تراکنش Settle شده است |
46 | تراکنش Settle نشده است |
47 | تراکنش Settle یافت نشد |
48 | تراکنش Reverse شده است |
49 | تراکنش Refund یافت نشد |
51 | تراکنش تکراری است |
54 | تراکنش مرجع موجود نیست |
55 | تراکنش نا معتبر است |
61 | خطا در واریز |
62 | مسير بازگشت به سايت در دامنه ثبت شده برای پذيرنده قرار ندارد |
98 | سقف استفاده از رمز ایستا به پایان رسیده است |
111 | صادر کننده کارت نا معتبر است |
112 | خطای سوییچ صادر کننده کارت |
113 | پاسخی از صادر کننده ی کارت دریافت نشد |
114 | دارنده کارت مجاز به انجام این تراکنش نیست |
412 | شناسه قبض نادرست است |
413 | شناسه پرداخت نادرست است |
414 | سازمان صادر کننده قبض نامعتبر است |
415 | زمان جلسه کاری به پایان رسیده است |
416 | خطا در ثبت اطلاعات |
417 | شناسه پرداخت کننده نا معتبر است |
418 | اشکال در تعریف اطلاعات مشتری |
419 | تعداد دفعات ورود اطلاعات از حد مجاز گذشته است |
421 | IP نامعتبر است |
Golang Implementation Of Zarinpal Checkout
Transform your objects to desired rich ones using declarative rules.
Dedicated laravel package for Behpadakht Mellat bank payment service.
A Laravel package for connecting to (Iran) Mellat bank gateway.
Iranian Mellat Bank Gateway for PHP Projects
ماژول بانک ملت پرستاشاپ برای پرداخت با تمام بانک های عضو شتاب. Preshtashop Module for Mellat bank of Iran. Accept payments from shetab bank system.
Iranian Mellat gateway processor, for NodeJS
C++ Arendelle 2XIV Engine