zoukankan      html  css  js  c++  java
  • .NET接入微信支付(一)JS API接入 V3

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

     .NET接入微信支付(一)JS API接入 V3    -文章内容来自www.lorna.com.cn,原创文章未经许可请勿转载

    配置:

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

    这里有个微信配置

    .NET接入微信支付(一)JS API接入 V3    -文章内容来自www.lorna.com.cn,原创文章未经许可请勿转载

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

    本文讲的主要是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

  • 相关阅读:
    Linux模拟网络延迟、丢包等
    TestLink汉化操作
    onems设备管理系统(TR-069和OMA)
    Installation Guide Ubuntu 16.04
    Configure GenieACS
    Linux下的tar压缩解压缩命令详解
    genieacs Installation on Ubuntu14.04
    Pyqt中富文本编辑器
    安装MongoDB
    到底什么是贝叶斯?
  • 原文地址:https://www.cnblogs.com/hx764208769/p/4367887.html
Copyright © 2011-2022 走看看