在开发微信支付过程遇到的坑

   做了一个关于微信支付的项目,说到支付,直接就去看了微信官方提供的文档。

  看过之后,一头雾水,为什么呢,因为没有看懂他的步骤,不像网页授权的步骤那么详细。在不断百度中,终于知道了,开发步骤,好开始写代码

  1.首先需要进入微信公众号,进行设置

      a.设置回调域名

      b.需要设置支付授权目录。

  2.设置完成后,下载了官方提供的demo代码,然后进行修改。

    下面说下步骤:

         <a> 首先获取用户的code.根据提供的接口

         <b>然后根据code获取到openid

         <c>根据openid等参数,然后根据统一下单的接口,获取到 prepay_id.

         <d>然后根据prepay_id 进行构造参数:

                myH5Data.SetValue("appId", WxPayConfig.APPID);
                myH5Data.SetValue("timeStamp", WxPayApi.GenerateTimeStamp());
                myH5Data.SetValue("nonceStr", WxPayApi.GenerateNonceStr());
                myH5Data.SetValue("package", "prepay_id=" + myData.GetValue("prepay_id"));
                myH5Data.SetValue("signType", "MD5");
                myH5Data.SetValue("paySign", myH5Data.MakeSign()); 

    注意,             myH5Data.SetValue("paySign", myH5Data.MakeSign()); ,这行代码,必须在最后面,不然设置签名是不对的。

      构造完成参数后,需要使用JS在前端页面中写:

               <script type="text/javascript">
                 function jsApiCall()
               {
                   WeixinJSBridge.invoke(
                   'getBrandWCPayRequest',
                   <%=wxJson%>,//josn串,wxjson就是上面的参数,使用的wx提供的一个类 wxData,直接转换成JSon
                    function (res)
                    {if (res.err_msg == "get_brand_wcpay_request:ok") {
                           
                            alert("成功");
                             
                        }     // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回    ok,
                        else {
                            
                          
                        }
                            
                    });
               }
                 function callpay()
               {
               
                
                   if (typeof(WeixinJSBridge) == "undefined")
                   {
                  
                       if (document.addEventListener)
                       {
                           document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
                       }
                       else if (document.attachEvent)
                       {
                           document.attachEvent('WeixinJSBridgeReady', jsApiCall);
                           document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
                       }
                   }
                   else
                   {
                       jsApiCall();
                   }
               }
  </script> 

        好这样,算是完成了,然后运行。

       ------坑-------坑------坑-------来了!!!!

       根据官方提供的代码,发信前面一切正常,但是前端就是调用不出来支付的界面。

      然后上了论坛,找,发现很多人都是这样的问题,在论坛中发现了解决的办法:

    <asp:Button ID="submit" runat="server" Text="立即支付" OnClientClick="javascript:callpay()" style="width:210px; height:50px; background-color:#00CD00; border:0px #FE6714 solid; cursor: pointer;  color:white;  font-size:20px;" />

   这行代码是管饭提供的:但是需要在  OnClientClick="javascript:callpay(),后面加上:return false;

  好,以为这样就可以解决问题了,但是,依旧不行。

  然后看论坛,继续查找,发现问题了

  论坛说:设置支付授权目录必须跟服务器的地址是一模一样,是区分大小写的URL,所以,继续修改。

  但是,依旧是有问题的。然后论坛没有了啊,都说可以,但是我的就是不可以。

 最后,最后,终于知道了问题的所在:

    原来在回调函数的url也必须跟支付授权的目录是一致的,这才解决了问题。希望大家以后能够小心这些 BigBig坑啊!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值