@jashine/unipay-poslink
Version:
银联: 扫码支付-被扫
120 lines (107 loc) • 3.86 kB
JavaScript
/**
* Created by luckyriko on 2022/1/14.
* 银联被扫业务文档 https://open.chinaums.com/resources/?code=131545707826425&url=584a04fe-3c66-466e-93c5-fcb01426245d
*/
;
const { encodeParams, sign, signVerify, copy } = require("./utils/utl");
const axios = require("axios");
const dayjs = require('dayjs');
module.exports = unipayPosLink;
/**
*
* @param {Object} opts
* @param {String} opts.gateWay 请求地址
* @param {String} opts.appid appid
* @param {String} opts.appkey appkey
* @constructor
*/
function unipayPosLink(opts) {
if (!opts.gateWay) throw new Error('need gateWay param!');
if (!opts.appid) throw new Error('need sub_appid param!');
if (!opts.appkey) throw new Error('need sub_appid param!');
this.gateWay = opts.gateWay;
this.appid = opts.appid;
this.appkey = opts.appkey;
}
const props = unipayPosLink.prototype;
props.generateAuthorization = function(params) {
return sign(this.appid, this.appkey, params);
};
/**
* 测试
*/
props.test = async function(opts) {
return 'hello world!'
};
/**
* 用户出示付款码支付
* @param {Object} opts
* @param {String} opts.requestTimestamp 报文请求时间
* @param {String} opts.merchantCode 商户号
* @param {String} opts.terminalCode 终端号
* @param {Number} opts.transactionAmount 支付总金额,单位:分
*/
props.pay = async function(opts) {
opts.requestTimestamp = dayjs().format("YYYY-MM-DD HH:mm:ss");
const authorization = this.generateAuthorization(opts);
const { data } = await axios.post(this.gateWay+'pay', opts, {headers: {Authorization: authorization}});
return data;
};
/**
* 撤销支付
* @param {Object} opts
* @param {String} opts.requestTimestamp 报文请求时间
*/
props.voidpayment = async function(opts) {
opts.requestTimestamp = dayjs().format("YYYY-MM-DD HH:mm:ss");
const authorization = this.generateAuthorization(opts);
const { data } = await axios.post(this.gateWay+'voidpayment', opts, {headers: {Authorization: authorization}});
return data;
};
/**
* 退款
* @param {Object} opts
* @param {String} opts.requestTimestamp 报文请求时间
*/
props.refund = async function(opts) {
opts.requestTimestamp = dayjs().format("YYYY-MM-DD HH:mm:ss");
const authorization = this.generateAuthorization(opts);
const { data } = await axios.post(this.gateWay+'refund', opts, {headers: {Authorization: authorization}});
return data;
};
/**
* 交易查询
* @param {Object} opts
* @param {String} opts.requestTimestamp 报文请求时间
*/
props.query = async function(opts) {
opts.requestTimestamp = dayjs().format("YYYY-MM-DD HH:mm:ss");
const authorization = this.generateAuthorization(opts);
const { data } = await axios.post(this.gateWay+'query', opts, {headers: {Authorization: authorization}});
return data;
};
/**
* 退款查询
* @param {Object} opts
* @param {String} opts.requestTimestamp 报文请求时间
*/
props.queryRefund = async function(opts) {
opts.requestTimestamp = dayjs().format("YYYY-MM-DD HH:mm:ss");
const authorization = this.generateAuthorization(opts);
const { data } = await axios.post(this.gateWay+'query-refund', opts, {headers: {Authorization: authorization}});
return data;
};
/**
* 自定义请求接口
* @param {Object} opts
* @param {String} opts.requestTimestamp 报文请求时间
*/
props.request = async function(opts) {
opts.requestTimestamp = dayjs().format("YYYY-MM-DD HH:mm:ss");
if (!opts.msgType) throw new Error('need msgType param!');
let msgType = opts.msgType;
delete opts.msgType;
const authorization = this.generateAuthorization(opts);
const { data } = await axios.post(this.gateWay+msgType, opts, {headers: {Authorization: authorization}});
return data;
};