forked from gxwebsoft/mp-10550
fix(payment): 修复微信支付时openid绑定问题
- 新增确保支付前openid正确绑定的方法,解决支付账号不一致问题 - 在创建微信支付订单前强制刷新openid,防止旧微信账号导致支付失败 - 在自动登录后补充openid绑定步骤,确保支付所需的openid存在 - 设计为非阻塞流程,避免网络异常导致支付阻塞 - 仅针对微信支付触发,其他支付方式不受影响
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { useState, useEffect } from 'react';
|
||||
import Taro from '@tarojs/taro';
|
||||
import { User } from '@/api/system/user/model';
|
||||
import { getUserInfo, updateUserInfo, loginByOpenId } from '@/api/layout';
|
||||
import { getUserInfo, updateUserInfo, loginByOpenId, getWxOpenId } from '@/api/layout';
|
||||
import { TenantId } from '@/config/app';
|
||||
import { handleInviteRelation } from '@/utils/invite';
|
||||
|
||||
@@ -27,6 +27,24 @@ export const useUser = () => {
|
||||
setUser(data.user);
|
||||
setIsLoggedIn(true);
|
||||
|
||||
// 自动登录成功后,补齐 openid(JSAPI 微信支付必需)
|
||||
// 防止后续支付时报"下单账号与支付账号不一致"
|
||||
if (!data.user?.openid) {
|
||||
try {
|
||||
const freshCode = await new Promise<string | undefined>((resolve, reject) => {
|
||||
Taro.login({
|
||||
success: (r) => resolve(r.code as string),
|
||||
fail: () => resolve(undefined),
|
||||
});
|
||||
});
|
||||
if (freshCode) {
|
||||
await getWxOpenId({ code: freshCode });
|
||||
}
|
||||
} catch (_e) {
|
||||
console.warn('自动登录后绑定 openid 失败');
|
||||
}
|
||||
}
|
||||
|
||||
// 处理邀请关系
|
||||
if (data.user?.userId) {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user