Created
June 5, 2018 09:26
-
-
Save LincolnBurrows/3df80bb165f79ad0bf4f14f5ea00ec7a to your computer and use it in GitHub Desktop.
APP微信支付统一下单签名
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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