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
e签宝标准版对接_第1张图片
id
e签宝标准版对接_第2张图片

更多方法

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

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

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

代码说明

e签宝标准版对接_第3张图片
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'];
            //记录创建的accountId
            UserModel::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;
        }
    }

你可能感兴趣的:(猎奇,php)