一,首先肯定是需要细看微信app支付开发者文档,重点是接口规则,APP支付业务流程。流程里面共有四个端:微信app客户端,商户自己开发的app客户端,商户app服务器端,微信服务器端。那么商户服务器端需要做的工作,第一步就是统一下单,详看API列表统一下单 。
贴上第一段统一下单的代码
exports.appPay = function (参数自定,callback) {
var appid = "微信商户平台appid";
var mch_id = "微信支付分配的商户号";
var nonce_str = randomString(30),方法会贴出,这个随机字符串最好存贮进数据库,支付流程最后的查询支付状态需要传参;
var total_fee = 总价;
var notify_url = 支付成功之后,接收微信服务器的回调信息(微信数据传递都是xml格式,所以路由设置里应该要设置可以接收xml数据,下面会提到);
var body = 商品描述;
var trade_type="APP";
var spbill_create_ip=客户端ip,类似192.168.10.105;
var out_trade_no=不重复随机订单号(时间戳+随机字符串,我只用了随机字符串);
var timeStamp=这个不是统一下单必传参数,这个是二次签名的时间戳,以秒为单位;
var sign=paysignApp(appid,body,mch_id,nonce_str,notify_url,out_trade_no,spbill_create_ip,total_fee,trade_type)这一步是第一次签名,签名规则按照文档来,签名成功之后,编成xml格式的数据,向微信服务器发送https请求,若成功,微信服务器会返回xml格式数据,解析之后会得到预付交易会话标识prepay_id;
var formData = "<xml>";
formData += "<appid>"+appid+"</appid>"; //appid
formData += "<body>"+body+"</body>";
formData += "<mch_id>"+mch_id+"</mch_id>"; //商户号
formData += "<nonce_str>"+nonce_str+"</nonce_str>"; //随机字符串,不长于32位。
formData += "<notify_url>"+notify_url+"</notify_url>";
formData += "<out_trade_no>"+out_trade_no+"</out_trade_no>";
formData += "<spbill_create_ip>"+spbill_create_ip+"</spbill_create_ip>";
formData += "<total_fee>"+total_fee+"</total_fee>";
formData += "<trade_type>"+trade_type+"</trade_type>";
formData += "<sign>"+sign+"</sign>";//第一次签名的sign
formData += "</xml>";