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.
175 lines
4.4 KiB
175 lines
4.4 KiB
|
|
import { isWechat } from './util';
|
|
import HttpRequest from '@/common/httpRequest'
|
|
import HttpConfig from '@/common/config'
|
|
// 支付(app、小程序)
|
|
async function setPay(payInfo, callback) {
|
|
try {
|
|
const userInfo = uni.getStorageSync('userInfo');
|
|
|
|
const httpData = {
|
|
id: payInfo.tradeNo,
|
|
channelCode: "wx_lite",
|
|
channelExtras: {
|
|
openid: userInfo.openid,
|
|
}
|
|
};
|
|
|
|
// 调用预支付函数并等待结果
|
|
const res = await prePayOrder(httpData);
|
|
console.log(res, '请求结果');
|
|
|
|
if (res.data == null) {
|
|
callback && callback({
|
|
success: false,
|
|
data: res.msg
|
|
});
|
|
return;
|
|
}
|
|
|
|
console.log(JSON.parse(res.data.displayContent));
|
|
const data = JSON.parse(res.data.displayContent);
|
|
|
|
// 根据支付类型设置支付参数
|
|
const payData = preparePayData(payInfo, data);
|
|
|
|
console.log("支付参数", payData);
|
|
|
|
// 进行支付请求
|
|
await processPayment(payData, callback);
|
|
|
|
} catch (error) {
|
|
callback && callback({
|
|
success: false,
|
|
data: error.message
|
|
});
|
|
console.error('支付过程出错:', error);
|
|
}
|
|
}
|
|
|
|
// 预支付函数
|
|
function prePayOrder(httpData) {
|
|
return HttpRequest.post(HttpConfig.payOrder, httpData, 'json', false, false);
|
|
}
|
|
|
|
// 准备支付参数
|
|
function preparePayData(payInfo, data) {
|
|
const payData = {};
|
|
|
|
if (payInfo.type == 'mpwxpay') {
|
|
console.log('微信小程序支付');
|
|
payData.provider = 'wxpay';
|
|
payData.timeStamp = data.timeStamp;
|
|
payData.nonceStr = data.nonceStr;
|
|
payData.package = data.packageValue;
|
|
payData.signType = data.signType;
|
|
payData.paySign = data.paySign;
|
|
} else if (payInfo.type == 'wxpay') {
|
|
payData.provider = 'wxpay';
|
|
payData.orderInfo = data.tradeNo;
|
|
} else if (payInfo.type == 'alipay') {
|
|
payData.provider = 'alipay';
|
|
payData.orderInfo = data.sdk_transaction_id;
|
|
} else if (payInfo.type == 'baidu') {
|
|
payData.provider = 'baidu';
|
|
payData.orderInfo = data.tradeNo;
|
|
} else if (payInfo.type == 'toutiao') {
|
|
payData.provider = 'toutiao';
|
|
payData.service = 5; // 5:拉起小程序收银台
|
|
payData._debug = 1;
|
|
payData.orderInfo = {
|
|
order_id: data.order_id,
|
|
order_token: data.order_token
|
|
};
|
|
}
|
|
|
|
return payData;
|
|
}
|
|
|
|
// 处理支付请求的函数
|
|
function processPayment(payData, callback) {
|
|
return new Promise((resolve, reject) => {
|
|
uni.requestPayment({
|
|
...payData,
|
|
success: (success) => {
|
|
callback && callback({
|
|
success: true,
|
|
data: success
|
|
});
|
|
resolve(success);
|
|
},
|
|
fail: (fail) => {
|
|
callback && callback({
|
|
success: false,
|
|
data: fail
|
|
});
|
|
reject(fail);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
//公众号微信支付
|
|
function wxPublicPay(payInfo, callback) {
|
|
if (!isWechat()) {
|
|
uni.showToast({
|
|
title: "需微信公众号才能使用~",
|
|
icon: "none"
|
|
});
|
|
return
|
|
}
|
|
var url = '/api/PayApi' // 您的支付接口
|
|
uni.$u.http.post(url, {
|
|
tradeNo: payInfo.tradeNo //订单号
|
|
}).then(data => {
|
|
let wxConfigObj = {
|
|
appId: data.appId,
|
|
timeStamp: data.timeStamp,
|
|
nonceStr: data.nonceStr,
|
|
package: data.package,
|
|
signType: data.signType,
|
|
paySign: data.sign
|
|
};
|
|
function onBridgeReady() {
|
|
window.WeixinJSBridge.invoke("getBrandWCPayRequest", wxConfigObj, function (
|
|
res
|
|
) {
|
|
if (res.err_msg == "get_brand_wcpay_request:ok") {
|
|
callback && callback({
|
|
success: true,
|
|
data: res
|
|
});
|
|
} else // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回 ok,但并不保证它绝对可靠。
|
|
if (res.err_msg == "get_brand_wcpay_request:cancel") {
|
|
// 您取消了支付
|
|
callback && callback({
|
|
success: false,
|
|
data: res
|
|
});
|
|
} else
|
|
if (res.err_msg == "get_brand_wcpay_request:fail") {
|
|
// 支付失败
|
|
callback && callback({
|
|
success: false,
|
|
data: res
|
|
});
|
|
}
|
|
});
|
|
}
|
|
if (typeof window.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 {
|
|
setPay, //支付(app、小程序)
|
|
wxPublicPay, //公众号微信支付
|
|
}
|
|
|