import { WECHAT_REPAY,ALIPAY } from './api'
import { SERVICE_URL } from './api_base'
import wxpay from '@service.wxpay'
import alipay from '@service.alipay'
import prompt from '@system.prompt'
import router from '@system.router';
// 截取mweb_url里面的prepay_id
const getURLParameter = function (urlStr) {
return decodeURIComponent(urlStr).split('&').map((query) => query.split('=')).reduce((params, pairs) => (params[pairs[0]] = pairs[1] || '', params), {});
}
// 微信支付
const handleWxPay = function (prepayid, urlStr,orderId) {
wxpay.pay({
//微信 app支付的prepayId
prepayid,
extra: {
//传递给支付页面的自定义参数, 根据需要进行设置, 会被urlEncode之后拼接在配置的url尾部
mweb_url: urlStr,
},
fail: function (data, code) {
console.log(`WX H5 PAY handling fail, code = ${code},data=${data}`)
if (code == 1000) {
prompt.showToast({
message:"微信未安装,请尝试其他支付方式"
})
}
},
cancel: function () {
console.log('WX H5 PAY handling cancel')
},
success: function (data) {
//H5方式下,支付成功的回调仅仅只是指将订单递交给微信,并不意味着支付已经成功完成
// console.log(data, 'WX H5 PAY handling success')
router.push({
uri: '/myorder',
params: {
type:'WX',
orderId,
}
})
}
})
}
// 支付宝支付
const handleZfbPay = function (res,orderId) {
alipay.pay({
orderInfo: res,
callback: function (ret) {
// console.log(ret, 'handling callback')
router.push({
uri: '/myorder',
params: {
type:'ZFB',
orderId,
}
})
}
})
}
export const payment = (options) => {
return new Promise((resolve, reject) => {
const { orderId, payType } = options;
const payTypes = ["WX", "ZFB"];
if (!orderId) {
reject(
prompt.showToast({
message: '订单号无效'
})
)
}
if (!payTypes.includes(payType)) {
reject(
prompt.showToast({
message: '支付方式无效'
})
)
}
try {
if (payType === "WX") {
// 通过订单号 获取微信支付参数
Fetch({
url: SERVICE_URL(WECHAT_REPAY.service) + WECHAT_REPAY.url,
contentType: 'formData',
payload: {
order_number: orderId,
},
}).then(res => {
let payData = res
let prepay_id = getURLParameter(payData.mweb_url.split('?')[1]).prepay_id;
handleWxPay(prepay_id, payData.mweb_url,orderId)
}).catch(err => {
reject(
prompt.showToast({
message: `${err}`
})
)
})
} else if (payType === "ZFB") {
Fetch({
url: SERVICE_URL(ALIPAY.service) + ALIPAY.url,
contentType: 'formData',
payload: {
order_number: orderId,
execute_type:'sdk',
return_url:"/"
},
}).then(res => {
handleZfbPay(res,orderId)
}).catch(err => {
reject(
prompt.showToast({
message: `${err}`
})
)
})
}
} catch (error) {
reject(
prompt.showToast({
message: `${error}`
})
)
}
})
}
快应用封装支付
最新推荐文章于 2022-11-04 10:04:12 发布