支付宝 微信 支付

前两天接了微信支付宝的支付,中间遇到了一些问题,简单记录一下前提你需要一个支付的二维码(后台会返回)

用户扫码之后跳到手机页面 需要先在页面里判断扫码的是微信还是支付宝

function IsWeixinOrAlipay(){
  var ua = window.navigator.userAgent;
  //判断是不是微信
  if ( ua.indexOf("MicroMessenger") > 0 ) {
    dealUserInfo();  //微信支付需要先获取用户信息
  }
  //判断是不是支付宝
  if ua.indexOf("Alipayclient") > 0‘‘) {
    aliPay(); // 支付宝支付
  }
}

首先说一下支付宝支付,相比微信支付它比较简单 直接跳转即可 代码如下

 function aliPay() {
                    $.ajax({
                        type: ‘GET‘,
                        url: 支付宝支付的接口,
                        contentType: ‘application/json; charset=utf-8‘,
                        headers: {
                            ‘Content-Type‘: ‘application/json; charset=utf-8‘,
                            ‘Authorization‘: token,
                        },
                        success: function(res) {
                            $(‘body‘).append(res)  // 放入支付宝的表单数据
                            $(‘form‘).attr(‘target‘, ‘_blank‘) // 打开新窗口跳转
                        },
                        error: function(error) {
                           alert(‘失败了‘, error);
                        }
                    })
                },

接下来一起来实现一下微信支付,首先获取用户信息

// 获取地址栏参数
function getQuery(name){ var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return null; }

function dealUserInfo() { const parmas = { str: getQuery("code") // 从地址栏获取code } if (Pay.getQuery("code")) { // 获取用户信息 $.ajax({ type: ‘POST‘, url: "xxx/getWxUser", data: JSON.stringify(parmas), dataType: ‘json‘, contentType: ‘application/json; charset=utf-8‘, headers: { ‘Content-Type‘: ‘application/json; charset=utf-8‘, ‘Authorization‘: token, }, success: function(res) { if (res.code != 200) { alert("微信登录失败,请稍候重试"); setTimeout(() => {
// 微信登陆失败需要再次重定向 window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_uri=xxxl&response_type=code&scope=snsapi_base&state=" + getQuery(‘state‘) + "#wechat_redirect";; }, 2000) return; } // 去支付 Pay.getWechatConfig(); } }); } else {
// 点击支付,第一次支付肯定是不存在openid的,那么就要跳转URL获取code 既重定向 会带回所需code参数
// 重定向参数(appid redirect_uri) APPID是商户的APPID,REDIRECT_URI是页面跳转后跳回来的URL,会带在REDIRECT_URI上
// 如果需要带参数回来可以通过state可以放一些我们自定义的内容 我这里需要带支付码 写法如下
                        window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxx&redirect_uri=xxxx&response_type=code&scope=snsapi_base&state=" + getQuery(‘pay‘) + "#wechat_redirect"; } },
}
}

 接下来需要调用后台接口微信支付

 function getWechatConfig() {
                    const parmas = {
                        str: getQuery(‘pay‘) || getQuery(‘state‘)
                    };
                    $.ajax({
                        type: ‘POST‘,
                        url: "微信支付/wxJsApi",
                        data: JSON.stringify(parmas),
                        dataType: ‘json‘,
                        contentType: ‘application/json; charset=utf-8‘,
                        headers: {
                            ‘Content-Type‘: ‘application/json; charset=utf-8‘,
                            ‘Authorization‘: token,
                        },
                        success: function(res) {
                            if (res.code != 200) {
                                alert("支付失败,请稍候重试");
                            }
                            if (res.data) {
                                if (res.data.type == 0) {
                                    window.location = ‘’; // 支付失败页
                                }
                                weConfig = res.data; // 微信支付所需参数
                                toWechatPay();//去微信支付
                            }
                        },
                        error: function(error) {
                           alert(‘失败了‘, error);
                        }
                    })
                },

最后一步微信支付了

             function toWechatPay() {
                    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 {
                        Pay.onBridgeReady();
                    }
                },
                // 微信支付
               function onBridgeReady() {
                    WeixinJSBridge.invoke(
                        ‘getBrandWCPayRequest‘, {
                            "appId": weConfig.appId, //公众号名称,由商户传入
                            "timeStamp": weConfig.timeStamp, //时间戳,自1970年以来的秒数
                            "nonceStr": weConfig.nonceStr, //随机串
                            "package": weConfig.package,
                            "signType": weConfig.signType, //微信签名方式:
                            "paySign":weConfig.paySign //微信签名
                        },
                        function(res) {
                            if (res.err_msg == "get_brand_wcpay_request:ok") { // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回    ok,但并不保证它绝对可靠。
                                window.location = ‘’;//跳转支付成功页
                            } else {
                                layer.msg("支付失败", {
                                    time: 2000
                                });
                                setTimeout(() => {
                                    window.location = ‘’;//跳转支付失败页
                                }, 2000)
                            }
                        }
                    );
                },

  这样就完成了一个基本的h5支付了 希望能解决你的一些困惑 继续搬砖啦!!!

支付宝 微信 支付

上一篇:泛型数据集


下一篇:在eclipse中创建web项目(非myeclipse)