前端在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页面中集成微信支付,主要依赖于JSAPI接口来实现。当用户访问由商户提供的H5页面时,该页面需调用微信支付所提供的JSAPI接口以启动微信支付模块完成交易过程[^1]。 具体来说,在开发过程中需要先获取预支付订单信息,这通常涉及到服务器端向微信支付平台发起请求获得必要的参数,如`prepay_id`等。之后前端利用这些参数并通过JavaScript API `wx.chooseWXPay()` 来唤起用户的微信客户端进行支付操作[^3]。 ```javascript // 前端代码片段用于调用微信支付 WeixinJSBridge.invoke( 'getBrandWCPayRequest', { "appId": "", // 公众号名称,由商户传入 "timeStamp": "", // 时间戳,自1970年以来的秒数 "nonceStr": "", // 随机串 "package": "", // 统一支付接口返回的 prepay_id 参数值,提交格式如:prepay_id=*** "signType": "", // 签名方式,默认为'SHA1',使用新版支付需传入'MD5' "paySign": "" // 支付签名 }, function(res){ if(res.err_msg == "get_brand_wcpay_request:ok"){ alert('支付成功'); }else{ alert('支付失败'); } } ); ``` 值得注意的是,如果是在微信环境之外(即非微信内置浏览器),则应采用统一下单接口得到`mweb_url`链接地址,并引导用户跳转至此URL来进行安全支付处理[^2]。 #### 支付支付集成方法 针对支付支付,则可以通过其官方提供的SDK或直接调用相应的RESTful API服务来达成目的。一般情况下会经历以下几个环节: - **创建订单**:应用程序发送HTTP POST请求给支付宝网关,传递商品详情以及回调通知等相关配置; - **重定向到支付页**:依据上一步骤所取得的结果数据构建HTML表单自动提交动作或者直接构造URL让客户点击前往付款界面; - **接收异步消息**:设置好服务器监听来自支付宝的通知以便及时更新本地数据库状态记录。 以下是简化版的PHP示例代码展示了如何初始化一笔新的支付宝交易: ```php <?php // PHP SDK 初始化实例化对象... $alipaySdk = new AlipayTradeService($config); // 构建业务请求参数数组 $data = array ( 'out_trade_no' => uniqid(), // 商家订单编号 'total_amount' => $_POST['amount'], // 订单金额 'subject' => $_POST['title'] // 商品主题描述 ); // 调用网页快捷支付接口wap/alipay.trade.wap.pay $result = $alipaySdk->pagePay($data, 'https://yourdomain.com/callback'); header("Location:" . $result); // 将用户导向至支付支付页面 ?> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值