前段时间刚接完银联支付,完事后又接了微信支付,前段时间一直急着上线,微信的接入一直没有时间处理,今天我们就来整理一下微信支付的接入方法和要点。

 

配置:

首先呢微信支付需要通过审核,审核啥的准备工作我就不说了。

这里有个微信配置

这里的授权目录影响着后面的支付能不能成功进行,

本文讲的主要是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,敬请留言告诉我~