parent
213339eb02
commit
298219a436
@ -0,0 +1,180 @@ |
|||||||
|
import platform from '@/core/platform' |
||||||
|
import storage from '@/utils/storage' |
||||||
|
import ClientEnum from '@/common/enum/Client' |
||||||
|
import { PayMethodEnum } from '@/common/enum/payment' |
||||||
|
|
||||||
|
/** |
||||||
|
* 发起支付请求 (用于微信小程序) |
||||||
|
* @param {Object} option 参数 |
||||||
|
*/ |
||||||
|
const paymentAsWxMp = option => { |
||||||
|
const options = { |
||||||
|
timeStamp: '', |
||||||
|
nonceStr: '', |
||||||
|
package: '', |
||||||
|
signType: '', |
||||||
|
paySign: '', |
||||||
|
...option |
||||||
|
} |
||||||
|
return new Promise((resolve, reject) => { |
||||||
|
uni.requestPayment({ |
||||||
|
provider: 'wxpay', |
||||||
|
timeStamp: options.timeStamp, |
||||||
|
nonceStr: options.nonceStr, |
||||||
|
package: options.package, |
||||||
|
signType: options.signType, |
||||||
|
paySign: options.paySign, |
||||||
|
success(res) { |
||||||
|
const option = { |
||||||
|
isRequireQuery: true, // 是否需要主动查单
|
||||||
|
outTradeNo: options.out_trade_no, // 交易订单号
|
||||||
|
method: 'wechat' |
||||||
|
} |
||||||
|
resolve({ res, option }) |
||||||
|
}, |
||||||
|
fail: res => reject(res) |
||||||
|
}) |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 发起支付请求 (用于H5) |
||||||
|
* @param {Object} option 参数 |
||||||
|
*/ |
||||||
|
const paymentAsH5 = option => { |
||||||
|
const options = { orderKey: null, mweb_url: '', h5_url: '', ...option } |
||||||
|
// 记录下单的信息
|
||||||
|
storage.set('tempUnifyData_' + options.orderKey, { |
||||||
|
method: PayMethodEnum.WECHAT.value, |
||||||
|
outTradeNo: options.out_trade_no |
||||||
|
}, 60 * 60) |
||||||
|
// 跳转到微信支付页
|
||||||
|
return new Promise((resolve, reject) => { |
||||||
|
const url = options.mweb_url || options.h5_url |
||||||
|
if (url) { |
||||||
|
window.location.href = url |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 发起支付请求 (用于微信公众号) |
||||||
|
* @param {Object} option 参数 |
||||||
|
*/ |
||||||
|
const paymentAsOfficial = option => { |
||||||
|
const options = { |
||||||
|
appId: '', |
||||||
|
timeStamp: '', |
||||||
|
nonceStr: '', |
||||||
|
package: '', |
||||||
|
signType: '', |
||||||
|
paySign: '', |
||||||
|
...option |
||||||
|
} |
||||||
|
return onBridgeReady(options) |
||||||
|
if (platform === ClientEnum.WXOFFICIAL.value) { |
||||||
|
if (typeof WeixinJSBridge != 'undefined') { |
||||||
|
return onBridgeReady(options) |
||||||
|
} |
||||||
|
if (document.addEventListener) { |
||||||
|
document.addEventListener('WeixinJSBridgeReady', () => onBridgeReady(options), false) |
||||||
|
} else if (document.attachEvent) { |
||||||
|
document.attachEvent('WeixinJSBridgeReady', () => onBridgeReady(options)) |
||||||
|
document.attachEvent('onWeixinJSBridgeReady', () => onBridgeReady(options)) |
||||||
|
} |
||||||
|
} |
||||||
|
return new Promise((resolve, reject) => { |
||||||
|
reject({ message: '当前不支持WeixinJSBridge11' }) |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 发起支付请求 (用于APP) |
||||||
|
* @param {Object} option 参数 |
||||||
|
*/ |
||||||
|
const paymentAsApp = options => { |
||||||
|
return new Promise((resolve, reject) => { |
||||||
|
uni.requestPayment({ |
||||||
|
provider: 'wxpay', |
||||||
|
orderInfo: { |
||||||
|
partnerid: options.partnerid, |
||||||
|
appid: options.appid, |
||||||
|
package: 'Sign=WXPay', |
||||||
|
noncestr: options.noncestr, |
||||||
|
sign: options.sign, |
||||||
|
prepayid: options.prepayid, |
||||||
|
timestamp: options.timestamp |
||||||
|
}, |
||||||
|
success(res) { |
||||||
|
// isRequireQuery 是否需要主动查单
|
||||||
|
// outTradeNo 交易订单号
|
||||||
|
resolve({ res, option: { isRequireQuery: true, outTradeNo: options.out_trade_no, method: 'wechat' } }) |
||||||
|
}, |
||||||
|
fail: res => reject(res) |
||||||
|
}) |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
// 微信公众号调用微信支付
|
||||||
|
// #ifdef H5
|
||||||
|
const onBridgeReady = (options) => { |
||||||
|
return new Promise((resolve, reject) => { |
||||||
|
WeixinJSBridge.invoke( |
||||||
|
'getBrandWCPayRequest', { |
||||||
|
appId: options.appId, |
||||||
|
timeStamp: options.timeStamp, |
||||||
|
nonceStr: options.nonceStr, |
||||||
|
package: options.package, |
||||||
|
signType: options.signType, |
||||||
|
paySign: options.paySign, |
||||||
|
}, |
||||||
|
res => { |
||||||
|
if (res.err_msg == "get_brand_wcpay_request:ok") { |
||||||
|
const option = { |
||||||
|
isRequireQuery: true, // 是否需要主动查单
|
||||||
|
outTradeNo: options.out_trade_no, // 交易订单号
|
||||||
|
method: 'wechat' |
||||||
|
} |
||||||
|
resolve({ res, option }) |
||||||
|
} else { |
||||||
|
reject(res) |
||||||
|
} |
||||||
|
}) |
||||||
|
}) |
||||||
|
} |
||||||
|
// #endif
|
||||||
|
|
||||||
|
/** |
||||||
|
* 统一下单API |
||||||
|
*/ |
||||||
|
export const payment = (option) => { |
||||||
|
const events = { |
||||||
|
[ClientEnum.H5.value]: paymentAsH5, |
||||||
|
[ClientEnum.MP_WEIXIN.value]: paymentAsWxMp, |
||||||
|
[ClientEnum.WXOFFICIAL.value]: paymentAsOfficial, |
||||||
|
[ClientEnum.APP.value]: paymentAsApp |
||||||
|
} |
||||||
|
return events[platform](option) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 统一下单API需要的扩展数据 |
||||||
|
*/ |
||||||
|
export const extraAsUnify = () => { |
||||||
|
return {} |
||||||
|
} |
||||||
|
|
||||||
|
// H5端微信支付下单时的数据
|
||||||
|
// 用于从微信支付页返回到收银台页面后拿到下单数据
|
||||||
|
// #ifdef H5
|
||||||
|
export const performance = (orderKey) => { |
||||||
|
if (window.performance && window.performance.navigation.type == 2) { |
||||||
|
const tempUnifyData = storage.get('tempUnifyData_' + orderKey) |
||||||
|
if (tempUnifyData) { |
||||||
|
storage.remove('tempUnifyData_' + orderKey) |
||||||
|
return tempUnifyData |
||||||
|
} |
||||||
|
} |
||||||
|
return null |
||||||
|
} |
||||||
|
// #endif
|
Loading…
Reference in new issue