jiuyiUniapp/shop/utils/payment.js

666 lines
17 KiB
JavaScript
Raw Normal View History

2024-12-18 15:46:27 +08:00
/* eslint-disable */
import indexConfig from '@/config/index.config';
import {
// 支付宝h5支付
toaliwappay ,
// 获取微信公众号支付
wechatofficialaccountpayparm ,
// 获取微信H5支付参数
wechath5payparm ,recharge_toalipagepay,recharge_wechatqrpayparm
} from '@/api/basic';
// #ifdef H5
import jweixin from '@/common/jweixin';
// #endif
import {querybaseinfoset,
//APP支付宝支付
aliPay ,
// 支付宝pc支付
toalipagepay ,
// 获取微信小程序支付
wechatappletpay ,
// APP微信支付
wxpay} from '@/api/basic';
import {isBindingCheck,getJsapiTicket} from '@/api/login';
import {http} from '@/utils/request';
import mHelper from '@/utils/helper';
import mRouter from '@/utils/router';
import {toprepay,} from '@/api/product';
export default {
// 判断是否公众号微信H5
isWechat() {
// #ifdef H5
const ua = window.navigator.userAgent.toLowerCase();
if (ua.match(/micromessenger/i) == 'micromessenger') {
return true;
} else {
return false;
}
// #endif
},
// wxjssdk
async wxConfigH5(url) {
if (this.isWechat()) {
const jsApiList = JSON.stringify([
'chooseWXPay',
'scanQRCode',
'updateAppMessageShareData', 'onMenuShareQQ','getLocation',
'updateTimelineShareData','onMenuShareQZone'
]);
await http
.get(`${getJsapiTicket}`, {
url: url,
jsApiList, // 需要调用微信的原生方法
debug: true // 是否打开调试
})
.then(result => {
jweixin.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来若要查看传入的参数可以在pc端打开参数信息会通过log打出仅在pc端时才会打印。
appId:result.appId, // 必填,公众号的唯一标识
timestamp: result.timestamp, // 必填,生成签名的时间戳
nonceStr: result.nonceStr, // 必填,生成签名的随机串
signature: result.signature,// 必填,签名
jsApiList: ['chooseWXPay',
'scanQRCode',"onMenuShareTimeline",'updateAppMessageShareData', 'onMenuShareQQ','getLocation',
'updateTimelineShareData','onMenuShareQZone', "onMenuShareAppMessage", "onMenuShareWeibo", "chooseImage",
"uploadImage", "hideMenuItems", "closeWindow"
] // 所有要调用的 API 都要加到这个列表中
});
jweixin.ready(function () {
// 在这里调用 API
wx.hideMenuItems({
menuList: ['menuItem:copyUrl', 'menuItem:favorite', 'menuItem:originPage', 'menuItem:openWithQQBrowser','menuItem:openWithSafari',
'menuItem:share:email', 'menuItem:share:qq', 'menuItem:share:weiboApp','menuItem:share:QZone'
] // 要隐藏的菜单项只能隐藏“传播类”和“保护类”按钮所有menu项见附录3,分享朋友:'menuItem:share:appMessage',分享朋友圈:'menuItem:share:timeline'
});
//获取“分享给朋友”按钮点击状态及自定义分享内容接口(即将废弃)
jweixin.onMenuShareAppMessage({
title: '快戳我啊!让您享受白菜价网购的快感', // 分享标题
desc: '先领优惠券再下单享受折上折,各种大额优惠券让你领到手软呦!快戳我!快戳我!', // 分享描述
link: 'https://mojin.51wangshi.com/pages/index/index', // 分享链接
imgUrl: 'https://img-cdn-aliyun.dcloud.net.cn/stream/plugin_screens/4d9ccff0-65a0-11ea-b390-c5cb19d91445_1.png?v=1602645399', // 分享图标
type: '', // 分享类型,music、video或link不填默认为link
dataUrl: '', // 如果type是music或video则要提供数据链接默认为空
success: function () {
mHelper.toast('分享成功')
}
})
//获取“分享到朋友圈”按钮点击状态及自定义分享内容接口(即将废弃)
jweixin.onMenuShareTimeline({
title: '快戳我啊!让您享受白菜价网购的快感', // 分享标题
desc: '先领优惠券再下单享受折上折,各种大额优惠券让你领到手软呦!快戳我!快戳我!', // 分享描述
link: 'https://mojin.51wangshi.com/pages/index/index', // 分享链接
imgUrl: 'https://img-cdn-aliyun.dcloud.net.cn/stream/plugin_screens/4d9ccff0-65a0-11ea-b390-c5cb19d91445_1.png?v=1602645399', // 分享图标
type: '', // 分享类型,music、video或link不填默认为link
dataUrl: '', // 如果type是music或video则要提供数据链接默认为空
success: function () {
mHelper.toast('分享成功')
}
})
});
});
}
},
checkWXJSBridge(data) {
let that = this
let interval = setInterval(() => {
if (typeof window.WeixinJSBridge != 'undefined') {
clearTimeout(interval)
that.onBridgeReady(data)
}
}, 200)
},
checkWXJSBridge1(data) {
let that = this
let interval = setInterval(() => {
if (typeof window.WeixinJSBridge != 'undefined') {
clearTimeout(interval)
that.onBridgeReady1(data)
}
}, 200)
},
onBridgeReady1(data) {
var _this = this
window.WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
appId: data.appid, // 公众号名称,由商户传入
timeStamp: data.time_stamp, // 时间戳自1970年以来的秒数
nonceStr: data.nonce_str, // 随机串
package: data.package_,
signType: data.sign_type, // 微信签名方式:
paySign: data.pay_sign // 微信签名
},
function(res) {
if (res.err_msg === 'get_brand_wcpay_request:ok') {
mHelper.toast('充值成功')
} else if (res.err_msg === 'get_brand_wcpay_request:cancel') {
mHelper.toast('取消充值')
} else {
mHelper.toast('充值失败')
}
setTimeout(() => {
mRouter.push({
route: '/pages/user/money/rechangeSucess?type=2&orderCode=' + data.result_code
});
}, 500)
}
)
},
onBridgeReady(data) {
var _this = this
window.WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
appId: data.appid, // 公众号名称,由商户传入
timeStamp: data.time_stamp, // 时间戳自1970年以来的秒数
nonceStr: data.nonce_str, // 随机串
package: data.package_,
signType: data.sign_type, // 微信签名方式:
paySign: data.pay_sign // 微信签名
},
function(res) {
if (res.err_msg === 'get_brand_wcpay_request:ok') {
mHelper.toast('支付成功')
} else if (res.err_msg === 'get_brand_wcpay_request:cancel') {
mHelper.toast('取消支付')
} else {
mHelper.toast('支付失败')
}
setTimeout(() => {
mRouter.push({
route: '/pages/user/money/success??type=1&orderCode=' + data.result_code
});
}, 500)
}
)
},
/*
*@des 微信支付
*
*@param order_group 订单:order;充值:recharge;
*@param data 订单 {order_id:199} 充值 {money:100};
*/
async weixinPay(order_group, data, route = '/pages/user/money/success', code) {
let url='';
// #ifdef H5
if (this.isWechat()) {//TODO
url=`${wechatofficialaccountpayparm}`;
}else{
url=`${wechath5payparm}`;
}
// #endif
// #ifdef APP-PLUS
url=`${wxpay}`;
// #endif
// #ifdef MP-WEIXIN
url=`${wechatappletpay}`;
// #endif
// #ifdef APP-PLUS
await http
.get(url, {
order_group,
pay_type: 1,
storeId:indexConfig.storeId,
trade_type: 'app',
data
})
.then(r => {
uni.requestPayment({
provider: 'wxpay', // 微信支付
orderInfo: JSON.stringify(r.data), //微信订单数据 r.config
success: function () {
mHelper.toast('支付成功');
mRouter.redirectTo({route});
},
fail: function (err) {
mHelper.toast('支付已取消');
}
});
});
// #endif
// #ifdef MP-WEIXIN
await http
.get(url, {
order_group,
pay_type: 1,
trade_type: 'mini_program',
orderCode:data.orderCode,
storeId:indexConfig.storeId,
orderId:data.orderId,
orderType: data.orderType,
type:data.type,
})
.then(r => {
if(r.flag==-10){
mHelper.toast('请绑定微信');
mRouter.push({
route: '/pages/public/auth'
});
return false;
}
if(r.flag==-5){
mHelper.toast('微信生成预支付信息错误');
return false;
}
if(r.flag==-3){
mHelper.toast('没有待支付订单');
return false;
}
if(r.flag==-9){
mHelper.toast('没开启');
return false;
}
if(r.flag==-8){
mHelper.toast('参数错误');
return false;
}
if(r.flag==-11){
mHelper.toast('请绑定手机号');
mRouter.push({
route: '/pages/public/bindMobile'
});
return false;
}
uni.requestPayment({
provider: 'wxpay',
nonceStr: r.data.nonce_str,
package: r.data.package_,
signType: r.data.sign_type,
paySign: r.data.pay_sign,
timeStamp: r.data.time_stamp,
success: () => {
mHelper.toast('支付成功');
mRouter.redirectTo({route});
},
fail: res => {
mHelper.toast(res);
},
complete: () => {
}
});
});
// #endif
// #ifdef H5
await http
.get(url, {
order_group,
pay_type: 1,
trade_type: 'js',
storeId:indexConfig.storeId,
orderCode:data.orderCode,
orderId:data.orderId,
orderType: data.orderType,
type:data.type,
// openid: res.data.openid
})
.then(r => {
if(r.flag==-10){
mHelper.toast('请绑定微信');
mRouter.push({
route: '/pages/public/auth'
});
return false;
}
if(r.flag==-5){
mHelper.toast('微信生成预支付信息错误');
return false;
}
if(r.flag==-3){
mHelper.toast('没有待支付订单');
return false;
}
if(r.flag==-9){
mHelper.toast('没开启');
return false;
}
if(r.flag==-8){
mHelper.toast('参数错误');
return false;
}
if(r.flag==-11){
mHelper.toast('请绑定手机号');
mRouter.push({
route: '/pages/public/bindMobile'
});
return false;
}
if (this.isWechat()) {
if (r) {
this.checkWXJSBridge(r.data)
}else{
window.location.href = r.msg
return;
}
}else{
location.href=r.data.mwebUrl
}
});
// #endif
},
/*
*@des 支付宝支付
*
*@param order_group 订单:order;充值:recharge;
*@param data 订单 {order_id:199} 充值 {money:100};
*/
async aliPay(order_group, data, route = '/pages/user/money/success') {
// #ifdef MP-QQ
mHelper.toast('QQ小程序不支持支付宝充值');
return;
// #endif
// #ifdef MP-WEIXIN
mHelper.toast('微信小程序不支持支付宝充值');
return;
// #endif
let url='';
// #ifdef H5
url=`${toaliwappay}`;
// #endif
// #ifdef APP-PLUS
url=`${aliPay}`;
// #endif
await http
.get(url, {
orderCode:data.orderCode,
orderId:11,
storeId:indexConfig.storeId,
orderType: 1,
type:data.type,
// #ifdef H5
trade_type: 'wap',
// #endif
// #ifdef APP-PLUS
trade_type: 'app',
// #endif
})
.then(r => {
// #ifdef H5
if (r) {
let divDom = document.createElement('div')
divDom.innerHTML = r.data;
document.body.appendChild(divDom)
let testForm = document.getElementsByName('punchout_form')
testForm[0].dispatchEvent(new Event('submit'))
testForm[0].submit()
document.body.removeChild(testForm[0])
}
// window.location.href = r;
// #endif
// #ifdef APP-PLUS
uni.requestPayment({
provider: 'alipay',
orderInfo: r, //微信、支付宝订单数据
success: function () {
mHelper.toast('支付成功');
mRouter.redirectTo({route});
},
fail: function (err) {
mHelper.toast(err);
}
});
// #endif
});
},
/*
*@des 余额支付
*
*@param data 支付参数
*/
async balancePay(data, route = '/pages/set/pay/setPassword?type=1') {
data.storeId=indexConfig.storeId;
await http
.post(`${toprepay}`, data)
.then(r => {
// -1:用户不存在 -2:支付密码错误 -3:没有待支付的订单 -4:用户预存款金额不足 -6:没有设置支付密码 1 成功
if (-1 == r) {
mHelper.toast('用户不存在');
} else if (-2 == r) {
mHelper.toast('支付密码错误');
} else if (-3 == r) {
mHelper.toast('没有待支付的订单');
} else if (-4 == r) {
mHelper.toast('用户预存款金额不足');
} else if (-6 == r) {
uni.showModal({
content: '您尚未设置支付密码,是否跳转支付密码页面?',
success: confirmRes => {
if (confirmRes.confirm) {
mRouter.push({ route: '/pages/set/pay/setPassword' });
} else {
this.btnLoading = false;
}
}
});
} else if (1 == r) {
mRouter.redirectTo({route});
}
});
},
/*
*@des 微信支付
* type 1 公众号 2 h5 3 小程序 4 app 5 pc
*@param order_group 订单:order;充值:recharge;
*@param data 订单 {order_id:199} 充值 {money:100};
*/
async weixinRecharge(order_group, data, route = '/pages/user/money/success', code) {
let url=`${recharge_wechatqrpayparm}`;
let type=3;
// #ifdef H5
if (this.isWechat()) {//TODO
type=1;
}else{
type=2;
}
// #endif
// #ifdef APP-PLUS
type=4;
// #endif
// #ifdef APP-PLUS
await http
.get(url, {
order_group,
type: type,
storeId:indexConfig.storeId,
money:data.money,
trade_type: 'app',
data
})
.then(r => {
uni.requestPayment({
provider: 'wxpay', // 微信支付
orderInfo: JSON.stringify(r.data), //微信订单数据 r.config
success: function () {
mHelper.toast('支付成功');
mRouter.redirectTo({route});
},
fail: function (err) {
mHelper.toast(err);
}
});
});
// #endif
// #ifdef MP-WEIXIN
await http
.get(url, {
type: type,
trade_type: 'mini_program',
storeId:indexConfig.storeId,
money:data.money
})
.then(r => {
if(r.flag==-10){
mHelper.toast('请绑定微信');
mRouter.push({
route: '/pages/public/auth'
});
return false;
}
if(r.flag==-5){
mHelper.toast('微信生成预支付信息错误');
return false;
}
if(r.flag==-11){
mHelper.toast('请绑定手机号');
mRouter.push({
route: '/pages/public/bindMobile'
});
return false;
}
uni.requestPayment({
provider: 'wxpay',
nonceStr: r.nonce_str,
package: r.package_,
signType: r.sign_type,
paySign: r.pay_sign,
timeStamp: r.time_stamp,
success: () => {
mHelper.toast('支付成功');
mRouter.redirectTo({route});
},
fail: res => {
mHelper.toast(res);
},
complete: () => {
}
});
});
// #endif
// #ifdef H5
await http
.get(url, {
order_group,
pay_type: 1,
trade_type: 'js',
money:data.money,
storeId:indexConfig.storeId,
orderCode:data.orderCode,
orderId:data.orderId,
orderType: data.orderType,
type: type,
// openid: res.data.openid
})
.then(r => {
if (this.isWechat()) {
if (r) {
this.checkWXJSBridge1(r)
}else{
window.location.href = r.msg
return;
}
}else{
location.href=r.data.mwebUrl
}
});
// #endif
},
/*
*@des 支付宝充值
*
*@param order_group 订单:order;充值:recharge;
2 h5 4 app 5 pc
*@param data 订单 {order_id:199} 充值 {money:100};
*/
async aliPayRecharge(order_group, data, route = '/pages/user/money/success') {
// #ifdef MP-QQ
mHelper.toast('QQ小程序不支持支付宝充值');
return;
// #endif
// #ifdef MP-WEIXIN
mHelper.toast('微信小程序不支持支付宝充值');
return;
// #endif
let type=2;
let url=`${recharge_toalipagepay}`;
// #ifdef H5
type=2;
// #endif
// #ifdef APP-PLUS
type=4;
// #endif
await http
.get(url, {
storeId:indexConfig.storeId,
money:data.money,
type:type,
// #ifdef H5
trade_type: 'wap',
// #endif
// #ifdef APP-PLUS
trade_type: 'app',
// #endif
})
.then(r => {
// #ifdef H5
if (r) {
let divDom = document.createElement('div')
divDom.innerHTML = r;
document.body.appendChild(divDom)
let testForm = document.getElementsByName('punchout_form')
testForm[0].dispatchEvent(new Event('submit'))
testForm[0].submit()
document.body.removeChild(testForm[0])
}
// window.location.href = r;
// #endif
// #ifdef APP-PLUS
uni.requestPayment({
provider: 'alipay',
orderInfo: r, //微信、支付宝订单数据
success: function () {
mHelper.toast('充值成功');
mRouter.redirectTo({route});
},
fail: function (err) {
mHelper.toast(err);
}
});
// #endif
});
},
};