Skip to content

Instantly share code, notes, and snippets.

@LincolnBurrows
Created June 5, 2018 09:26
Show Gist options
  • Save LincolnBurrows/3df80bb165f79ad0bf4f14f5ea00ec7a to your computer and use it in GitHub Desktop.
Save LincolnBurrows/3df80bb165f79ad0bf4f14f5ea00ec7a to your computer and use it in GitHub Desktop.
APP微信支付统一下单签名
var crypto = require('crypto');
var moment = require('moment');
var xml2js = require('xml2js');
module.exports = {
//生成随机字符串
createNonceStr: function(){
return Math.random().toString(36).substr(2, 15);
},
//生成时间戳
createTimeStamp: function(){
return parseInt(new Date().getTime() / 1000) + '';
},
//生成订单号
createout_trade_no: function(){
var date = moment().format('YYYY MM DD HH mm ss');
var _date = date.split(' ').join('_');
return _date + Math.random().toString().substr(2, 10);
},
//生成终端ip
createspbill_create_ip: function(ip){
return ip.split(':').slice(-1);
},
//object--->string
raw: function(args){
var keys = Object.keys(args);
keys = keys.sort();
var newArgs = {};
keys.forEach(function(key){
newArgs[key] = args[key]
})
var string = ''
for (var k in newArgs) {
string += '&' + k + '=' + newArgs[k]
}
string = string.substr(1)
return string
},
//统一下单sign
unifsign: function(appid, attach, body, mch_id, nonce_str, notify_url, openid, out_trade_no, spbill_create_ip, total_fee, trade_type, key){
var ret = {
appid: appid,
attach: attach,
body: body,
mch_id: mch_id,
nonce_str: nonce_str,
notify_url: notify_url,
openid: openid,
out_trade_no: out_trade_no,
spbill_create_ip: spbill_create_ip,
total_fee: total_fee,
trade_type: trade_type
}
var string = this.raw(ret)
string = string + '&key=' + key
var sign = crypto.createHash('md5').update(string, 'utf8').digest('hex')
return sign.toUpperCase()
},
//小程序调起支付sign
paysign: function(appid, nonceStr, package, signType, timeStamp, key){
var ret = {
appId: appid,
nonceStr: nonceStr,
package: package,
signType: signType,
timeStamp: timeStamp
}
var string = this.raw(ret)
string = string + '&key=' + key
var sign = crypto.createHash('md5').update(string, 'utf8').digest('hex')
return sign.toUpperCase()
},
//获取prepay_id
getXMLNodeValue: function(node_name, xml) {
var tmp = xml.split("<" + node_name + ">")
var _tmp = tmp[1].split("</" + node_name + ">")
var _node = _tmp[0].split('[')
var node = _node[2].split(']')
return node[0]
},
//构建xml
buildXML: function(json){
var builder = new xml2js.Builder();
return builder.buildObject(json);
},
//解析XML
parseXML: function(xml, fn){
var parser = new xml2js.Parser({ trim:true, explicitArray:false, explicitRoot:false });
parser.parseString(xml, fn||function(err, result){});
},
//接收微信反馈信息流
recpipe: function(stream, fn){
var buffers = [];
stream.on('data', function (trunk) {
buffers.push(trunk);
});
stream.on('end', function () {
fn(null, Buffer.concat(buffers));
});
stream.once('error', fn);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment