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