UNPKG

@jashine/unipay-poslink

Version:

银联: 扫码支付-被扫

120 lines (107 loc) 3.86 kB
/** * Created by luckyriko on 2022/1/14. * 银联被扫业务文档 https://open.chinaums.com/resources/?code=131545707826425&url=584a04fe-3c66-466e-93c5-fcb01426245d */ "use strict"; 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; };