e签宝标准版对接

ESign

根据e签宝官方文档开发的一个 PHP 扩展包, 悟空 API V2 SDK

composer地址

https://packagist.org/packages/achais/esign

详细介绍

此包对接的是【SaaS API 标准版】,注意分辨。其他版本需要自行调整

【SaaS API 标准版】接口文档地址
【常用地址】
··········开放平台:地址
··········开放平台文档中心:地址
··········错误码查询:地址
··········API在线调试工具:地址
··········沙箱地址:地址
··········合同模板:地址
【体验地址】体验整体流程

注意

先去创建沙箱应用,以下操作全在沙箱中进行,配置成功之后进行切换环境。我使用的是tp5

安装

$ composer require achais/esign:dev-master -vvv

使用

config/config.php//e签宝'esign_info' => ['debug' => false, // 是否开启调试'app_id' => "********", // 替换成自己的 AppId'secret' => '********', // 替换成自己的 Secret'production' => false, // 是否正式环境'log' => ['level'      => 'debug','permission' => 0777,'file'       => '/tmp/esign.log', // 开启调试时有效, 可指定日志文件地址],]
namespace app\api\controller;use think\facade\Config;class Refuel extends Base
{//E签宝->去签名public function toSign(){$config = Config::get('app.esign_info');$eSign = new \Achais\ESign\Application($config);$thirdPartyUserId = '1'.time(); // 用户唯一标识,可传入第三方平台的个人用户id、证件号、手机号、邮箱等,如果设置则作为账号唯一性字段,相同信息不可重复创建。$name = '真实姓名'; // 姓名$idType = 'CRED_PSN_CH_IDCARD'; // 证件类型$idNumber = '真实身份证号'; // 证件号$mobile = '真实手机号'; // 手机号, 签署流程开始时对应的签署人会收到短信通知$email = '真实邮箱'; // 邮箱地址, 签署流程开始时对应的签署人会收到邮件通知// 个人账户创建, 有唯一标志, 需要记录返回的 accountId$accountInfo = $eSign->account->createPersonAccount($thirdPartyUserId, $name, $idType, $idNumber, $mobile, $email);$accountId = $accountInfo['accountId'];// 测试合同模板ID---在上面合同模板地址维护一条信息$templateId = '模板id';//下面有图片介绍// 测试合同模板填充变量$simpleFormFields = ['id' => '测试名称',//通过下面signOther方法获取id,'id' => '测试甲方','id' => date('Y-m-d'),];// 根据模板创建文档$fileInfo = $eSign->file->createByTemplateId($templateId, '租赁合同', $simpleFormFields);$fileId = $fileInfo['fileId'];// 创建一个签署流程$flowInfo = $eSign->signflow->createSignFlow("租赁合同");$flowId = $flowInfo['flowId'];// 把文档加入签署流程中$addDocRet = $eSign->signflow->addDocuments($flowId, $fileId);// 在签署流程中添加一个手动签署区域, 前提是流程已经添加文档, 同时指定签署人 accountId$handSignData = $eSign->signflow->addHandSign($flowId, $fileId, $accountId, 1, 100, 100);// 签署流程开始, 签署人会收到通知 (前提有 mobile/email)$startSignFlowRet = $eSign->signflow->startSignFlow($flowId);print_r($startSignFlowRet);}//e签宝composer扩展功能public function signOther(){$config = Config::get('app.esign_info');$eSign = new \Achais\ESign\Application($config);//查询个人信息//$usInfo = $eSign->account->queryPersonByAccountId('99363813dc44463a982ca6d5c');//halt($usInfo);//通过模板id查询模板相关信息$templateId = '模板id';$url = '/v1/docTemplates/'.$templateId;$fileInfo = $eSign->file->parseJSON('get', [$url]);//合同实时下载地址//$fileDown = $fileInfo['downloadUrl'];halt($fileInfo);}
}

复制模板id
在这里插入图片描述
id
在这里插入图片描述

更多方法

\Achais\ESign\Application 提供了几个服务列在了 $providers 属性里面,

查看方法和参数, 快速跳转链接

  • AccessToken 相关点击查看
  • 签署方账户API 相关点击查看
  • 文件模板API 相关点击查看
  • 签署流程API 相关点击查看

代码说明

在这里插入图片描述
Account:验证签名、用户/企业创建相关
File:模板文件创建
SignFlow:签名流程

可以详细研究下从Application.php开始。
具体扩展流程可以根据我的signOther方法写法进行

public function toSign($data){$config = Config::get('app.esign_info');$eSign = new \Achais\ESign\Application($config);if ($data['accountId'] == 0) {$thirdPartyUserId = date('YmdHis') . rand(1, 9);$name = $data['username'];$idType = 'CRED_PSN_CH_IDCARD';$idNumber = $data['idcard'];$mobile = $data['mobile'];$email = $data['mail'];// 个人账户创建$accountInfo = $eSign->account->createPersonAccount($thirdPartyUserId, $name, $idType, $idNumber, $mobile, $email);$accountId = $accountInfo['accountId'];//记录创建的accountIdUserModel::where('mobile', $data['mobile'])->update(['accountId' => $accountId]);} else {$accountId = $data['accountId'];}// 测试合同模板ID$templateId = 'd19de0fd8e7f462fbd568984b2c5e51b';// 测试合同模板填充变量$simpleFormFields = ['jiafang'  => $data['gs_name'],'jiafang1' => $data['gs_name'],'yifang'   => $data['drive_name'],//司机名字乙方'yifang1'  => $data['drive_name'],//司机名字乙方'bingfang' => $data['username'],//丙方];// 根据模板创建文档$fileInfo = $eSign->file->createByTemplateId($templateId, '测试签署', $simpleFormFields);$fileId = $fileInfo['fileId'];//回调地址$notice = '域名/api/notify/esign_notify';// 创建一个签署流程$flowInfo = $eSign->signflow->createSignFlow("测试签署", $notice);$flowId = $flowInfo['flowId'];// 把文档加入签署流程中$addDocRet = $eSign->signflow->addDocuments($flowId, $fileId);// 在签署流程中添加一个手动签署区域, 前提是流程已经添加文档, 同时指定签署人 accountId$handSignData = $eSign->signflow->addHandSign($flowId, $fileId, $accountId, 1, 100, 100);// 签署流程开始, 签署人会收到通知 (前提有 mobile/email)$startSignFlowRet = $eSign->signflow->startSignFlow($flowId);//获取预览地址$fileInfo = $eSign->signflow->getExecuteUrl($flowId, $accountId, null, 1);$babiq = ['flowId'    => $flowId,'esign_url' => $fileInfo['url'],];return $babiq;}

回调演示–文档

public function esign_notify(){$data = input();//        Cache::set('esign',$data);switch ($data['action']) {case 'SIGN_FLOW_UPDATE'://签署人签署完成回调//trace($data,'info');$us_oil = new UseroilModel();$info = $us_oil->where('flowId', $data['flowId'])->find();if (empty($info)) {return json(['code' => 200, 'msg' => 'success']);}if ($info['is_qian']==1){return json(['code' => 200, 'msg' => 'success']);}//修改签署状态$info->save(['is_qian'   => 1,'qian_time' => time(),]);//给用户余量加值UserModel::where('uid', $info['uid'])->setInc('have_oil', $info['need_many']);return json(['code' => 200, 'msg' => 'success']);break;case 'SIGN_FLOW_FINISH'://流程结束逻辑处理return json(['code' => 200, 'msg' => 'success']);break;}}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部