前段时间刚接完银联支付,完事后又接了微信支付,前段时间一直急着上线,微信的接入一直没有时间处理,今天我们就来整理一下微信支付的接入方法和要点。
配置:
首先呢微信支付需要通过审核,审核啥的准备工作我就不说了。
这里有个微信配置
这里的授权目录影响着后面的支付能不能成功进行,
本文讲的主要是JS API。
支付流程:
首先用调用微信统一支付接口,接口成功后返回一个预支付的回话标识(prepay_id),这个标识的有效期是2个小时。然后使用这个预支付标识,调用微信内置浏览器的WeixinJSBridge
对象,完成支付。
代码部分:
1.请求预支付标识部分
Dictionary<string, string> param = new Dictionary<string, string>(); //appid param.Add("appid", appid); //商户号 param.Add("mch_id", mch_id); //支付类型 param.Add("trade_type", "JSAPI"); //随机字符串 param.Add("nonce_str", WeiXinPayUtil.GetNoncestr()); //商品描述 param.Add("body", request.Body); //商品详情 param.Add("detail", request.Detail); //回调地址 param.Add("notify_url",""); //商户订单号 param.Add("out_trade_no", ""); //支付金额 param.Add("total_fee", (payfee * 100).ToString("#")); //终端IP param.Add("spbill_create_ip", ""); //Openid param.Add("openid", ""); //签名 param.Add("sign", WeiXinMD5Util.Sign(WeixinTradeConfig.FormatBizQueryParaMapForUnifiedPay(dict), WeixinTradeConfig.key)); string postData = WeixinTradeXmlDocument.DictionaryToXmlString(dict); //获取统一支付接口的数据 var result = WeiXinRequestPlus.PostXmlResponse<GetTradeWeiXinPayResult>(WeixinTradeConfig. WeiXin_Pay_UnifiedPrePayUrl,postData); //准备返回的数据 Dictionary<string, string> requestdict = new Dictionary<string, string>(); requestdict.Add("appId", “appid”); requestdict.Add("package", string.Format("prepay_id={0}", result.Prepay_Id)); //时间戳 requestdict.Add("timeStamp", WeiXinPayUtil.GetTimestamp()); //随机值 requestdict.Add("nonceStr", WeiXinPayUtil.GetNoncestr()); requestdict.Add("signType", "MD5"); TradeWeiXinPayModule weixmodule = new TradeWeiXinPayModule() { PayMethod = TradePayMethods.WeixinPay, Prepayid = result.Prepay_Id, Appid = WeixinTradeConfig.appid, NonceStr = requestdict["nonceStr"], TimeStamp = requestdict["timeStamp"], SerialID = request.SerialIDString, PaySign = WeiXinMD5Util.Sign(WeixinTradeConfig.FormatBizQueryParaMapForUnifiedPay(requestdict), WeixinTradeConfig.key) };
2.关于上面请求预支付用到的一些公用方法,我也不一一列出来了,文件已打包,weixinpayTool.zip
3.收集步骤一返回的参数,生成一段JS,并在微信中打开,
<script> function onBridgeReady() { WeixinJSBridge.invoke( 'getBrandWCPayRequest', { "appId": "@Model.Appid", //公众号名称,由商户传入 "timeStamp": "@Model.Timestamp", //时间戳 "nonceStr": "@Model.Noncestr", //随机串 "package": "@Model.Prepayid", //扩展包 "signType": "MD5", //微信签名算法:MD5 "paySign": "@Model.Paysign" //微信签名 }, function (res) { if (res.err_msg == "get_brand_wcpay_request:ok") { window.location.href = ""; } else { if(confrim("您并未支付成功,是否继续付款?"){ window.location.reload(); }else{ //用户不想付款了 跳走 } } } ); } if (typeof WeixinJSBridge == "undefined") { if (document.addEventListener) { document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); } else if (document.attachEvent) { document.attachEvent('WeixinJSBridgeReady', onBridgeReady); document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); } } else { onBridgeReady(); } </script>
有一点别忘了修改了这段js所在的html必须在微信的授权目录中打开。
如果你在开发中发现本文有什么BUG,敬请留言告诉我~
原文地址:http://www.lorna.com.cn/Articles/Index/b2a594a1-6dff-4fe2-ae2f-0671a915a5d5