coa-wx-pay-isv
Version:
轻量的的微信支付SDK服务商版 for Node.js
144 lines (143 loc) • 6.99 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CoaWxPayIsvService = void 0;
const coa_error_1 = require("coa-error");
const coa_helper_1 = require("coa-helper");
const coa_secure_1 = require("coa-secure");
const coa_xml_1 = require("coa-xml");
class CoaWxPayIsvService {
constructor(bin) {
this.bin = bin;
}
// 解码微信返回的信息
async decodeInfo(encodeString) {
const keyDecode = coa_secure_1.secure.md5(this.bin.config.key);
const xmlData = coa_secure_1.secure.aes_decode(encodeString, keyDecode);
return (await coa_xml_1.xml.decode(xmlData)) || {};
}
// 获取支付参数
getPaymentParams(data) {
const prepayId = data.prepayId ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少prepayId');
const param = {
appId: data.appWxaId ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少appWxaId'),
timeStamp: coa_helper_1._.toString(coa_helper_1._.toInteger(coa_helper_1._.now() / 1000)),
nonceStr: this.bin.generateNonceString(),
signType: 'MD5',
package: 'prepay_id=' + prepayId,
};
param.paySign = this.bin.generateSignature(param);
delete param.appId;
param.prepayId = prepayId;
return param;
}
// 微信支付统一下单
async unifiedOrder(data) {
const param = {
appid: this.bin.config.appId,
mch_id: this.bin.config.mchId,
nonce_str: this.bin.generateNonceString(),
sub_appid: data.appWxaId ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少appWxaId'),
sub_mch_id: data.subMchId ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少subMchId'),
sub_openid: data.openId ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少openId'),
body: data.body || '订单' + data.orderId,
out_trade_no: data.orderId ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少orderId'),
total_fee: data.price ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少order price'),
spbill_create_ip: '1.1.1.1',
notify_url: `${this.bin.config.notifyPay}.${data.accountId || coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少accountId')}.${data.orderId}`,
trade_type: 'JSAPI',
};
const body = await this.bin.toSignedXmlParams(param);
return await this.bin.post('/pay/unifiedorder', body);
}
// 退款
async payRefund(data) {
const rawData = data.rawData || coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '数据不存在');
const accountId = data.accountId || coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少账户ID');
const refundId = data.refundId ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少退款ID');
const orderId = data.orderId || coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少订单ID');
const totalPrice = data.totalPrice ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少总价格');
const refundPrice = data.refundPrice ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少退款价格');
const param = {
appid: this.bin.config.appId,
mch_id: this.bin.config.mchId,
nonce_str: this.bin.generateNonceString(),
sub_appid: rawData.subAppid ||
rawData.sub_appid ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少rawData.subAppid,暂时无法退款'),
sub_mch_id: rawData.subMchId ||
rawData.sub_mch_id ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少rawData.subMchId,暂时无法退款'),
out_trade_no: rawData.outTradeNo ||
rawData.out_trade_no ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少rawData.outTradeNo,暂时无法退款'),
out_refund_no: refundId,
total_fee: totalPrice,
refund_fee: refundPrice,
notify_url: `${this.bin.config.notifyRefund}.${accountId}.${orderId}`,
};
const body = await this.bin.toSignedXmlParams(param);
return await this.bin.post('/secapi/pay/refund', body, {
httpsAgent: this.bin.httpsAgent,
});
}
// 查询订单状态
async queryOrder(data) {
const param = {
appid: this.bin.config.appId,
mch_id: this.bin.config.mchId,
nonce_str: this.bin.generateNonceString(),
sub_appid: data.appWxaId ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少appWxaId'),
sub_mch_id: data.subMchId ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少subMchId'),
out_trade_no: data.orderId ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少orderId'),
};
const body = await this.bin.toSignedXmlParams(param);
return await this.bin.post('/pay/orderquery', body);
}
// 查询订单退款状态
async queryRefund(data) {
const param = {
appid: this.bin.config.appId,
mch_id: this.bin.config.mchId,
nonce_str: this.bin.generateNonceString(),
sub_appid: data.appWxaId ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少appWxaId'),
sub_mch_id: data.subMchId ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少subMchId'),
out_trade_no: data.orderId ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少orderId'),
out_refund_no: data.refundId ||
coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少refundId'),
};
const body = await this.bin.toSignedXmlParams(param);
return await this.bin.post('/pay/refundquery', body);
}
// 下载账单
async downloadBill(data) {
const param = {
appid: this.bin.config.appId,
mch_id: this.bin.config.mchId,
nonce_str: this.bin.generateNonceString(),
bill_date: data.date || coa_error_1.CoaError.message('CoaWxPayIsv.MissingField', '缺少date'),
bill_type: 'ALL',
};
const body = await this.bin.toSignedXmlParams(param);
return await this.bin.post('/pay/downloadbill', body, {
maxBodyLength: 1024 * 1024 * 1024,
maxRedirects: 1024 * 1024 * 1024,
});
}
}
exports.CoaWxPayIsvService = CoaWxPayIsvService;