1.0.1 • Published 7 years ago

@ycnt/unionpay v1.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
7 years ago

Build Status Coverage Status MIT license

介绍

中国银联支付开放平台 Nodejs SDK, 适用于API版本5.0.0

申请测试地址:https://open.unionpay.com/ajweb/index

目前支持

安装

npm i -S @ycnt/unionpay

yarn add @ycnt/unionpay

使用例子

APP下单

import { Unionpay } from '@ycnt/unionpay';

const pfxPath = __dirname + '/cer/700000000000001_acp.pfx';
const pfxPassword = '000000';
const merId = '777290058160513';
const cer = __dirname + '/cer/verify_sign_acp.cer';
const backUrl = 'http://backUrl';

const unionpay = new Unionpay(pfxPath, pfxPassword, merId, cer, backUrl, true);

(async () => {
  try {
    await unionpay.init();
    const res = await unionpay.appTransReq({
      orderId: 'xxx',
      accessType: '0',
      txnAmt: 1,
    });
    console.log(res.tn);
  } catch(e) {
    console.error(e);
  }
})();

网关支付,B2B支付下单

import { Unionpay } from '@ycnt/unionpay';

const pfxPath = __dirname + '/cer/700000000000001_acp.pfx';
const pfxPassword = '000000';
const merId = '777290058160513';
const cer = __dirname + '/cer/verify_sign_acp.cer';
const backUrl = 'http://backUrl';

const unionpay = new Unionpay(pfxPath, pfxPassword, merId, cer, backUrl, true);

(async () => {
  try {
    await unionpay.init();
    const res = unionpay.frontTransReq({
      orderId: 'xxx',
      accessType: '0',
      txnAmt: 1,
      frontUrl: 'https://frontUrl',
      frontFailUrl: 'https://frontFailUrl',
    });
    console.log(res.api);
    console.log(res.params);
  } catch(e) {
    console.error(e);
  }
})();

订单查寻

import { Unionpay } from '@ycnt/unionpay';

const pfxPath = __dirname + '/cer/700000000000001_acp.pfx';
const pfxPassword = '000000';
const merId = '777290058160513';
const cer = __dirname + '/cer/verify_sign_acp.cer';
const backUrl = 'http://backUrl';

const unionpay = new Unionpay(pfxPath, pfxPassword, merId, cer, backUrl, true);

(async () => {
  try {
    await unionpay.init();
    const res = await unionpay.query({
      orderId: 'xxx',
      accessType: '0',
    });
    console.log(res);
  } catch(e) {
    console.error(e);
  }
})();

退款

import { Unionpay } from '@ycnt/unionpay';

const pfxPath = __dirname + '/cer/700000000000001_acp.pfx';
const pfxPassword = '000000';
const merId = '777290058160513';
const cer = __dirname + '/cer/verify_sign_acp.cer';
const backUrl = 'http://backUrl';

const unionpay = new Unionpay(pfxPath, pfxPassword, merId, cer, backUrl, true);

(async () => {
  try {
    await unionpay.init();
    const res = await unionpay.refund({
      orderId: 'xxx',
      accessType: '0',
      txnAmt: 1,
      origQryId: 'xxx',
    });
    console.log(res);
  } catch(e) {
    console.error(e);
  }
})();

验签

后台通知验签,本例使用 koakoa-better-body

import { Unionpay } from '@ycnt/unionpay';
const unionpay = new Unionpay(...);

public webhook = async (ctx: IContext) => {
  try {
    await unionpay.init();
    if (!unionpay.verify(ctx.request.fields)) throw new Error('签名错误');
    if (ctx.request.fields.origQryId) {
      // 这里处理退款
    } else {
      // 这里处理支付成功
    }
    ctx.status = 200;
    ctx.body = 'SUCCESS';
  } catch (e) {
    console.error(e);
    ctx.body = 'FAIL';
  }
};

Summary

/docs/SUMMARY.md