Bladeren bron

修复登录主体不一致导致获取openid无区分bug

HHE-5476 1 dag geleden
bovenliggende
commit
623b9595ea
4 gewijzigde bestanden met toevoegingen van 95 en 37 verwijderingen
  1. 31 21
      api/public.js
  2. 8 4
      api/user.js
  3. 5 2
      config/app.js
  4. 51 10
      pages/users/login/index.vue

+ 31 - 21
api/public.js

@@ -1,11 +1,16 @@
 import request from "@/utils/request.js";
 import wechat from "@/libs/wechat.js";
+import { APP_CODE } from "@/config/app.js";
 /**
  * 获取微信公众号js配置
  * @returns {*}
  */
 export function getWechatConfig() {
-  return request.get("wechat/config",{ url: encodeURIComponent(wechat.signLink()) },{ noAuth: true });
+  return request.get(
+    "wechat/config",
+    { url: encodeURIComponent(wechat.signLink()) },
+    { noAuth: true },
+  );
 }
 
 /**
@@ -13,30 +18,32 @@ export function getWechatConfig() {
  * @returns {*}
  */
 export function wechatAuth(code, spread) {
-	var reg=/^[0-9]+.?[0-9]*$/; //判断字符串是否为数字 ,判断正整数用/^[1-9]+[0-9]*]*$/
-	spread = reg.test(spread) ? spread : 0;
+  var reg = /^[0-9]+.?[0-9]*$/; //判断字符串是否为数字 ,判断正整数用/^[1-9]+[0-9]*]*$/
+  spread = reg.test(spread) ? spread : 0;
   return request.get(
-    "wechat/authorize/login?code=" + code + "&spread_spid=" + spread, {},
-    { noAuth: true }
+    "wechat/authorize/login?code=" + code + "&spread_spid=" + spread,
+    {},
+    { noAuth: true },
   );
 }
 
 /**
  * 获取登录授权login
- * 
-*/
-export function getLogo()
-{
-	// wechat/get_logo
-  return request.get('wechat/getLogo', {}, { noAuth : true});
+ *
+ */
+export function getLogo() {
+  // wechat/get_logo
+  return request.get("wechat/getLogo", {}, { noAuth: true });
 }
 
 /**
  * 小程序用户登录
  * @param data object 小程序用户登录信息
  */
-export function login(code,data) {
-  return request.post("wechat/authorize/program/login?code="+code, data, { noAuth : true });
+export function login(code, data) {
+  return request.post("wechat/authorize/program/login?code=" + code, data, {
+    noAuth: true,
+  });
 }
 /**
  * 分享
@@ -59,7 +66,7 @@ export function follow() {
  * @retins {*}
  * */
 export function imageBase64(image) {
-  return request.post("qrcode/base64",image,{ noAuth: true },1);
+  return request.post("qrcode/base64", image, { noAuth: true }, 1);
 }
 
 /**
@@ -82,8 +89,12 @@ export function kefuConfig() {
  * 微信(公众号,小程序)绑定手机号
  * @param {Object} data
  */
-export function getUserPhone(data){
-	return request.post('wechat/register/binding/phone',data,{noAuth : true});
+export function getUserPhone(data) {
+  return request.post(
+    "wechat/register/binding/phone",
+    { ...data, openType: APP_CODE },
+    { noAuth: true },
+  );
 }
 
 /**
@@ -91,7 +102,7 @@ export function getUserPhone(data){
  * @param {Object} data
  */
 export function appAuth(data) {
-	return request.post("wechat/authorize/app/login", data, { noAuth : true });
+  return request.post("wechat/authorize/app/login", data, { noAuth: true });
 }
 
 /**
@@ -99,14 +110,13 @@ export function appAuth(data) {
  * @param {Object} data
  */
 export function appleLogin(data) {
-	return request.post("ios/login", data, { noAuth : true });
+  return request.post("ios/login", data, { noAuth: true });
 }
 
-
 /**
  * 苹果绑定手机号
  * @param {Object} data
  */
 export function iosBinding(data) {
-	return request.post("ios/binding/phone", data, { noAuth : true });
-}
+  return request.post("ios/binding/phone", data, { noAuth: true });
+}

+ 8 - 4
api/user.js

@@ -1,5 +1,6 @@
 import request from "@/utils/request.js";
 import Cache from "@/utils/cache.js";
+import { APP_CODE } from "@/config/app.js";
 /**
  * 获取用户信息
  *
@@ -48,8 +49,8 @@ export function getOtherUserInfo(id) {
  * 获取用户openId
  *
  */
-export function getUserOpenId(data) {
-  return request.get("wxpay/v2/mini/openid", data);
+export function getUserOpenId(code) {
+  return request.get(`wxpay/v2/mini/openid?code=${code}&type=${APP_CODE}`);
 }
 /**
  * h5用户手机号注册
@@ -217,5 +218,8 @@ export function getFaceVerify(data) {
  *
  */
 export function wxLogin(data) {
-  return request.post('login/loginAuthorize', data, {noAuth:true,noVerify:true});
-}
+  return request.post("login/loginAuthorize", data, {
+    noAuth: true,
+    noVerify: true,
+  });
+}

+ 5 - 2
config/app.js

@@ -8,8 +8,8 @@ let share = "https://www.shuibeibyg.com";
 let imgUrl =
   "https://sb-admin.oss-cn-shenzhen.aliyuncs.com/shuibei-mini/new-mini/"; //服務器上图片地址
 
-// export const H5_BASE_URL = "http://192.168.3.10:5174"; // 本地测试
-export const H5_BASE_URL = "http://192.168.3.16:5173"; // 本地测试
+export const H5_BASE_URL = "http://192.168.3.10:5174"; // 本地测试
+// export const H5_BASE_URL = "http://192.168.3.16:5173"; // 本地测试
 // export const H5_BASE_URL = "http://192.168.100.35:5175"; // 本地测试
 // export const H5_BASE_URL = "https://test.shuibeibyg.com/web-h5/"; // 测试环境H5地址
 // export const H5_BASE_URL = "https://www.shuibeibyg.com/web-h5/"; // 正式环境H5地址
@@ -17,6 +17,9 @@ export const H5_BASE_URL = "http://192.168.3.16:5173"; // 本地测试
 // PC 后台 API 地址(用于上传图片)
 export const HTTP_ADMIN_URL = domain;
 
+// 本小程序唯一码
+export const APP_CODE = "shangcheng";
+
 export const HTTP_REQUEST_URL = domain;
 export const HTTP_REQUEST_URL_SHARE = share;
 export const HTTP_REQUEST_URL_IMG = imgUrl;

+ 51 - 10
pages/users/login/index.vue

@@ -118,18 +118,20 @@
             open-type="getPhoneNumber"
             @getphonenumber="getPhoneNumberFn"
           >
-            <image
+            <!-- <image
               class="wx-icon"
               src="@/static/images/wxLogin.png"
               mode="widthFix"
-            ></image>
+            ></image> -->
+            手机号快捷登录
           </button>
           <button v-else class="logonWX" @click="checkPrivacyAgreement">
-            <image
+            <!-- <image
               class="wx-icon"
               src="@/static/images/wxLogin.png"
               mode="widthFix"
-            ></image>
+            ></image> -->
+            手机号快捷登录
           </button>
         </view>
       </view>
@@ -147,6 +149,7 @@ import {
   registerVerify,
   register,
   getUserInfo,
+  getUserOpenId,
 } from "@/api/user";
 import { getLogo, appAuth, appleLogin } from "@/api/public";
 import { VUE_APP_API_URL } from "@/utils";
@@ -461,6 +464,41 @@ const submit = async () => {
 // 		}
 // 	});
 // }
+
+// 获取用户授权code并调用getUserOpenId接口获取openId
+const getUserOpenIdHandler = async () => {
+  try {
+    const loginRes = await new Promise((resolve, reject) => {
+      uni.login({
+        provider: "weixin",
+        scope: "snsapi_base",
+        success: resolve,
+        fail: reject,
+      });
+      // #endif
+    });
+
+    if (!loginRes.code) {
+      throw new Error("获取授权code失败");
+    }
+    const code = loginRes.code;
+
+    const openIdRes = await getUserOpenId(code);
+    if (openIdRes.data && openIdRes.data.openId) {
+      Cache.set("userOpenId", openIdRes.data.openId, 86400);
+      console.log("获取openId成功:", openIdRes.data.openId);
+      return openIdRes.data.openId;
+    } else {
+      throw new Error("获取openId返回数据异常");
+    }
+  } catch (err) {
+    const message = err.message || "获取openId失败";
+    Toast({ title: message, icon: "none" });
+    console.error("获取openId失败:", err);
+    return null;
+  }
+};
+
 const getUserInfoFn = async (data) => {
   try {
     appStore.SETUID(data.uid);
@@ -468,6 +506,9 @@ const getUserInfoFn = async (data) => {
     appStore.UPDATE_USERINFO(res.data);
     userInfo.value = res.data;
 
+    // 获取openId
+    await getUserOpenIdHandler();
+
     // connect({
     // 	id: appStore.uid?.toString(),
     // 	data: {
@@ -493,7 +534,7 @@ const getUserInfoFn = async (data) => {
       Toast({
         title: "登录成功",
       });
-      backHome();
+      // backHome();
     }
   } catch (err) {
     console.error(err);
@@ -809,12 +850,12 @@ onMounted(() => {
       display: flex;
       align-items: center;
       justify-content: center;
-      // height: 88rpx;
-      background-color: #fff;
+      background-color: #f8c008;
       border: none !important;
       border-radius: 16rpx;
-      color: #ffffff;
-      font-size: 32rpx;
+      color: #fff;
+      padding: 11rpx 28rpx;
+      font-size: 30rpx;
     }
 
     .logonWX[disabled] {
@@ -892,4 +933,4 @@ onMounted(() => {
     height: 92rpx;
   }
 }
-</style>
+</style>