// utils/payment.js // 统一的支付方法 export function requestPayment(orderInfo, successCallback, failCallback) { // orderInfo 一般由后端返回,包括平台所需的支付参数 // 比如 { "timeStamp": "", "nonceStr": "", "package": "", "signType": "RSA", "paySign": "" } (微信) // 或者 { "orderInfo": "xxx" } (支付宝) // #ifdef MP-WEIXIN console.log("MP-WEIXIN == MP-WEIXIN == MP-WEIXIN == MP-WEIXIN") // 微信小程序支付 uni.requestPayment({ provider: 'wxpay', timeStamp: orderInfo.timeStamp || orderInfo.timestamp, nonceStr: orderInfo.nonceStr || orderInfo.noncestr, package: orderInfo.prepayId?'prepay_id='+orderInfo.prepayId:'prepay_id='+orderInfo.prepayid, signType: orderInfo.signType || 'RSA', paySign: orderInfo.paySign || orderInfo.sign, success: (res) => { console.log('微信支付成功', res); successCallback && successCallback(res); }, fail: (err) => { console.error('微信支付失败', err); failCallback && failCallback(err); } }); // #endif // #ifdef MP-ALIPAY console.log("MP-ALIPAY == MP-ALIPAY == MP-ALIPAY == MP-ALIPAY") // 支付宝小程序支付 uni.requestPayment({ provider: 'alipay', orderInfo: orderInfo.orderInfo, // 需要的是支付宝的 orderString success: (res) => { console.log('支付宝支付成功', res); successCallback && successCallback(res); }, fail: (err) => { console.error('支付宝支付失败', err); failCallback && failCallback(err); } }); // #endif // #ifdef APP-PLUS console.log("APP-PLUS == APP-PLUS==APP-PLUS== APP-PLUS") // App 端支付(支持微信/支付宝/ApplePay等) // 通常也是调用 uni.requestPayment,通过 provider 区分 const platform = uni.getSystemInfoSync().platform; // iOS or Android let provider = ''; if (platform === 'ios') { // 可以根据业务需求选择微信或 Apple Pay provider = 'wxpay'; // 或者 'wxpay',但 App 微信支付一般用 'wxpay' } else { // Android 通常用支付宝或微信 // 你可以根据后端返回的 provider 决定,比如 orderInfo.provider provider = orderInfo.provider || 'wxpay'; // 或 alipay } uni.requestPayment({ provider: provider, // 可选值:wxpay、alipay、appleiap 等 orderInfo: orderInfo, success: (res) => { console.log(`${provider} 支付成功`, res); successCallback && successCallback(res); }, fail: (err) => { console.error(`${provider} 支付失败`, err); failCallback && failCallback(err); } }); // #endif // #ifdef H5 console.log("H5 == H5==H5==H5==H5") // H5 支付:通常跳转到第三方支付页面(如微信扫码、支付宝跳转) // 由于 H5 无法直接调起微信支付(除非在微信内置浏览器),所以一般后端会返回支付链接,前端跳转 if (orderInfo.payUrl) { // 比如支付宝的支付链接,或者微信的二维码链接 window.location.href = orderInfo.payUrl; } else { uni.showToast({ title: 'H5暂不支持直接支付,请使用其他端', icon: 'none' }); } // #endif // 其它平台(如 QuickApp、钉钉等)可根据需要扩展 }