微信支付:H5吊起支付API,不显示“确认支付输入密码”界面

Posted 腾信@迪克猪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信支付:H5吊起支付API,不显示“确认支付输入密码”界面相关的知识,希望对你有一定的参考价值。

使用公众号进行支付,官方开发帮助文档:

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1

其业务流程如下:

微信内网页支付时序图

按照业务流程进行开发,依据官方的例子(下载地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1),不能弹出选择支付方式及输入密码,页面js代码如下:

              //调用微信JS api 支付
               function jsApiCall()
               {
                   WeixinJSBridge.invoke(
                   \'getBrandWCPayRequest\',
                   <%=wxJsApiParam%>,//josn串
                    function (res)
                    {
                        WeixinJSBridge.log(res.err_msg);
                        alert(res.err_code + res.err_desc + res.err_msg);
                     }
                    );
               }

               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();
                   }
js调用是通过服务端button按钮实现,如:
<asp:Button ID="submit" runat="server" Text="立即支付" OnClientClick="callpay()" style="width:210px; height:50px; border-radius: 15px;background-color:#00CD00; border:0px #FE6714 solid; cursor: pointer;  color:white;  font-size:16px;" />
原因分析:
点击submit按钮,页面直接回传了,页面状态已改变,WeixinJSBridge.invoke未能实现异步调用。
解决办法:
方案一:把submit服务端button更换为html客户端button
方案二:修改js代码,防止服务端button回传,增加如下语句window.event.returnValue = false; 
        function jsApiCall()
        {
            try {
                WeixinJSBridge.invoke(
                    \'getBrandWCPayRequest\',
                    <%= WxJsApiParam %> ,
                    function(res) {
                        WeixinJSBridge.log(res.err_msg);
                        alert(res.err_code + res.err_desc + res.err_msg);
                    }
                );
            } catch (e) {
                alert(e);
            }
        }

        function callpay()
        {
            try {
                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();
                }
            } catch (e) {
                alert(e);
            }
            window.event.returnValue = false;
            return false;
        }

效果展示:

IMG_7043IMG_7044IMG_7045IMG_7046

以上是关于微信支付:H5吊起支付API,不显示“确认支付输入密码”界面的主要内容,如果未能解决你的问题,请参考以下文章

asp.net core 微信支付工具类(H5支付,扫码支付,公众号支付,app支付)之2-H5支付

iOS 支付宝微信支付的集成记录

企业号微信支付 公众号支付 H5调起支付API示例代码 JSSDK C# .NET

在微信中如何调用支付宝接口

微信H5支付接口开发,安卓调用不了,苹果可以正常调用?

Api看看PHP是如何实现微信H5支付的?