mc

mellat-checkout

Unofficial NodeJS implementation of Behpardakht Mellat Gateway API.

Showing:

Popularity

Downloads/wk

39

GitHub Stars

34

Maintenance

Last Commit

1yr ago

Contributors

6

Package

Dependencies

1

Size (min+gzip)

298.6KB

License

Beerware

Type Definitions

Tree-Shakeable

No?

Categories

Readme

Mellat Checkout:

npm version

Unofficial Behpardakht Mellat Gateway implementation in Node.JS

NOTICE: SUBJECT TO BACKWARD INCOMPATIBLE CHANGES (Due to under V1.0.0 version).

Installation

Install the package from npm or yarn.

NPM

npm install mellat-checkout

Yarn

yarn add mellat-checkout

Usage:

Create An Instance

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)
});

API

Payment Request:

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);
});

Payment Verification:

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);
});

Payment Settlement (Payment Finalization):

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);
});

Inquiry Request:

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);
});

Reversal Request:

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);
});

Callbacks Instead Of Promises

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);
  }
});

TODOS

API-TODO

  • bpPayRequest
  • bpVerifyRequest
  • bpSettleRequest
  • bpInquiryRequest
  • bpReversalRequest
  • bpDynamicPayRequest
  • bpCumulativeDynamicPayRequest

Helper Methods

  • verifyAndSettle (Verify the payment and settle/reverse it)

Code

  • JSDocs and code comments
  • Unit tests using mocha

Contributing

Contributions are welcome. Please submit PRs or just file an Issue if you see something broken or in need of improving.

ResCodes Descriptions

ResCodeDescription
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تعداد دفعات ورود اطلاعات از حد مجاز گذشته است
421IP نامعتبر است

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100