logistics/app/api/controller/JunziqianController.php

274 lines
11 KiB
PHP
Raw Normal View History

2023-08-29 17:19:11 +08:00
<?php
namespace app\api\controller;
2023-09-05 15:05:14 +08:00
use app\common\model\contract\Contract;
2023-08-29 17:19:11 +08:00
use app\Request;
2023-08-29 17:54:01 +08:00
use junziqian\sdk\bean\req\sign\ApplySignReq;
use junziqian\sdk\bean\req\user\OrganizationCreateReq;
use junziqian\sdk\util\exception\ResultInfoException;
use junziqian\sdk\util\RequestUtils;
use junziqian\sdk\util\ShaUtils;
2023-08-29 17:19:11 +08:00
use CURLFile;
use think\facade\Db;
class JunziqianController extends BaseApiController
{
public array $notNeedLogin = ['download_file'];
/**请求地址*/
private $serviceUrl = 'https://api.sandbox.junziqian.com';
/**appkey*/
private $appkey = '3121e0d911b7943d';
/**secret*/
private $appSecret = '1e66d8b73121e0d911b7943d82bba174';
/**默认加密方式:不输入使用sha256,其它可选择项md5,sha1,sha3-256*/
private $encryMethod;
/**默认ts单位:1毫秒,2秒*/
private $tsType;
2023-08-31 01:19:57 +08:00
2023-08-29 17:19:11 +08:00
/**
* 填充签名数据
* @param $req array
*/
public function fillSign($req)
{
/**默认加密方式:不输入使用sha256,其它可选择项md5,sha1,sha3-256*/
$ts = time();
if ($this->tsType == 1) {
$ts = $ts * 1000;
}
$sign = null;
$nonce = md5($ts . "");
$signSrc = "nonce" . $nonce . "ts" . $ts . "app_key" . $this->appkey . "app_secret" . $this->appSecret;
if ($this->encryMethod == null || $this->encryMethod == "sha256") {
$sign = ShaUtils::getSha256($signSrc);
} else if ($this->encryMethod == "sha1") {
$sign = ShaUtils::getSha1($signSrc);
} else if ($this->encryMethod == "md5") {
$sign = md5($signSrc);
} else {
throw new ResultInfoException($this->encryMethod . ",必须为md5,sha1,sha256之一", "PARAM_ERROR");
}
$req['ts'] = $ts;
$req['app_key'] = $this->appkey;
$req['sign'] = $sign;
$req['nonce'] = $nonce; //这只是为了生成一个随机值
if ($this->encryMethod != null) {
$req['encry_method'] = $this->encryMethod; //为''也不能传
}
return $req;
}
//企业实名认证上传
public function EnterpriseCertification($data)
{
$requestUtils = new RequestUtils($this->serviceUrl, $this->appkey, $this->appSecret);
$request = new OrganizationCreateReq();
$request->name = $data['name'];
$request->identificationType = 1; //证件类型0多证,1多证合一
$request->organizationType = 0; //组织类型 0企业,1事业单位
$request->organizationRegNo = $data['organization_code'];
$request->organizationRegImg = $data['business_license']; //new CURLFile('D:/tmp/test.png',null,"test.png");
$request->legalName = $data["master_name"]; //法人
if (isset($data['master_email'])) {
$request->emailOrMobile = $data['master_email']; //邮箱
}
2023-09-04 15:29:44 +08:00
$request->notifyUrl = env('project.notify_domain').'/notify_authentication?id=' . $data['id'];
2023-08-29 17:19:11 +08:00
//发起创建企业请求
$response = $requestUtils->doPost("/v2/user/organizationCreate", $request);
return $response;
}
//重新提交企业实名认证
public function organizationReapply($data)
{
$requestUtils = new RequestUtils($this->serviceUrl, $this->appkey, $this->appSecret);
$request = new OrganizationCreateReq();
$request->name = $data['name'];
$request->identificationType = 1; //证件类型0多证,1多证合一
$request->organizationType = 0; //组织类型 0企业,1事业单位
$request->organizationRegNo = $data['organization_code'];
$request->organizationRegImg = $data['business_license']; //new CURLFile('D:/tmp/test.png',null,"test.png");
$request->legalName = $data["master_name"]; //法人
$request->emailOrMobile = $data['master_email']; //邮箱
//发起创建企业请求
$response = $requestUtils->doPost("/v2/user/organizationReapply", $request);
return $response;
// return $this->success('', (array)$response);
}
//企业实名认证状态查询
public function StatusQuery()
{
$param = Request()->param();
$requestUtils = new RequestUtils($this->serviceUrl, $this->appkey, $this->appSecret);
//初始化合同参数
$request = array(
"emailOrMobile" => $param['master_email'], //TODO *
);
//发起请求
$response = $requestUtils->doPost("/v2/user/organizationAuditStatus", $request);
return $response;
}
//企业自定义公章
public function Custom_seal()
{
$requestUtils = new RequestUtils($this->serviceUrl, $this->appkey, $this->appSecret);
//初始化合同参数
$request = array(
"signName" => "500XXXXXXXXXXXX", //TODO *
"email" => "500XXXXXXXXXXXX", //TODO 不传则保存在商户下,传入注册的邮箱则上传到指定邮箱企业名下
"signImgFile" => new CURLFile('D:/tmp/test.png', null, "test.png"),
);
$response = $requestUtils->doPost("/v2/user/uploadEntSign", $request);
return $this->success('', (array)$response);
}
//签约
public function Signing($data, $id)
{
$requestUtils = new RequestUtils($this->serviceUrl, $this->appkey, $this->appSecret);
$request = new ApplySignReq();
$request->contractName = $data['name'];
$request->signatories = $data['signatories']; //签约方
$request->serverCa = 1; //是否需要服务端云证书
$request->fileType = 1; //合同上传方式 url
$request->url = $data['url'];
2023-09-04 15:29:44 +08:00
$request->notifyUrl = env('project.website_domain').'/api/index/notifyUrl?id='.$id;
2023-08-29 17:19:11 +08:00
$request->needQifengSign = 1;
//发起PING请求
// halt($request);
$response = $requestUtils->doPost("/v2/sign/applySign", $request);
return $response;
}
public function SigningLink($data)
{
//构建请求工具
$requestUtils = new RequestUtils($this->serviceUrl, $this->appkey, $this->appSecret);
//初始化合同参数
$response = $requestUtils->doPost("/v2/sign/link", $data);
return $response;
}
public function sms($data)
{
$requestUtils = new RequestUtils($this->serviceUrl, $this->appkey, $this->appSecret);
//初始化请求参数
$request = array(
"applyNo" => $data['applyNo'], //TODO +
//"businessNo" => "0000XXXXXXXXX", //TODO +
"fullName" => $data['fullName'], //TODO *
"identityCard" => $data['identityCard'], //TODO *
"identityType" => 12, //TODO *
"signNotifyType" => 1 //默认为1
);
$response = $requestUtils->doPost("/v2/sign/notify", $request);
return $response;
}
//html模板
public function html_contract($data, $id)
{
$requestUtils = new RequestUtils($this->serviceUrl, $this->appkey, $this->appSecret);
//CURLFile 可以传url或filePath但必须保证文件存在且有效否则php不会报错只会导致http请求返回null并没有调到服务端
//初始化合同参数
$request = new ApplySignReq();
$request->contractName = $data['name'];
$request->signatories = $data['signatories']; //签约方
$request->serverCa = 1; //是否需要服务端云证书
$request->fileType = 3;
$request->htmlContent = $data['content'];
2023-09-04 15:29:44 +08:00
$request->notifyUrl = env('project.website_domain').'/api/index/notifyUrl?id='.$id;
2023-08-29 17:19:11 +08:00
$request->needQifengSign = 1;
//发起PING请求
$response = $requestUtils->doPost("/v2/sign/applySign", $request);
return $response;
}
public function download_file($applyNo)
{
$requestUtils = new RequestUtils($this->serviceUrl, $this->appkey, $this->appSecret);
2023-09-05 15:05:14 +08:00
$contract_url = Contract::where('contract_no', $applyNo)->value('contract_url');
if ($contract_url && !empty($contract_url)) {
return $contract_url;
2023-08-29 17:19:11 +08:00
}
//初始化请求参数
$request = array(
"applyNo" => $applyNo, //TODO +
);
$response = $requestUtils->doPost("/v2/sign/linkFile", $request);
2023-09-05 15:05:14 +08:00
if ($response->success) {
2023-08-29 17:19:11 +08:00
$this->getDownload($response->data, root_path() . 'public/uploads/contract/' . $applyNo . '.pdf');
2023-09-05 15:05:14 +08:00
return env('project.website_domain').'/uploads/contract/' . $applyNo . '.pdf';
2023-08-29 17:19:11 +08:00
} else {
2023-09-05 15:05:14 +08:00
return false;
2023-08-29 17:19:11 +08:00
}
}
2023-09-09 11:25:23 +08:00
public function downloadVehicleContractEvidence($applyNo,$companyName,$companyCode) {
//构建请求工具
2023-09-09 13:49:17 +08:00
$requestUtils = new RequestUtils($this->serviceUrl, $this->appkey, $this->appSecret);
2023-09-09 11:25:23 +08:00
//初始化合同参数
2023-09-09 13:49:17 +08:00
$request = array(
2023-09-09 11:25:23 +08:00
"applyNo" => $applyNo,
"fullName" => $companyName, //签约人名称(合同发起接口中传入的签署人姓名)
"identityCard" => $companyCode, //统一社会信用代码
"identityType" => 12, //证件类型 1身份证, 2护照, 3台胞证, 4港澳居民来往内地通行证, 11营业执照, 12统一社会信用代码, 20子账号, 99其他
2023-09-09 14:19:20 +08:00
"dealType" => 1
2023-09-09 11:25:23 +08:00
);
2023-09-09 13:49:17 +08:00
$response = $requestUtils->doPost("/v2/sign/presLinkFile", $request);
2023-09-09 11:25:23 +08:00
if ($response->success) {
2023-09-09 13:49:17 +08:00
$this->getDownload($response->data, root_path().'public/uploads/vehicle_contract_evidence/'.$applyNo.'_'.$companyCode.'.zip');
return env('project.website_domain').'/uploads/vehicle_contract_evidence/'.$applyNo.'_'.$companyCode.'.zip';;
2023-09-09 11:25:23 +08:00
} else {
return false;
}
}
2023-08-29 17:19:11 +08:00
public function getDownload($url, $publicDir = '', $fileName = '', $type = 0)
{
//获取文件路径
$newOneDir = substr($publicDir, 0, strrpos($publicDir, "/"));
if (trim($url) == '') {
return false;
}
//检验访问url是否有效
$array = get_headers($url, 1);
if (!preg_match('/200/', $array[0])) {
return false;
}
if (trim($publicDir) == '') {
return false;
}
//创建保存目录
if (!file_exists($newOneDir) && !mkdir($newOneDir, 0777, true)) {
return false;
}
//获取远程文件所采用的方法
if ($type) {
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$content = curl_exec($ch);
curl_close($ch);
} else {
ob_start();
readfile($url);
$content = ob_get_contents();
ob_end_clean();
}
$size = strlen($content);
//文件大小
$fp2 = @fopen($publicDir, 'a');
fwrite($fp2, $content);
fclose($fp2);
unset($content, $url);
}
}