当前位置: 首页 > 后端技术 > PHP

thinkphp5第三方合同在线签约界面(放心签约)demo

时间:2023-03-29 18:25:20 PHP

测试环境域名:https://identitytest.fangxinq...key:GoexwR3Toesecret:72e9ff5d6a49491690a4cd22eb9402b1config配置//放心签配置'FXQ_APPID'=>'GoexwR3Toe','FXQ_SECRET'=>'72e9ff5d6a49491690a4cd22eb9402b1','FXQ_IDENTITYURL'=>'https://identitytest.fangxinqian.cn','FXQ_RESTAPI'=>'https://restapitest.fangxinqian.cn','FXQ_CONTRACT'=>'https://*****.pdf',Fangxinqian.phpgetToken();$data=["name"=>$realname,//真实姓名"rtype"=>1,//returntype(0:Base64,1:ossaddresslink,defaultis0)'color'=>0,//color(0:red,1:blue,2:black,defaultis0)'font'=>1,//font(0:仿宋体,1:斜体,2:粗体,默认为0)'type'=>0,//shape(0:长方形,1:正方形,默认为0)];$signString="";$data=$this->sortParam($data);$this->readParams($data,$signString);$nonce=date('YmdHis').rand(111,99999);$sign=md5(sha1(base64_encode($signString."||token=".$token."||nonce=".??$nonce)));$result=$this->serverSubmit(config('FXQ_RESTAPI').'/seal/v1/personal',$data,'post',$token,$nonce,$sign);//var_dump($result);如果(!empty($result)&&$result['code']=='10000'){return$result['data'];}返回假;}//公安第二要素publicfunctionshiming($realname,$idcardno){$token=$this->getToken();$data=["realName"=>$realname,//真实姓名"idCardNo"=>$idcardno,//身份证号码];$signString="";$data=$this->sortParam($data);$this->readParams($data,$signString);$nonce=date('YmdHis').rand(111,99999);$sign=md5(sha1(base64_encode($signString."||token=".$token."||nonce=".??$nonce)));$result=$this->serverSubmit(config('FXQ_IDENTITYURL').'/identity/v1/2',$data,'post',$token,$nonce,$sign);//var_dump($result);如果(!empty($result)&&$result['code']=='10000'){return$result['data']['state'];}返回2;}//单文件签名publicfunctionport_sign($realname,$idcardno,$seal){$token=$this->getToken();$data=["contract"=>config('FXQ_CONTRACT'),//url地址或base64"type"=>1,//合约返回类型(0:Base64,1:oss地址,默认为0)"signDate"=>['enable'=>1],//签名日期(印章底部)"signers"=>[["name"=>$realname,"idno"=>$idcardno,"seal"=>$seal,//image//"height"=>300,//只有传了这个参数才会盖印章,否则不盖印章(推荐值在100-600之间)"areas"=>[["x"=>114,"y"=>66,"page"=>1]]],];$signString="";//排序$data=$this->sortParam($data);//签名加密$this->readParams($data,$signString);//序列号,每次请求保证唯一,五分钟后不能重复$nonce=date('YmdHis').rand(111,99999);//echo"加密符号是--".$signString."||token=".$token."||nonce=".??$nonce."\n";$sign=md5(sha1(base64_encode($signString."||token=".$token."||nonce=".??$nonce)));//echo'发起签名----------------开始';//回显"\n";$result=$this->serverSubmit(config('FXQ_RESTAPI').'/contract/v1/port/sign',$data,'post',$token,$nonce,$sign);//var_dump($result);//echo'result:'.json_encode($result);//echo'发起签名结果:'.$result['msg'];//回显"\n";//echo'开始签名----------------结束';//回显"\n";返回$结果;}//获取认证tokenpublicfunctiongetToken(){$token=Cache::store('redis')->get('fangxinqian_token');if(empty($token)){$arr=["key"=>config('FXQ_APPID'),"secret"=>config('FXQ_SECRET')];$result=$this->serverSubmit(config('FXQ_IDENTITYURL').'/auth/v1/token',$arr);//var_dump($result);if(!empty($result)&&$result['code']=='10000'){Cache::store('redis')->set('fangxinqian_token',$result['data'],3600);返回$result['数据'];}}返回$token;}publicfunctionserverSubmit($url,$parameter,$re='post',$token="",$nonce="",$sign=""){//var_dump($url);$parameter=json_encode($parameter,true);if($token){$headers[]="Content-Type:application/json";$headers[]=“令牌:”。$令牌;$headers[]="fxq-nonce:".$随机数;$headers[]="fxq-sign:".$符号;}else{$headers=array('Content-Type:application/json;charset=utf-8;');}//初始化$curl=curl_init();//设置抓取的urlcurl_setopt($curl,CURLOPT_URL,$网址);//设置头文件信息为数据流输出curl_setopt($curl,CURLOPT_HTTPHEADER,$headers);//设置请求头curl_setopt($curl,CURLOPT_HEADER,1);//将获取到的信息设置为文件流的形式返回,而不是直接输出。curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);curl_setopt($curl,CURLOPT_IPRESOLVE,CURL_IPRESOLVE_V4);curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);//设置提交方式if($re=='post'){//post提交方式curl_setopt($curl,CURLOPT_POST,1);//设置发布数据curl_setopt($curl,CURLOPT_POSTFIELDS,$parameter);}elseif($re=='get'){}//执行命令$data=curl_exec($curl);//分离头信息和数据体$headerSize=curl_getinfo($curl,CURLINFO_HEADER_SIZE);$datas['header']=substr($data,0,$headerSize);$datas['body']=substr($data,$headerSize);//关闭URL请求curl_close($curl);取消设置($数据);//重新显示获取到的数据转json_decode($datas['body'],true);}publicstaticfunctionreadParams($data,&$string){$size=count($data);foreach($dataas$key=>$val){$size--;self::readChildParams($key,json_encode($val),$string,$size);}返回$字符串;}publicstaticfunctionreadChildParams($key,$value,&$string,$index){if(is_string($key)){$string.=$key."=";}if(self::startsWith($value,"{")){$string.="{";self::readParams(json_decode($value,true),$string);$string.="}";}elseif(self::startsWith($value,"[")){$string.="[";$list=json_decode($value,true);$大小=计数($列表);foreach($listas$list1){$size--;self::readChildParams(null,json_encode($list1),$string,$size);$string.="]";}else{//去除双引号$string.=str_replace('"','',json_decode($value,true));}if($index!=0){$string.="||";}return$string;}publicstaticfunctionstartsWith($haystack,$needle,$case=true){if($case){返回strncasecmp($haystack,$needle,strlen($needle))==0;}else{返回strncmp($haystack,$needle,strlen($needle))==0;}}publicstaticfunctionsortParam(&$param){if(is_array($param)){ksort($param);foreach($param作为&$value){self::sortParam($value);}}return$param;}}