Просмотр исходного кода

fix: JSAPI支付改用公众号appId解决未配置公共公众号错误

MyFramework User 3 месяцев назад
Родитель
Сommit
9b7f68164a

+ 2 - 1
server/src/modules/payment/payment.controller.ts

@@ -304,7 +304,8 @@ router.post('/alipay/qrcode', authMiddleware, async (ctx: Context) => {
 // 生成微信 OAuth 授权链接(前端跳转到微信获取 code)
 router.get('/wechat/oauth-url', async (ctx: Context) => {
   const { redirect } = ctx.query as { redirect?: string };
-  const appId = process.env.WECHAT_APP_ID;
+  // OAuth授权必须使用公众号appId
+  const appId = process.env.WECHAT_PUBLIC_APP_ID || process.env.WECHAT_APP_ID;
 
   if (!appId) {
     ctx.body = { code: -1, message: '未配置微信公众号', data: null };

+ 4 - 2
server/src/modules/payment/payment.service.ts

@@ -153,7 +153,8 @@ function getWechatPay(): any | null {
     return null;
   }
 
-  const appId = process.env.WECHAT_APP_ID;
+  // JSAPI支付必须使用公众号appId,不能用小程序appId
+  const appId = process.env.WECHAT_PUBLIC_APP_ID || process.env.WECHAT_APP_ID;
   const mchId = process.env.WECHAT_MCH_ID;
   const serialNo = process.env.WECHAT_SERIAL_NO;
   const apiv3Key = process.env.WECHAT_APIV3_KEY;
@@ -807,7 +808,8 @@ function httpsGet(url: string): Promise<any> {
 // 获取微信公众号 access_token(带缓存)
 // 通过 OAuth code 获取用户 openid
 export async function getWechatOpenid(code: string): Promise<string | null> {
-  const appId = process.env.WECHAT_APP_ID;
+  // OAuth获取openid必须使用公众号appId
+  const appId = process.env.WECHAT_PUBLIC_APP_ID || process.env.WECHAT_APP_ID;
   const appSecret = process.env.WECHAT_APP_SECRET;
 
   if (!appId || !appSecret) {