H5微信支付、支付宝支付

准备工作

1.绑定域名
登录微信公众平台 –> 公众号设置 –> 功能设置 –> 填写“JS接口安全域名”

2.JS-SDK使用:
在页面引入JS文件 :https://res.wx.qq.com/open/js/jweixin-1.2.0.js

3.配置微信网页授权

官方授权url如下,各参数意义参考: 微信网页授权,或者下方图片

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。
H5微信支付、支付宝支付插图
参数说明

一、微信支付

1.新建aaa.html,作为授权页面(其实就是一个授权url),授权成功后会根据(redirect_uri)跳转到指定地址,如bbb.html(放在服务器上的bbb.html)

H5微信支付、支付宝支付插图(1)
image.png
var redirect_uri = encodeURIComponent('bbb.html);
      window.location.href =
        'https://open.weixin.qq.com/connect/oauth2/authorize?appid=******38bc878811c&redirect_uri=' + redirect_uri +
        '&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect';

2.在当前bbb.html的url上会有授权后返回的code参数,取出code值作为参数调取后端自定义接口,获取返回值openid以供支付时使用等

const code = getQueryString("code");  //根据当前url获取code作为参数  
const params = {code: code}
        $.ajax({
            url: base_url + '*********',
            type: 'post',
            data: JSON.stringify(params),
            dataType: 'json',
            contentType: 'application/json;charset=UTF-8',
            success: function (res) {
                if (res.code == 0) {
                    var openid=res.data.openid.openid);//获取openid
                }
            }
        })

3.取当前支付页面的地址(?号以前的),此地址前提在微信商户平台添加好,作为参数调取后端自定义接口,获取微信的返回值来配置wx.config

const wxInitParams = {  //获取当前页面路径作为参数传参,根据返回值配置微信
     url: location.href.split('?')[0],
   }
   $.ajax({
     url: base_url + '/weChatH5/authorized/weChatH5/verifyConfigForWeChatH5',
     type: 'post',
     data: JSON.stringify(wxInitParams),
     contentType: 'application/json;charset=UTF-8',
     success: function (res) {
       if (res.code == 0) {
         const shareobj = {
           'appId': '*********c878811c',
           'timestamp': res.data.content.timestamp,
           'nonceStr': res.data.content.nonceStr,
           'signature': res.data.content.signature,
           'jsApiList': ['chooseWXPay']
         }
         wxInit(shareobj)
       }
     }
   })


   function wxInit(shareobj) {
     wx.config({
       debug: false,
       appId: 'wxf3b1638bc878811c',
       nonceStr: shareobj.nonceStr,
       signature: shareobj.signature,
       timestamp: shareobj.timestamp,
       jsApiList: ['chooseWXPay']
     });
   }

4.先调取后端自定义接口,获取返回值,再在wx.ready中调 wx.chooseWXPay微信支付

if (val == 'wx') { //判断选择微信支付还是其他支付方式,自行判断
         const params = {
           id: window.sessionStorage.getItem('courseId'), //页面初始加载带的id
           phone: phone, //手机号
           smsCode: code, //验证码
           channel: 'wxPay', //支付方式 wxPay微信 aliPay支付宝
         }
         $.ajax({
           url: base_url + '/weChatH5/authorized/weChatH5/payMoneyForWeChatH5',
           type: 'post',
           headers: {
             openid: window.sessionStorage.getItem('openid'),
             appToken: window.sessionStorage.getItem("appToken")
           },
           data: JSON.stringify(params),
           contentType: 'application/json;charset=UTF-8',
           success: function (res) {
             if (res.code == 0) {
               const poas = res.data.content;
               wx.ready((res) => {
                 wx.chooseWXPay({
                   'appId': poas.appId,
                   'timestamp': poas.timeStamp,
                   'nonceStr': poas.nonceStr,
                   'package': poas.package,
                   'signType': poas.signType,
                   'paySign': poas.paySign,
                   success: function (res) {
                     if (res.errMsg == 'chooseWXPay:ok') {
                       window.location.href = 'paySuccess.html'
                     }
                   },
                   cancel: function (err) {
                     Toast('支付失败')
                   }
                 })
               });
               wx.error(function (res) {
                 Toast("wx.error")
               });
             } else {
               Toast(res.msg);
             }
           }
         })
       }

注意:这样就可以支付成功了,支付成功后会跳转自定义的paySuccess.html页面,此方法只是微信支付的思路流程

二、支付宝支付

1.支付宝支付比微信简单多了,也许是后端都配置好了,支付宝支付要在非微信浏览器里面才可以

H5微信支付、支付宝支付插图(2)
image.png

2.根据后端自定义的接口传相应的参数(比如用户id、手机号、价格、支付方式等),成功后从返回值中取出类似form的表单的地址,这个就是拉起支付宝的东西,将此插入到当前页,打开就可以看到支付宝被拉起了

H5微信支付、支付宝支付插图(3)
image.png

3.下面就是此页面所有的代码

$(function () {
        function getQueryString(name) { //去url上的id
            var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
            var r = window.location.search.substr(1).match(reg);
            if (r != null) return unescape(r[2]);
            return null;
        }
        var phone = getQueryString('phone'); //手机号
        var code = getQueryString('code'); //验证码
        var id = getQueryString('id'); //课程id
        var openid = getQueryString('openid');
        var appToken = getQueryString('appToken');

        //判断是否在微信浏览器
        var ua = navigator.userAgent.toLowerCase();
        var isWeixin = ua.indexOf('micromessenger') != -1;
        if (!isWeixin) {
            const params = {
                id: id, //页面初始加载带的id
                phone: phone, //用户手机号
                smsCode: code, //用户验证码
                channel: 'aliPay', //支付方式 wxPay微信 aliPay支付宝
            }
            /* 支付宝支付,传递后台要求的参数,返回值是一个form表单即唤起支付宝的地址 */
            $.ajax({
                url: base_url + '******/payMoneyForWeChatH5',
                type: 'post',
                dataType: "html",
                headers: {
                    openid: openid,
                    appToken: appToken
                },
                data: JSON.stringify(params),
                contentType: 'application/json;charset=UTF-8',
                success: function (res) {
                    var res = JSON.parse(res);
                    if (res.code == 0) {
                        $('body').append(res.data.content[0].aliString);
                        $("form").attr("target", "_blank");
                    } else {
                        alert(res.msg)
                    }
                },
            })
        }
    })

4哈哈 。。。大功告成

链接:H5微信分享可以参考H5微信分享

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
移动端H5调用微信支付宝支付是一种简单方便的支付方式。用户在网页中选择微信或支付宝支付后,会被引导到微信或支付宝的支付页面,输入支付密码或确认支付即可完成支付。对于商家来说,只需在网页中添加相应的支付接口和配置相关信息,就可以实现H5调用微信支付宝支付功能。这种支付方式适用于各类移动端应用,如电商平台、小程序、线下商户等。 在实现H5调用微信支付宝支付的过程中,需要注意保障支付安全和用户隐私。商家需要通过微信支付宝的官方平台获得相关权限和密钥,确保支付接口的可信性和安全性。同时,还需要遵守相关的法律法规和隐私政策,保护用户的个人信息和支付数据。另外,商家还可以通过设置不同的支付方式、优惠券等方式来吸引用户,提高支付转化率和用户满意度。 在移动端H5调用微信支付宝支付的过程中,还需要考虑支付的实时性和用户体验。商家需要保证支付的及时性和可靠性,避免因网络延迟或其他原因导致支付失败或出现异常情况。同时,还需要考虑用户的支付习惯和支付环境,提供简洁明了的支付流程和友好的界面设计,提高用户支付的便捷性和舒适度。通过合理规划和技术实现,移动端H5调用微信支付宝支付可以成为一种便捷、安全、高效的支付方式,为用户和商家带来更好的支付体验和商业价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值