105 lines
3.0 KiB
JavaScript
105 lines
3.0 KiB
JavaScript
import util from 'utils/util'
|
||
import store from '@/store'
|
||
|
||
const payTypes = ['WXPAY', 'ALIPAY']
|
||
/**
|
||
* 统一支付处理方法
|
||
* @param payInfo // 支付下单信息
|
||
* @param payType // 支付类型
|
||
* @param createOrderFun // 预下单方法
|
||
* @param payResultHandle // 支付参数返回处理方法,不同的业务逻辑下单后返回的支付参数字段可能不一样,需要处理成统一格式
|
||
* {
|
||
jsapiResult: '', 微信jsapi支付参数
|
||
body: '', 支付宝支付参数
|
||
}
|
||
* @param wxPaySuccess // 微信支付下单支付成功回调
|
||
* @param aliPaySuccess // 支付宝支付下单成功回调
|
||
*/
|
||
let _options = {
|
||
payInfo: {},
|
||
payType: '',
|
||
createOrderFun: () => {},
|
||
payResultHandle: (res) => res,
|
||
wxPaySuccess: () => {},
|
||
aliPaySuccess: () => {}
|
||
}
|
||
|
||
const unityPay = (options) => {
|
||
|
||
Object.assign(_options, options)
|
||
if (!_options.payType) {
|
||
return util.Tips({
|
||
title: '请选择支付方式'
|
||
})
|
||
}
|
||
if (!payTypes.includes(_options.payType)) {
|
||
throw new Error('支付方式参数值为 WXPAY、ALIPAY')
|
||
}
|
||
// 目前微信只支持JSAPI,h5支付开通后取消该验证
|
||
const openId = store.state.app.openId || ''
|
||
if (_options.payType === 'WXPAY' && !openId) {
|
||
return util.Tips({
|
||
title: '请在微信客户端进行支付操作'
|
||
})
|
||
}
|
||
_options.payInfo.openid = openId
|
||
if (_options.payType === 'WXPAY') {
|
||
_options.payInfo.payChannel = 'public'
|
||
} else if (_options.payType === 'ALIPAY') {
|
||
_options.payInfo.payChannel = 'appAliPay'
|
||
}
|
||
uni.showLoading({
|
||
title: '支付中',
|
||
mask: true
|
||
})
|
||
_options.createOrderFun({
|
||
..._options.payInfo,
|
||
payType: _options.payType
|
||
}).then(res => {
|
||
const payConfig = _options.payResultHandle(res.data)
|
||
switch (_options.payType) {
|
||
// 微信JSAPI支付
|
||
case 'WXPAY':
|
||
wxPayJSAPI(payConfig.jsapiResult)
|
||
break
|
||
case 'ALIPAY':
|
||
_options.aliPaySuccess(payConfig.body)
|
||
break
|
||
}
|
||
}).catch((error) => {
|
||
util.Tips({
|
||
title: error
|
||
})
|
||
}).finally(uni.hideLoading)
|
||
}
|
||
|
||
const wxPayJSAPI = (payData) => {
|
||
function onBridgeReady() {
|
||
WeixinJSBridge.invoke('getBrandWCPayRequest', {
|
||
"appId": payData.appId, //公众号ID,由商户传入
|
||
"timeStamp": payData.timeStamp, //时间戳,自1970年以来的秒数
|
||
"nonceStr": payData.nonceStr, //随机串
|
||
"package": payData.packageValue,
|
||
"signType": payData.signType, //微信签名方式:
|
||
"paySign": payData.paySign //微信签名
|
||
},
|
||
function(res) {
|
||
if (res.err_msg == "get_brand_wcpay_request:ok") {
|
||
_options.wxPaySuccess()
|
||
}
|
||
})
|
||
}
|
||
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 {
|
||
onBridgeReady()
|
||
}
|
||
}
|
||
|
||
export default unityPay
|