UNPKG

rapid-swiftpass

Version:

SwiftPass module

88 lines (79 loc) 2.54 kB
/** * Copyright (c) 2017 Lucky Byte, Inc. */ const debug = require('debug')('swiftpass'); const crypto = require('crypto'); const moment = require('moment'); const winston = require('winston'); const utils = require('../lib/utils'); const post = require('../lib/post'); /** * 根据商户订单号查询订单信息 * * 参数: * dest_url: 威富通服务地址 * params: JSON,包含下列的 keys: * merno: 威富通平台内商户编号 * sign_key: 威富通商户签名密钥 * order_id: 平台内订单号,32 字符内,唯一 * * 返回: * 成功返回: { * reqt: 请求报文 * resp: 响应报文 * succ: true * } * 失败返回: { * reqt: 请求报文 * resp: 响应报文 * succ: false * errmsg: 错误信息 * } */ const exchange = async (dest_url, params) => { if (!dest_url || !params) { throw new Error('交易查询请求参数无效'); } const required = [ 'merno', 'sign_key', 'order_id' ] for (let i = 0; i < required.length; i++) { if (!params[required[i]]) { throw new Error(`交易查询请求缺少字段[${required[i]}]`); } } let reqt_json = { service: 'unified.trade.query', version: '2.0', charset: 'UTF-8', sign_type: 'MD5', nonce_str: crypto.randomBytes(16).toString('hex'), mch_id: params.merno, out_trade_no: params.order_id, } reqt_json.sign = utils.gen_sign(reqt_json, params.sign_key); winston.info('威富通交易查询请求报文:', JSON.stringify(reqt_json, null, 2)); const resp_data = await post(dest_url, reqt_json); const resp_json = await utils.parse_resp_xml(resp_data); winston.info('威富通交易查询响应报文:', JSON.stringify(resp_json, null, 2)); if (!utils.verify_sign(resp_json, params.sign_key)) { throw new Error('验证威富通交易查询响应报文签名失败'); } winston.info('验证威富通交易查询响应报文签名通过'); if (parseInt(resp_json.result_code) != 0) { return { reqt: reqt_json, resp: resp_json, succ: false, errmsg: resp_json.err_msg || '交易失败' } } return { reqt: reqt_json, resp: resp_json, succ: true, }; } module.exports = { exchange: exchange, }