zoukankan      html  css  js  c++  java
  • 微信支付: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="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

  • 相关阅读:
    话说地址栏的URL的最大长度
    程序员,我拿什么来拯救自己
    把女友升级为老婆的时候发生的BUG
    一个精典asp程序引发的错误引起的思考
    [转]提高 Web Service 数据传输效率的基本方法
    整理发布html的select控件实用js操作
    asp.net简单实现导出excel报表
    c#简单实现生成csv文件
    利用sql server直接创建日历
    jQuery学习笔记:效果
  • 原文地址:https://www.cnblogs.com/zsy/p/5336651.html
Copyright © 2011-2022 走看看