公司演示版e鹿悦游
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.
 
 
 
 
 
CjyTravel/common/pay.js

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, //公众号微信支付
}