You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jwl-applet/src/jtools/pay/index.js

166 lines
4.2 KiB

2 years ago
import request from '../request/index.js';
// #ifdef H5
import wxsdk from '@/jtools/wechat/sdk'
// #endif
import wechat from '@/jtools/wechat/wechat'
import $platform from '@/jtools/platform';
/**
* 支付
*
* @param {String} payment = ['wechat','alipay','wallet'] - 支付方式
* @param {Object} order = {} - 订单详情
* @param {String} orderType = ['goods','recharge'] - 订单类型
*/
export default class JtoolsPay {
// wxOfficialAccount wxMiniProgram App H5
// wechat 公众号JSSDK支付 小程序支付 微信开放平台支付 H5网页支付
// alipay 复制网址 复制网址 支付宝开放平台支付 直接跳转链接
// wallet v v v v
constructor(payment, order, orderType) {
this.payment = payment;
this.order = order;
this.orderType = orderType;
this.platform = $platform.get();
let payMehod = this.getPayMethod();
payMehod();
}
getPayMethod() {
var payMethod = {
'wxMiniProgram': {
'wechat': () => {
this.wxMiniProgramPay()
},
},
'App': {
'wechat': () => {
this.wechatPay()
},
'alipay': () => {
this.aliPay()
},
},
}
return payMethod[this.platform][this.payment];
}
// 预支付
prepay() {
let that = this;
return new Promise((resolve, reject) => {
const p = $platform.device()
const tradeInfoType = p == 'android' ? 'Android' : p == 'ios' ? 'iOS' : 'Wap'
let params = {
orderId: this.order.orderId,
orderPayType: this.order.orderPayType,
money: this.order.money,
microServiceName: this.order.microServiceName,
prepayParamUrl: this.order.prepayParamUrl,
paymentType: 'weChatPay',
payType: 'JSAPI',
tradeInfoType: tradeInfoType,
tenantId: '-1',
clientType: 'miniWx'
}
if (uni.getStorageSync('openId')) {
params.openId = uni.getStorageSync('openId');
}
request({
url: 'driver-api/applet/pay/prepay',
method: 'POST',
param,
}).then(res => {
if (res.code == 'SUCCESS') {
resolve(res);
}
})
});
}
// 微信小程序支付
async wxMiniProgramPay() {
let that = this;
let result = await this.prepay();
const params = result.data.jsApiResult
uni.requestPayment({
provider: 'wxpay',
...{
appId: params.appId, //公众号名称,由商户传入
timeStamp: params.timestamp, //时间戳,自1970年以来的秒数
nonceStr: params.nonceStr, //随机串
package: `prepay_id=${params.prepay_id}`,
signType: params.signType, //微信签名方式:
paySign: params.paySign, //微信签名
},
success: res => {
that.payResult('success', result.data.orderPayNo)
},
fail: err => {
console.log('支付取消或者失败:', err);
err.errMsg !== "requestPayment:fail cancel" && that.payResult('fail')
}
});
}
// 支付宝支付
async aliPay() {
let that = this;
let result = await this.prepay();
if (result.code === 1) {
uni.requestPayment({
provider: 'alipay',
orderInfo: result.data.pay_data, //支付宝订单数据
success: res => {
that.payResult('success')
},
fail: err => {
console.log('支付取消或者失败:', err);
err.errMsg !== "requestPayment:fail cancel" && that.payResult('fail')
}
});
}
}
// 微信支付
async wechatPay() {
let that = this;
let result = await this.prepay();
if (result.code === 1) {
uni.requestPayment({
provider: 'wxpay',
orderInfo: JSON.parse(result.data.pay_data), //微信订单数据(官方说是string。实测为object)
success: res => {
that.payResult('success')
},
fail: err => {
err.errMsg !== "requestPayment:fail cancel" && that.payResult('fail')
console.log('支付取消或者失败:', err);
}
});
}
}
// 支付结果跳转,success:成功,fail:失败
payResult(resultType, orderPayNo) {
const that = this;
let path = ''
uni.navigateTo({
url:path
})
}
}