panghu 1 жил өмнө
parent
commit
22424fa141

+ 0 - 2
app/Console/Commands/SignContractCommand.php

@@ -66,8 +66,6 @@ class SignContractCommand extends Command
             $result = ESignContractServer::creatServer()->setContractContract($sign_id,$file_id,$sign_json,$file_name);
             if ($result['code'] == 0){
                 SignContract::where('id',$sign_id)->where('is_del',0)->update(['status'=>10,'msg'=>$result['msg']]);
-            }else{
-                SignContract::where('id',$sign_id)->where('is_del',0)->update(['status'=>1]);
             }
         }
 

+ 68 - 4
app/Servers/ESign/ESignContractServer.php

@@ -170,6 +170,7 @@ class ESignContractServer
 
 
         $signers=[];
+        $signUrl = [];
         foreach ($signData as $value){
             //对应关键字做xy坐标匹配
             foreach ($positionData as $item){
@@ -186,11 +187,16 @@ class ESignContractServer
                 }
             }
 
-            $signersData = [];
             //签署方是机构还是个人
             if ($value['auth_type'] == 'PSN'){
                 $member = Member::where('psnId',$value['id_no'])->first();
-                //获取企业签章
+                //记录需要手动签署的
+                $signUrl[]=[
+                    'promissoryName'=>$member['name'],
+                    'psnAccount'=>$member['phone'],
+                    'orgName'=>'',
+                ];
+                //获取签章
                 $m_id = $member->{'id'};
                 $seal=MemberSeal::where('m_id',$m_id)->where('seal_status',1)->select(['id','seal_id'])->first();
                 //印章ID
@@ -223,8 +229,13 @@ class ESignContractServer
                     ],
                 ];
             }else{
-                $signerType = 1;
                 $firm = Firm::where('orgId',$value['id_no'])-first();
+                //记录需要手动签署的
+                $signUrl[]=[
+                    'promissoryName'=>$firm['legal_name'],
+                    'psnAccount'=>$firm['phone'],
+                    'orgName'=>$firm['firm_name'],
+                ];
                 //获取用户签章
                 $firm_id = $firm->{'id'};
                 $seal=FirmSeal::where('firm_id',$firm_id)->where('seal_type','CONTRACT')->select(['id','seal_id'])->first();
@@ -282,7 +293,15 @@ class ESignContractServer
         $flowId=  $this->createByFile($fileId,$file_name.'.pdf',$file_name,$signers);
 
         if($flowId){
-            SignContract::where('id',$sign_id)->update(['flow_id'=>$flowId]);
+            SignContract::where('id',$sign_id)->update(['flow_id'=>$flowId,'status'=>1]);
+            foreach ($signUrl as $item){
+                $urlRet= $this->getSignUrl($flowId,$item['psnAccount'],$item['orgName']);
+                if($urlRet){
+                    $content='尊敬的'.$item['promissoryName'].',您有待签署合同《'.$file_name.'》,点击签署 '.$urlRet;
+                    SmsServer::creatServer()->sendContent($item['psnAccount'],$content);
+                    SignContract::where('id',$sign_id)->update(['sign_url'=>$urlRet]);
+                }
+            }
 
             return ['code'=>1,'msg'=>'发起签署成功'];
         }else{
@@ -342,4 +361,49 @@ class ESignContractServer
         EsignLogHelper::printMsg("**********基于文件发起签署调用结束**********");
         return $signFlowId;
     }
+
+    /**
+     * 合同签署链接
+     * @param $flowId
+     * @param $psnAccount
+     * @param $orgName
+     * @return null
+     */
+    function getSignUrl($flowId,$psnAccount,$orgName){
+        EsignLogHelper::printMsg("**********获取合同文件签署链接开始**********");
+        $config=$this->config;
+
+        $apiaddr="/v3/sign-flow/%s/sign-url";
+        $apiaddr = sprintf($apiaddr,$flowId);
+        $requestType = HttpEmun::POST;
+        $data = [
+            "signFlowId" =>$flowId,
+            "clientType" =>"ALL",
+            "needLogin" =>false,
+            "operator" => [
+                "psnAccount" =>$psnAccount
+            ],
+            'organization'=>[
+                'orgName'=>$orgName
+            ],
+            "urlType" =>2
+        ];
+        $paramStr = json_encode($data);
+
+        $signAndBuildSignAndJsonHeader = EsignHttpHelper::signAndBuildSignAndJsonHeader($config['eSignAppId'], $config['eSignAppSecret'], $paramStr, $requestType, $apiaddr);
+
+        EsignLogHelper::printMsg($signAndBuildSignAndJsonHeader);
+        $response = EsignHttpHelper::doCommHttp($config['eSignHost'], $apiaddr, $requestType, $signAndBuildSignAndJsonHeader, $paramStr);
+        EsignLogHelper::printMsg($response->getStatus());
+        EsignLogHelper::printMsg($response->getBody());
+        $url= null;
+        if($response->getStatus() == 200){
+            $url =  json_decode($response->getBody())->data->shortUrl;
+            EsignLogHelper::printMsg("获取合同文件签署链接调用成功,url: ".$url);
+        }else{
+            EsignLogHelper::printMsg("获取合同文件签署链接接口调用失败,HTTP错误码".$response->getStatus());
+        }
+        EsignLogHelper::printMsg("**********获取合同文件签署链接调用结束**********");
+        return  $url;
+    }
 }