|
|
@@ -3237,59 +3237,121 @@ class UserRepository extends BaseRepository
|
|
3237
|
3237
|
|
|
3238
|
3238
|
}
|
|
3239
|
3239
|
|
|
3240
|
|
- /*微信登录验证
|
|
3241
|
|
- $openid 微信openid
|
|
3242
|
|
- */
|
|
3243
|
|
- public function wechatCheck($openid, $nickname = null, $headimgurl = null){
|
|
3244
|
|
- $user = Db::name("user")->where(['wechat_user_id'=>$openid])->find();
|
|
3245
|
|
- //判断是否是第一次登录
|
|
3246
|
|
- if($user){
|
|
3247
|
|
- //成功登录业务逻辑
|
|
3248
|
|
- if (!$user['account']) {
|
|
|
3240
|
+ /**
|
|
|
3241
|
+ * 微信登录验证
|
|
|
3242
|
+ * @param $openid
|
|
|
3243
|
+ * @param $nickname
|
|
|
3244
|
+ * @param $headimgurl
|
|
|
3245
|
+ * @return array
|
|
|
3246
|
+ * @throws DataNotFoundException
|
|
|
3247
|
+ * @throws DbException
|
|
|
3248
|
+ * @throws ModelNotFoundException
|
|
|
3249
|
+ */
|
|
|
3250
|
+ public function wechatCheck($openid, $nickname = null, $headimgurl = null): array
|
|
|
3251
|
+ {
|
|
|
3252
|
+ // 1、判断 该openID 是否绑定多个用户
|
|
|
3253
|
+ $userDataList = Db::name("user")->where(['wechat_user_id' => $openid])->select()->toArray();
|
|
|
3254
|
+ $normalUserDataList = [];
|
|
|
3255
|
+ $normalUserData = [];
|
|
|
3256
|
+ if (!empty($userDataList)) {
|
|
|
3257
|
+ $resetWechatUserIdList = [];
|
|
|
3258
|
+ foreach ($userDataList as $userdata) {
|
|
|
3259
|
+ if ($userdata['is_del'] == 1) {
|
|
|
3260
|
+ $resetWechatUserIdList[] = $userdata['uid'];
|
|
|
3261
|
+ } else {
|
|
|
3262
|
+ $normalUserDataList[] = $userdata;
|
|
|
3263
|
+ }
|
|
|
3264
|
+ }
|
|
|
3265
|
+ if (!empty($resetWechatUserIdList)) {
|
|
|
3266
|
+ Db::name("user")->whereIn('uid', $resetWechatUserIdList)->update(["wechat_user_id" => 0]);
|
|
|
3267
|
+ Db::name("user_extract_openid")->whereIn('uid', $resetWechatUserIdList)->delete();
|
|
|
3268
|
+ Db::name("user_account")->whereIn('uid', $resetWechatUserIdList)->delete();
|
|
|
3269
|
+ }
|
|
|
3270
|
+ if (count($normalUserDataList) > 1) {
|
|
|
3271
|
+ return ['code' => 400, 'msg' => '当前账号异常,请联系客服!'];
|
|
|
3272
|
+ } else if (count($normalUserDataList) < 1) {
|
|
3249
|
3273
|
return ['code' => 400, 'msg' => '请绑定手机号'];
|
|
3250
|
3274
|
} else {
|
|
3251
|
|
- $existUid = Db::name('user_extract_openid')->where('openid', $openid)->value('uid');
|
|
3252
|
|
- if (!empty($existUid) && $existUid != $user['uid']) {
|
|
3253
|
|
- $existUserData = Db::name("user")->where("uid", $existUid)->find();
|
|
3254
|
|
- if ($existUserData['is_del'] != 1) {
|
|
3255
|
|
- return ['code' => 400, 'msg' => '此微信号已被绑定'];
|
|
|
3275
|
+ $normalUserData = array_shift($normalUserDataList);
|
|
|
3276
|
+ }
|
|
|
3277
|
+ } else {
|
|
|
3278
|
+ return ['code' => 400, 'msg' => '请绑定手机号'];
|
|
|
3279
|
+ }
|
|
|
3280
|
+
|
|
|
3281
|
+ // 2、更新 user_extract_openid
|
|
|
3282
|
+ $existOpenIdDataList = Db::name('user_extract_openid')->where('openid', $openid)->select()->toArray();
|
|
|
3283
|
+ $normalUserDataListByExtractOpenid = [];
|
|
|
3284
|
+ $normalUserDataByExtractOpenid = [];
|
|
|
3285
|
+ if (!empty($existOpenIdDataList)) {
|
|
|
3286
|
+ $existUidList = array_column($existOpenIdDataList, 'uid');
|
|
|
3287
|
+ // 查询 用户
|
|
|
3288
|
+ $existUserData = Db::name("user")->whereIn("uid", $existUidList)->select()->toArray();
|
|
|
3289
|
+ if (!empty($existUserData)) {
|
|
|
3290
|
+ $resetWechatUserIdList = [];
|
|
|
3291
|
+ $deleteUserExtractOpenidByUidList = [];
|
|
|
3292
|
+ foreach ($existUserData as $userdata) {
|
|
|
3293
|
+ if ($userdata['is_del'] == 1) {
|
|
|
3294
|
+ $resetWechatUserIdList[] = $userdata['uid'];
|
|
3256
|
3295
|
} else {
|
|
3257
|
|
- Db::name('user_extract_openid')->where('openid',$openid)->delete();
|
|
3258
|
|
- Db::name("user")->where(['uid' => $existUid])->update(["wechat_user_id" => 0]);
|
|
|
3296
|
+ // if ($userdata['wechat_user_id'] == $openid) {
|
|
|
3297
|
+ $normalUserDataListByExtractOpenid[] = $userdata;
|
|
|
3298
|
+ // } else {
|
|
|
3299
|
+ // $deleteUserExtractOpenidByUidList[] = $userdata['uid'];
|
|
|
3300
|
+ // }
|
|
3259
|
3301
|
}
|
|
3260
|
3302
|
}
|
|
3261
|
|
- $check = Db::name('user_extract_openid')->where('uid', $user['uid'])->value('openid');
|
|
3262
|
|
- if (!empty($check)) {
|
|
3263
|
|
- if ($check != $openid) {
|
|
3264
|
|
- return ['code' => 400, 'msg' => '当前用户已绑定其他微信号'];
|
|
3265
|
|
- }
|
|
3266
|
|
- } else {
|
|
3267
|
|
- Db::name("user_extract_openid")->insert([
|
|
3268
|
|
- 'uid' => $user['uid'],
|
|
3269
|
|
- 'openid' => $openid,
|
|
3270
|
|
- 'type' => 1
|
|
3271
|
|
- ]);
|
|
|
3303
|
+ // 已删除的用户
|
|
|
3304
|
+ if (!empty($resetWechatUserIdList)) {
|
|
|
3305
|
+ Db::name("user")->whereIn('uid', $resetWechatUserIdList)->update(["wechat_user_id" => 0]);
|
|
|
3306
|
+ Db::name("user_extract_openid")->whereIn('uid', $resetWechatUserIdList)->delete();
|
|
|
3307
|
+ Db::name("user_account")->whereIn('uid', $resetWechatUserIdList)->delete();
|
|
3272
|
3308
|
}
|
|
3273
|
|
- $data2 = [];
|
|
3274
|
|
- if (!is_null($nickname) || !is_null($headimgurl)) {
|
|
3275
|
|
- $data2 = [
|
|
3276
|
|
- "type" => 1,
|
|
3277
|
|
- "uid" => $user['uid'],
|
|
3278
|
|
- "nickname" => $nickname ?: '',
|
|
3279
|
|
- "avater" => $headimgurl ?: '',
|
|
3280
|
|
- ];
|
|
|
3309
|
+ // // 用户表绑定的 微信ID 和 微信授权表中的不一致
|
|
|
3310
|
+ // if (!empty($deleteUserExtractOpenidByUidList)) {
|
|
|
3311
|
+ // Db::name("user_extract_openid")->whereIn('uid', $resetWechatUserIdList)->where('openid', $openid)->delete();
|
|
|
3312
|
+ // }
|
|
|
3313
|
+ if (count($normalUserDataListByExtractOpenid) > 1) {
|
|
|
3314
|
+ return ['code' => 400, 'msg' => '当前账号异常,请联系客服!'];
|
|
|
3315
|
+ } else {
|
|
|
3316
|
+ $normalUserDataByExtractOpenid = array_shift($normalUserDataListByExtractOpenid);
|
|
3281
|
3317
|
}
|
|
3282
|
|
- $this->updateUser(
|
|
3283
|
|
- $user['uid'],
|
|
3284
|
|
- ['wechat_user_id' => $openid],
|
|
3285
|
|
- $data2
|
|
3286
|
|
- );
|
|
|
3318
|
+ } else {
|
|
|
3319
|
+ Db::name('user_extract_openid')->where('openid', $openid)->delete();
|
|
|
3320
|
+ }
|
|
|
3321
|
+ }
|
|
3287
|
3322
|
|
|
3288
|
|
- return ['code' => 200, 'msg' => '登陆成功', 'user' => $user];
|
|
|
3323
|
+ if (empty($normalUserDataByExtractOpenid)) {
|
|
|
3324
|
+ if (!empty($normalUserData)) {
|
|
|
3325
|
+ Db::name("user_extract_openid")->insert([
|
|
|
3326
|
+ 'uid' => $normalUserData['uid'],
|
|
|
3327
|
+ 'openid' => $openid,
|
|
|
3328
|
+ 'type' => 1
|
|
|
3329
|
+ ]);
|
|
|
3330
|
+ } else {
|
|
|
3331
|
+ return ['code' => 400, 'msg' => '请绑定手机号'];
|
|
|
3332
|
+ }
|
|
|
3333
|
+ } else {
|
|
|
3334
|
+ if ($normalUserDataByExtractOpenid['uid'] != $normalUserData['uid']) {
|
|
|
3335
|
+ return ['code' => 400, 'msg' => '当前账号异常,请联系客服!'];
|
|
3289
|
3336
|
}
|
|
3290
|
|
- }else{
|
|
3291
|
|
- return ['code' => 400, 'msg' => '请绑定手机号'];
|
|
3292
|
3337
|
}
|
|
|
3338
|
+
|
|
|
3339
|
+ $data2 = [];
|
|
|
3340
|
+ if (!is_null($nickname) || !is_null($headimgurl)) {
|
|
|
3341
|
+ $data2 = [
|
|
|
3342
|
+ "type" => 1,
|
|
|
3343
|
+ "uid" => $normalUserData['uid'],
|
|
|
3344
|
+ "nickname" => $nickname ?: '',
|
|
|
3345
|
+ "avater" => $headimgurl ?: '',
|
|
|
3346
|
+ ];
|
|
|
3347
|
+ }
|
|
|
3348
|
+ $this->updateUser(
|
|
|
3349
|
+ $normalUserData['uid'],
|
|
|
3350
|
+ ['wechat_user_id' => $openid],
|
|
|
3351
|
+ $data2
|
|
|
3352
|
+ );
|
|
|
3353
|
+
|
|
|
3354
|
+ return ['code' => 200, 'msg' => '登录成功', 'user' => $normalUserData];
|
|
3293
|
3355
|
}
|
|
3294
|
3356
|
|
|
3295
|
3357
|
/**
|