✨ 微信支付:增加 weixin 未绑定的提示引导
parent
3e9dccdf68
commit
f90096e20a
|
@ -38,7 +38,7 @@
|
||||||
</view>
|
</view>
|
||||||
<view class="check-box ss-flex ss-col-center ss-p-l-10">
|
<view class="check-box ss-flex ss-col-center ss-p-l-10">
|
||||||
<view class="userInfo-money ss-m-r-10" v-if="item.value === 'wallet'">
|
<view class="userInfo-money ss-m-r-10" v-if="item.value === 'wallet'">
|
||||||
余额: {{ userInfo.money }}元
|
余额: {{ fen2yuan(userInfo.money) }}元
|
||||||
</view>
|
</view>
|
||||||
<radio
|
<radio
|
||||||
:value="item.value"
|
:value="item.value"
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
<!-- 装修用户组件:用户资产 -->
|
<!-- 装修用户组件:用户资产 -->
|
||||||
<template>
|
<template>
|
||||||
<!-- TODO @惠智造:代码合并有问题,可以看看 -->
|
|
||||||
<view class="ss-wallet-menu-wrap ss-flex ss-col-center">
|
<view class="ss-wallet-menu-wrap ss-flex ss-col-center">
|
||||||
<view class="menu-item ss-flex-1 ss-flex-col ss-row-center ss-col-center"
|
<view class="menu-item ss-flex-1 ss-flex-col ss-row-center ss-col-center"
|
||||||
@tap="sheep.$router.go('/pages/user/wallet/money')">
|
@tap="sheep.$router.go('/pages/user/wallet/money')">
|
||||||
<view class="value-box ss-flex ss-col-bottom">
|
<view class="value-box ss-flex ss-col-bottom">
|
||||||
<view class="value-text ss-line-1">{{ userInfo.money || '0.00' }}</view>
|
<view class="value-text ss-line-1">{{ fen2yuan(userInfo.money) || '0.00' }}</view>
|
||||||
<view class="unit-text ss-m-l-6">元</view>
|
<view class="unit-text ss-m-l-6">元</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="menu-title ss-m-t-28">账户余额</view>
|
<view class="menu-title ss-m-t-28">账户余额</view>
|
||||||
|
@ -47,6 +46,7 @@
|
||||||
ref
|
ref
|
||||||
} from 'vue';
|
} from 'vue';
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
|
import { fen2yuan } from '../../hooks/useGoods';
|
||||||
|
|
||||||
const userInfo = computed(() => sheep.$store('user').userInfo);
|
const userInfo = computed(() => sheep.$store('user').userInfo);
|
||||||
const numData = computed(() => sheep.$store('user').numData);
|
const numData = computed(() => sheep.$store('user').numData);
|
||||||
|
|
|
@ -85,56 +85,55 @@ export default class SheepPay {
|
||||||
|
|
||||||
// 预支付
|
// 预支付
|
||||||
prepay(channel) {
|
prepay(channel) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise(async (resolve, reject) => {
|
||||||
let data = {
|
let data = {
|
||||||
id: this.id,
|
id: this.id,
|
||||||
channelCode: channel,
|
channelCode: channel,
|
||||||
channelExtras: {}
|
channelExtras: {}
|
||||||
};
|
};
|
||||||
if (uni.getStorageSync('openid')) {
|
// 特殊逻辑:微信公众号、小程序支付时,必须传入 openid
|
||||||
data.openid = uni.getStorageSync('openid');
|
if (['wx_pub'].includes(channel)) {
|
||||||
|
const openid = await sheep.$platform.useProvider('wechat').getOpenid();
|
||||||
|
// 如果获取不到 openid,微信无法发起支付,此时需要引导
|
||||||
|
if (!openid) {
|
||||||
|
this.bindWeixin();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
data.channelExtras.openid = openid;
|
||||||
}
|
}
|
||||||
PayOrderApi.submitOrder(data).then((res) => {
|
PayOrderApi.submitOrder(data).then((res) => {
|
||||||
// 成功时
|
// 成功时
|
||||||
res.code === 0 && resolve(res);
|
res.code === 0 && resolve(res);
|
||||||
// 失败时
|
// 失败时
|
||||||
|
// TODO 芋艿:这块需要在测试下哈;
|
||||||
if (res.code !== 0 && res.msg === 'miss_openid') {
|
if (res.code !== 0 && res.msg === 'miss_openid') {
|
||||||
uni.showModal({
|
this.bindWeixin();
|
||||||
title: '微信支付',
|
|
||||||
content: '请先绑定微信再使用微信支付',
|
|
||||||
success: function (res) {
|
|
||||||
if (res.confirm) {
|
|
||||||
sheep.$platform.useProvider('wechat').bind();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// #ifdef H5
|
// #ifdef H5
|
||||||
// 微信公众号JSSDK支付 TODO 芋艿:待接入
|
// 微信公众号 JSSDK 支付
|
||||||
async wechatOfficialAccountPay() {
|
async wechatOfficialAccountPay() {
|
||||||
let that = this;
|
let { code, data } = await this.prepay('wx_pub');
|
||||||
let { error, data, msg } = await this.prepay();
|
if (code !== 0) {
|
||||||
if (error !== 0) {
|
|
||||||
console.log('支付错误', msg);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$wxsdk.wxpay(data.pay_data, {
|
// let that = this;
|
||||||
|
$wxsdk.wxpay(data, {
|
||||||
success: () => {
|
success: () => {
|
||||||
that.payResult('success');
|
this.payResult('success');
|
||||||
},
|
},
|
||||||
cancel: () => {
|
cancel: () => {
|
||||||
sheep.$helper.toast('支付已手动取消');
|
this.$helper.toast('支付已手动取消');
|
||||||
},
|
},
|
||||||
fail: () => {
|
fail: () => {
|
||||||
that.payResult('fail');
|
this.payResult('fail');
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//浏览器微信H5支付 TODO 芋艿:待接入
|
// 浏览器微信H5支付 TODO 芋艿:待接入
|
||||||
async wechatWapPay() {
|
async wechatWapPay() {
|
||||||
const { error, data } = await this.prepay();
|
const { error, data } = await this.prepay();
|
||||||
if (error === 0) {
|
if (error === 0) {
|
||||||
|
@ -255,6 +254,20 @@ export default class SheepPay {
|
||||||
payState: resultType
|
payState: resultType
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 引导绑定微信
|
||||||
|
bindWeixin() {
|
||||||
|
uni.showModal({
|
||||||
|
title: '微信支付',
|
||||||
|
content: '请先绑定微信再使用微信支付',
|
||||||
|
success: function (res) {
|
||||||
|
if (res.confirm) {
|
||||||
|
sheep.$platform.useProvider('wechat').bind();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getPayMethods(channels) {
|
export function getPayMethods(channels) {
|
||||||
|
@ -295,10 +308,12 @@ export function getPayMethods(channels) {
|
||||||
// 1. 处理【微信支付】
|
// 1. 处理【微信支付】
|
||||||
const wechatMethod = payMethods[0];
|
const wechatMethod = payMethods[0];
|
||||||
if ((platform === 'WechatOfficialAccount' && channels.includes('wx_pub'))
|
if ((platform === 'WechatOfficialAccount' && channels.includes('wx_pub'))
|
||||||
|| platform === 'WechatMiniProgram' && channels.includes('wx_lite')
|
|| (platform === 'WechatMiniProgram' && channels.includes('wx_lite'))
|
||||||
|| platform === 'App' && channels.includes('wx_app')) {
|
|| (platform === 'App' && channels.includes('wx_app'))) {
|
||||||
wechatMethod.disabled = false;
|
wechatMethod.disabled = false;
|
||||||
}
|
}
|
||||||
|
wechatMethod.disabled = false; // TODO 芋艿:临时测试
|
||||||
|
|
||||||
// 2. 处理【支付宝支付】
|
// 2. 处理【支付宝支付】
|
||||||
const alipayMethod = payMethods[1];
|
const alipayMethod = payMethods[1];
|
||||||
if ((platform === 'WechatOfficialAccount' && channels.includes('alipay_wap'))
|
if ((platform === 'WechatOfficialAccount' && channels.includes('alipay_wap'))
|
||||||
|
|
|
@ -109,6 +109,19 @@ function setOpenid(openid) {
|
||||||
uni.setStorageSync('openid', openid);
|
uni.setStorageSync('openid', openid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获得 openid
|
||||||
|
async function getOpenid(force = false) {
|
||||||
|
let openid = uni.getStorageSync('openid');
|
||||||
|
if (!openid && force) {
|
||||||
|
const info = await getInfo();
|
||||||
|
if (info && info.openid) {
|
||||||
|
openid = info.openid;
|
||||||
|
setOpenid(openid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return openid;
|
||||||
|
}
|
||||||
|
|
||||||
// 获得社交信息
|
// 获得社交信息
|
||||||
async function getInfo() {
|
async function getInfo() {
|
||||||
const { code, data } = await SocialApi.getSocialUser(socialType);
|
const { code, data } = await SocialApi.getSocialUser(socialType);
|
||||||
|
@ -195,5 +208,6 @@ export default {
|
||||||
bindUserPhoneNumber,
|
bindUserPhoneNumber,
|
||||||
mobileLogin,
|
mobileLogin,
|
||||||
getInfo,
|
getInfo,
|
||||||
|
getOpenid,
|
||||||
subscribeMessage,
|
subscribeMessage,
|
||||||
};
|
};
|
||||||
|
|
|
@ -75,6 +75,19 @@ function setOpenid(openid) {
|
||||||
uni.setStorageSync('openid', openid);
|
uni.setStorageSync('openid', openid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获得 openid
|
||||||
|
async function getOpenid(force = false) {
|
||||||
|
let openid = uni.getStorageSync('openid');
|
||||||
|
if (!openid && force) {
|
||||||
|
const info = await getInfo();
|
||||||
|
if (info && info.openid) {
|
||||||
|
openid = info.openid;
|
||||||
|
setOpenid(openid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return openid;
|
||||||
|
}
|
||||||
|
|
||||||
// 获得社交信息
|
// 获得社交信息
|
||||||
async function getInfo() {
|
async function getInfo() {
|
||||||
const { code, data } = await SocialApi.getSocialUser(socialType);
|
const { code, data } = await SocialApi.getSocialUser(socialType);
|
||||||
|
@ -90,5 +103,6 @@ export default {
|
||||||
bind,
|
bind,
|
||||||
unbind,
|
unbind,
|
||||||
getInfo,
|
getInfo,
|
||||||
|
getOpenid,
|
||||||
jssdk: $wxsdk,
|
jssdk: $wxsdk,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue