版权声明:本文为博主原创文章,未经博主许可不得转载。概述目前微信官方的微信支付demo没有node版本。这几天一直在折腾微信支付,记录下来做个笔记;参考微信支付官方文档签名微信支付的签名是用MD5加密的。下面统一微信支付的签名算法。命令:先创建一个wechatPay.js文件(包含签名算法,统一命令等)/****导入依赖包**/varconfig=require('../config');varrequest=require("request");varmoment=require('moment'),_=require('underscore'),https=require('https'),fs=require('fs'),URL=require('url'),CryptoJS=require("crypto-js"),jsontoxml=require('jsontoxml'),xml2js=require('xml2js');varcrypto=require('crypto');/****签名算法**/vargenerateSign=exports.genrateSign=function(obj){vartmpObj={};//获取一个非空键_.each(obj,function(value,key){if(value){tmpObj[key]=value;}});varkeys=_.keys(tmpObj);//键字典排序keys=keys.sort();vartmpArr=[];_.each(keys,function(key){tmpArr.push(key+"="+tmpObj[key])})tmpArr.push("key="+config.wxmcn.mcnsecret);////key在微商平台(pay.weixin.qq.com)->账户设置-->API安全-->密钥设置vartmpStr=tmpArr.join('&');//拼接字符串varsign=crypto.createHash('md5').update(tmpStr,'utf8').digest('hex');returnsign.toUpperCase();}//统一排序,获取code_url稍后生成二维码varpaysign=exports.paysign=function(params,callback){if(_.isEmpty(params)){callback('参数不能是空的');}varcurrentTime=moment().valueOf().toString();varnonce_str=[config.wxmcn.mcnid,currentTime].join('');//随机字符串varmch_billno=[config.wxmcn.mcnid,moment().format("YYYYMMDD"),moment().unix()].join('');//订单号varret={appid:config.H5.appid,body:params.body,//产品描述attach:params.attach,//用户身份intidmch_id:config.wxmcn.mcnid,//商家IDnonce_str:nonce_str,//随机字符串notify_url:params.notify_url,//通知地址out_trade_no:mch_billno,//商户订单号spbill_create_ip:params.spbill_create_ip,//终端iptotal_fee:params.total_fee,//价格金额trade_type:params.trade_type//交易类型};if(!_.isEmpty(params.openid)){_.extend(ret,{openid:params.openid});}varsign=generateSign(ret);_.extend(ret,{sign:sign});varbody=jsontoxml(ret);body='
