fix(payment): 修复微信支付时openid绑定问题

- 新增确保支付前openid正确绑定的方法,解决支付账号不一致问题
- 在创建微信支付订单前强制刷新openid,防止旧微信账号导致支付失败
- 在自动登录后补充openid绑定步骤,确保支付所需的openid存在
- 设计为非阻塞流程,避免网络异常导致支付阻塞
- 仅针对微信支付触发,其他支付方式不受影响
This commit is contained in:
2026-04-25 12:59:59 +08:00
parent 4d96ca4569
commit 94e1e05fdf
3 changed files with 110 additions and 1 deletions

View File

@@ -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);
// 自动登录成功后,补齐 openidJSAPI 微信支付必需)
// 防止后续支付时报"下单账号与支付账号不一致"
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 {