此文章为记录学习应用。如有舛误,烦请各位大佬指教(鞠躬
介绍
h5 页面,集成了
- 微信浏览器环境领取(
wx_pub
) - 支付宝手机网站领取(
alipay_wap
) - 微信小程序领取(
wx_lite
) - app 领取(与我司 app 交互,由 app 调起微信 app
wx
/ 支付宝 appalipay
领取)
领取流程
先附上文档👉PING++ H5 SDK 接入指南
大抵流程如下:
筹备后端接口参数 => 调起后端接口获取 ping++
charge
对象 => 拿 charge
对象调用ping++ sdk
=> 获取ping++
领取后果 / 解决领取后果
环境判断
因为是 h5 嵌在各种平台外面,所以须要判断以后是哪个平台。至于怎么判断的,自行解决哈哈哈哈
created() {
const channels = [
{
icon: 'ic_wechat',
title: '微信领取',
tips: '举荐装置微信 5.0 及以上版本的用户应用',
name: 'wx_pub'
},
{
icon: 'ic_alipay',
title: '支付宝领取',
tips: '举荐有支付宝账户的用户应用',
name: 'alipay_wap'
},
]
if(this.$env.wechatApplet) {
this.paySubChannel = 'wx_lite' // 默认理论领取渠道
this.paySubChannels = [] // 理论可选的领取渠道数组} else if(this.$env.wechat) {
this.paySubChannel = 'wx_pub'
this.paySubChannels = channels.slice(0, 1)
} else if(this.$env.alipay) {
this.paySubChannel = 'alipay_wap'
this.paySubChannels = channels.slice(1)
} else { // app
this.paySubChannel = ''
this.paySubChannels = channels
}
},
筹备后端接口参数以获取 ping++
charge
对象
在调用后盾接口获取 ping++
charge
对象前,一些不同渠道领取的所需参数要筹备好。
tips:
params
是申请后端接口须要的参数对象
wx_pub
领取
if(this.paySubChannel === 'wx_pub') {params.openId = getOpenId() // 对于 openId 如何获取本篇不探讨
}
alipay_wap
领取
因为 ping++
会在 successUrl
前面增加参数 ?result=success/fail
等等,导致咱们无奈在这里先配置参数:
params.successUrl = `${window.location.origin}/#/payResult?serialNo=${this.payInfo?.serialNo}`
所以采纳 动静路由 的模式去传递领取后果页所需的参数:
if(this.paySubChannel === 'alipay_wap') {params.successUrl = `${window.location.origin}/#/payResult/${this.payInfo?.serialNo}/${this.otherProp}`
}
路由配置
{
path: '/payResult/:serialNo/:otherProp',
name: 'payResult',
component: () => import('views/common/payResult/index.vue'),
meta: {title: '缴费后果'}
},
而后咱们在领取后果页就能够通过 this.$route.params
获取到 serialNo
otherProp
这两个参数。所以你的业务如果须要带 token
能够间接加个 /:token
。查看文档# 动静路由获取更多对于动静路由的常识 o(~▽~) ブ
wx_lite
领取
背景:h5
嵌在小程序 webview
里边
h5
代码:
// 先引入 wx sdk
import wx from 'weixin-js-sdk'
if(this.paySubChannel === 'wx_lite') { // 间接重定向到小程序领取页
wx.miniProgram.redirectTo({url: `/pages/webview/pay?params=${JSON.stringify(params)}`
})
}
而后所有流程交给小程序本人解决,即:筹备后端接口参数 => 调起后端接口获取 ping++
charge
对象 => 拿 charge
对象调用ping++ sdk
=> 获取ping++
领取后果 / 解决领取后果。
留神:小程序领取 params
也须要openId
,这个能够在小程序里边获取。
与 app 交互,让 app 调起领取
这个很简略,就是把参数给到 app
,让app
调起对应微信 / 支付宝领取即可。
咱们页面是有让用户抉择微信还是支付宝领取的,所以选定后,把 ping ++
charge
对象给app
:
async handleAppPay(params) {
try {
let channel
switch (this.paySubChannel) {
case 'wx_pub':
channel = 'wx'
break;
case 'alipay_wap':
channel = 'alipay'
break;
default:
break;
}
params.paySubChannel = channel
if(!this.pingPayParams) {const { data} = await api.req(JSON.stringify(params), 'payRequest')
this.pingPayParams = data
}
// appPay 是与 app 交互的一个协定
appPay({PingParam: JSON.stringify(this.pingPayParams),
})
// 注册让 app 回调的 js 函数
methodCalledByNative('handlePayResult', (result) => this.handlePayResult(result))
this.$on("hook:beforeDestroy", () => (window.handlePayResult = null));
} catch (error) {console.log(error)
}
},
获取 Ping++
领取后果 / 解决领取后果
支付宝网页领取实现会间接走successUrl
,下面曾经解决了
// app/ 微信 js api/ 微信小程序领取完会走这里
async handlePayResult(result) {console.log('ping++ 领取后果:', result);
switch (result) {
case 'success':
this.$router.push({
name: 'payResult',
params: {
otherProp: this.otherProp,
serialNo: this.payInfo.serialNo
}
})
break
case 'fail':
this.$router.push({
name: 'payResult',
params: {result: 'fail'}
})
break
case 'cancel':
console.log('勾销领取')
break
case 'invalid':
this.$toast.fail(this.paySubChannel === 'wx_pub' ? '用户没有装置微信' : '用户没有装置支付宝')
break
default:
break
}
},
领取后果页
async created() {const { serialNo, otherProp, result} = this.$route.params
if(result === 'fail') { // 能够间接展现领取失败
return
}
this.otherProp = otherProp
this.serialNo = serialNo
this.queryPayResult()},
此文章为记录学习应用。如有舛误,烦请各位大佬指教(鞠躬