微信支付:增加 weixin 未绑定的提示引导

pull/32/MERGE
YunaiV 2023-12-24 00:03:24 +08:00
parent 3e9dccdf68
commit f90096e20a
5 changed files with 70 additions and 27 deletions

View File

@ -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"

View File

@ -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);

View File

@ -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'))

View File

@ -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,
}; };

View File

@ -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,
}; };