前端在H5页面唤起微信支付(H5支付)

前言

公司产品之前是在公众号之内访问,使用微信JSDK调用微信支付。后需要在浏览器之中访问,调用H5支付。前端使用框架是VUE + VANT

提示:以下是本篇文章正文内容,下面案例可供参考

首先了解什么是H5支付,链接地址:微信H5支付说明文档

一、在支付页面通过后端接口获取H5支付链接

pay() {
    let This = this;
    this.$indicator.open(); //loading...
    let params = {
        proposalNo: this.$route.query.orderNo,
        orderType: '2', // 1投保单 2订单
        payType: this.isWeixin() ? '': '3'
    }
    initiatePayment(params).then(res => {
        if (res.code == 200) {
            This.$indicator.close();
            localStorage.setItem("payVisiable", true)
            location.href = res.data.mwebUrl // 获取支付链接直接跳转微信
        }
    }).catch(error => {
        This.$indicator.close();
        This.$toast(error)
    })
    
}

接下来说下,在过程中遇到的坑!!!

1、使用上边的代码跳转到微信之后,用户支付成功或失败都会跳转到发起支付的这个页面,发起支付的页面地址是https://xxx.xxxxx.cn/channel/a/#/studyH5?policyNo=1111&planCode=2222,支付完成或支付失败后,跳转的页面就变成了 https://xxx.xxxxx.cn/channel/a/#/,问题来了,页面加载不出来了。

解决方法:

//在跳转支付链接后,拼接微信回跳地址
location.href = res.data.mwebUrl + '&redirect_url=' + encodeURIComponent(window.location.href)

重点  跳转地址需要encodeURIComponent

二、支付成功/失败后,在微信跳转会的页面增加弹层,让用户去触发查询保单是否生成的按钮,跳转相应支付成功/失败页面

// 查询支付结果
seachPayResult() {
    let This = this
    if(!localStorage.getItem("outOrderNo")) return
    var orderNo = JSON.parse(localStorage.getItem("outOrderNo"))
    getPayStatus(orderNo).then(res => {
        This.payVisiable = false //弹窗消失
        if(res.status != '1'){
            window.location.href = `${this.$_config.URL.unpaid}?orderNo=${orderNo}&code=Y38&channelCode=${this.$route.query.channelCode}`
        } else {
            localStorage.removeItem("outOrderNo")
            window.location.href = `${this.$_config.URL.success}?orderNo=${orderNo}&code=Y38&channelCode=${this.$route.query.channelCode}`
        }
    }).catch(error => {})
}

总结

以上就是今天要分享的内容,仅是自己在开发中所遇到的问题。在此分享给小伙伴,也是给自己做个笔记。谢谢~~

在嵌套的H5页面中调用微信支付时,用户支付的金额将进入**H5页面后端服务器在微信支付平台配置的商户号**中。具体来说,支付金额的流向由支付下单接口调用时所使用的商户号决定,而不是由小程序或H5页面本身决定。 ### 支付流程中的关键点 在微信支付的流程中,无论是小程序支付H5支付还是其他支付方式,支付金额都会进入下单接口中指定的商户号。这意味着,如果H5页面通过后端接口调用微信支付统一下单接口,且该接口使用的是某个特定商户号的私钥和证书,则支付金额将进入该商户号对应的微信支付账户中。 ### 商户号的配置 - **H5支付**:在微信支付商户平台中,需要为H5支付配置支付域名,且该域名必须与实际的H5页面域名一致。 - **小程序支付**:小程序支付需要绑定商户号,并且在小程序的后台配置支付权限。 ### 调用支付接口的商户号决定资金流向 无论支付页面H5还是小程序,用户支付的金额都会进入调用支付接口时所使用的商户号中。例如,在H5页面中,如果后端服务调用了微信支付的统一下单接口,并使用了商户号A,则支付金额会进入商户号A的账户中。同样,如果小程序调用了自己的支付接口并使用商户号B,则支付金额会进入商户号B的账户中。 ### 支付结果回调 支付完成后,微信会将支付结果通过异步通知的方式发送到商户服务器配置的回调地址(即`notify_url`)。商户服务器需要在收到通知后验证签名,并更新订单状态。这个过程与支付页面H5还是小程序无关,仅与商户号的配置相关。 ### 示例代码 以下是一个简单的H5页面调用支付接口的示例代码,展示了如何通过JavaScript跳转到小程序并传递支付参数: ```javascript var payParam = { "mallMemId": that.mallMemId, "orderNo": that.orderNo, "cardNo": that.cardinfo.cardNo, "orderPayType": 12 }; wx.miniProgram.redirectTo({ url: '/pages/wxpayH5/wxpayH5?payParam=' + JSON.stringify(payParam) }); ``` ### 支付流程总结 1. **H5页面发起支付请求**:用户在H5页面点击支付按钮,H5页面向后端服务器发起支付请求。 2. **后端服务器调用统一下单接口**:后端服务器调用微信支付的统一下单接口,生成预支付交易单,并返回支付所需的参数(如`prepay_id`)。 3. **H5页面跳转到小程序**:H5页面通过微信JSSDK提供的`wx.miniProgram.redirectTo`方法跳转到小程序,并传递支付参数。 4. **小程序调起微信支付**:小程序接收到支付参数后,调用`wx.requestPayment`方法唤起微信支付界面。 5. **用户完成支付**:用户在小程序中完成支付操作,微信支付结果异步通知给商户服务器配置的回调地址。 6. **商户服务器更新订单状态**:商户服务器收到支付结果后,验证签名并更新订单状态。 通过上述流程,可以确保用户支付的金额进入指定的商户号中,而不会因为支付页面H5或小程序而发生变化[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值