UNPKG

coa-wx-pay-isv

Version:

轻量的的微信支付SDK服务商版 for Node.js

144 lines (143 loc) 6.99 kB
"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;