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

来源:互联网 发布:战地之王透视源码 编辑:程序博客网 时间:2024/05/17 07:43

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

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

  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 0
原创粉丝点击