Ver Fonte

no message

lihang há 2 semanas atrás
pai
commit
3feac2a3cf

+ 1 - 1
.idea/claudeCodeTabState.xml

@@ -7,7 +7,7 @@
           <value>
             <TabSessionState>
               <option name="provider" value="claude" />
-              <option name="sessionId" value="cca3df8c-36b5-4f84-a5c8-aac4e4a1b97e" />
+              <option name="sessionId" value="05ad7d67-7307-4d0f-86a3-79c287f9ba6d" />
               <option name="cwd" value="$PROJECT_DIR$" />
               <option name="model" value="claude-sonnet-4-7[1m]" />
               <option name="permissionMode" value="bypassPermissions" />

+ 10 - 3
app/Http/Controllers/AdminApi/MemberController.php

@@ -69,6 +69,7 @@ class MemberController extends AdminController
 
         $authType = 'PSN';
         $data = compact('name','phone','id_number','authType');
+        $phoneChanged = false;//手机号是否发生变更
 
         if(empty($id)){//不存在id就创建
             //检查该身份证号是否存在
@@ -80,7 +81,7 @@ class MemberController extends AdminController
             $res = Member::create($data);
             $m_id = $res->{'id'};
         }else{//存在就更新
-            $info = Member::where('id',$id)->select(['id'])->first();
+            $info = Member::where('id',$id)->select(['id','phone'])->first();
             if (empty($info)) {
                 return $this->apiResponseError('没有找到该记录');
             }
@@ -89,11 +90,17 @@ class MemberController extends AdminController
             if (!empty($member)){
                 return $this->apiResponseError('身份证号已存在');
             }
+            $phoneChanged = $info->{'phone'} != $phone;
             $res = $info->update($data);
             $m_id = $id;
         }
-        //查询个人认证信息
-        ESignServer::creatServer()->personsidentityinfo($m_id,$phone,$name,$id_number);
+        if ($phoneChanged) {
+            //手机号变更:同步e签宝侧账号手机号(重新下发实名认证链接,用户完成认证后换绑)
+            ESignServer::creatServer()->psnphonechange($m_id,$phone,$name,$id_number);
+        } else {
+            //查询个人认证信息
+            ESignServer::creatServer()->personsidentityinfo($m_id,$phone,$name,$id_number);
+        }
 
         if ($res) {
             return $this->apiResponseSuccess('操作成功');

+ 25 - 0
app/Servers/ESign/ESignServer.php

@@ -198,6 +198,31 @@ class ESignServer
     }
 
 
+    /**
+     * 个人账号手机号变更处理
+     * e签宝侧已实名账号的手机号必须由用户重新实名认证才能换绑,这里重置认证链接并重新下发认证短信
+     * @param $m_id //本地用户id
+     * @param $phone //新手机号
+     * @param $psnName //认证人姓名
+     * @param $id_number //认证人身份证号
+     * @return bool
+     */
+    function psnphonechange($m_id,$phone,$psnName,$id_number)
+    {
+        $info = Member::where('id',$m_id)->select(['id','psnId','realnameStatus'])->first();
+        //未认证/未实名的用户走正常认证流程即可,认证链接本身就带的是新手机号
+        if (empty($info) || empty($info->{'psnId'}) || $info->{'realnameStatus'} != 1) {
+            $this->personsidentityinfo($m_id,$phone,$psnName,$id_number);
+            return true;
+        }
+        //清掉认证链接缓存及旧链接,使 psnauthurl 能重新生成并下发认证短信
+        RedisDataServer::creatServer()->delData($m_id.'_memberUrl');
+        Member::where('id',$m_id)->update(['authUrl'=>'','authShortUrl'=>'']);
+        //携带原 psnId,e签宝会把认证绑定到原账号,用户完成后即换绑为新手机号
+        return $this->psnauthurl($m_id,$phone,$psnName,$id_number,$info->{'psnId'});
+    }
+
+
     /**
      * 获取用户签章列表
      * @param $mId