landrok / yousign-api
PHP 实现的 YouSign API。
Requires
- php: ^7.4 || ^8.0
- guzzlehttp/guzzle: ^7.8
Requires (Dev)
- phpstan/phpstan: ^0.12.23
- phpunit/phpunit: *
README
Yousign API 客户端是 PHP 中 Yousign API v2 的包装器。
它的目的是使用此 API 而无需自己编写 HTTP 调用,并通过对象模型检索返回的数据。
如果您仍然想通过 HTTP 调用来检查 API 响应,这可以通过低级调用实现。
它提供了几个 API 包装器和快捷方法。
所有 API 调用都包装在对象模型中。所有功能都已实现,它旨在成为一个功能齐全的客户端。
所有后续类型(成员、流程、文件等)也已实现。
查看完整文档 或以下概述。
目录
要求
- PHP 7.4+
- 在使用此库之前,您必须创建 Yousign 平台上的账户并获取 API 令牌。
安装
composer require landrok/yousign-api
快速入门
在此示例中,我们将以预览模式获取所有用户。
use Yousign\YousignApi; /* * token */ $token = '123456789'; $yousign = new YousignApi($token); $users = $yousign->getUsers();
好消息,您的令牌可用。
响应和数据
所有 API 响应都转换为对象,当它是集合(即用户列表)或项(用户本身)时,它是可迭代的。
转储数据
您可以使用 toArray() 方法将所有数据转储为 PHP 数组。
print_r( $users->toArray() );
遍历列表
您可以遍历集合中的所有项。
foreach ($users as $user) { /* * For each User model, some methods are available */ // toArray(): to get all property values print_r($user->toArray()); // get + property name echo PHP_EOL . "User.id=" . $user->getId(); // property (read-only) echo PHP_EOL . "User.id=" . $user->id; // Some properties are models that you can use the same way echo PHP_EOL . "User.Group.id=" . $user->getGroup()->getId(); echo PHP_EOL . "User.Group.id=" . $user->group->id; // Some properties are collections that you can iterate foreach ($user->group->permissions as $index => $permission) { echo PHP_EOL . "User.Group.Permission.name=" . $permission->getName(); } // At any level, you can call a toArray() to dump the current model // and its children echo PHP_EOL . "User.Group=\n"; print_r($user->group->toArray()); echo PHP_EOL . "User.Group.Permissions=\n"; print_r($user->group->permissions->toArray()); }
基本模式
让我们以基本模式创建您的第一个签名流程。
在此示例中,我们将使用低级功能完成此模式。
use Yousign\YousignApi; /* * Token */ $token = '123456789'; /* * Production mode */ $production = false; /* * Instanciate API wrapper */ $yousign = new YousignApi($token, $production); /* * 1st step : send a file */ $file = $yousign->postFile([ 'name' => 'My filename.pdf', 'content' => base64_encode( file_get_contents( dirname(__DIR__, 2) . '/tests/samples/test-file-1.pdf' ) ) ]); /* * 2nd step : create the procedure */ $procedure = $yousign->postProcedure([ "name" => "My first procedure", "description" => "Awesome! Here is the description of my first procedure", "members" => [ [ "firstname" => "John", "lastname" => "Doe", "email" => "john.doe@yousign.fr", "phone" => "+33612345678", "fileObjects" => [ [ "file" => $file->getId(), "page" => 2, "position" => "230,499,464,589", "mention" => "Read and approved", "mention2" => "Signed by John Doe" ] ] ] ] ]); // toJson() supports all PHP json_encode flags echo $procedure->toJson(JSON_PRETTY_PRINT);
当流程创建时,您可以使用获取器检索所有数据,或使用 toJson() 和 toArray() 方法转储所有数据。
它将输出类似以下内容
{ "id": "\/procedures\/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "name": "My first procedure", "description": "Awesome! Here is the description of my first procedure", "createdAt": "2018-12-01T11:49:11+01:00", "updatedAt": "2018-12-01T11:49:11+01:00", "finishedAt": null, "expiresAt": null, "status": "active", "creator": null, "creatorFirstName": null, "creatorLastName": null, "workspace": "\/workspaces\/XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "template": false, "ordered": false, "parent": null, "metadata": [], "config": [], "members": [ { "id": "\/members\/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "user": null, "type": "signer", "firstname": "John", "lastname": "Doe", "email": "john.doe@yousign.fr", "phone": "+33612345678", "position": 1, "createdAt": "2018-12-01T11:49:11+01:00", "updatedAt": "2018-12-01T11:49:11+01:00", "finishedAt": null, "status": "pending", "fileObjects": [ { "id": "\/file_objects\/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "file": { "id": "\/files\/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "name": "The best name for my file.pdf", "type": "signable", "contentType": "application\/pdf", "description": null, "createdAt": "2018-12-01T11:36:20+01:00", "updatedAt": "2018-12-01T11:49:11+01:00", "sha256": "bb57ae2b2ca6ad0133a699350d1a6f6c8cdfde3cf872cf526585d306e4675cc2", "metadata": [], "workspace": "\/workspaces\/XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "creator": null, "protected": false, "position": 0, "parent": null }, "page": 2, "position": "230,499,464,589", "fieldName": null, "mention": "Read and approved", "mention2": "Signed by John Doe", "createdAt": "2018-12-01T11:49:11+01:00", "updatedAt": "2018-12-01T11:49:11+01:00", "parent": null, "reason": "Signed by Yousign" } ], "comment": null, "notificationsEmail": [], "operationLevel": "custom", "operationCustomModes": [ "sms" ], "operationModeSmsConfig": null, "parent": null } ], "subscribers": [], "files": [ { "id": "\/files\/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "name": "My filename.pdf", "type": "signable", "contentType": "application\/pdf", "description": null, "createdAt": "2018-12-01T11:36:20+01:00", "updatedAt": "2018-12-01T11:49:11+01:00", "sha256": "bb57ae2b2ca6ad0133a699350d1a6f6c8cdfde3cf872cf526585d306e4675cc2", "metadata": [], "workspace": "\/workspaces\/XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "creator": null, "protected": false, "position": 0, "parent": null } ], "relatedFilesEnable": false, "archive": false, "archiveMetadata": [], "fields": [], "permissions": [] }
高级模式
以下是使用高级模式创建流程的 5 个步骤。
use Yousign\YousignApi; /* * Token */ $token = '123456789'; /* * Production mode */ $production = false; /* * Instanciate API wrapper */ $yousign = new YousignApi($token, $production); /* * Step 1 - Create your procedure */ $procedure = $yousign->postProcedure([ "name" => "My first procedure", "description" => "Description of my procedure with advanced mode", "start" => false, ]); /* * Step 2 - Add the files */ $file = $yousign->postFile([ 'name' => 'Name of my signable file.pdf', 'content' => base64_encode( file_get_contents( dirname(__DIR__, 2) . '/tests/samples/test-file-1.pdf' ) ), 'procedure' => $procedure->getId(), ]); /* * Step 3 - Add the members */ $member = $yousign->postMember([ "firstname" => "John", "lastname" => "Doe", "email" => "john.doe@yousign.fr", "phone" => "+33612345678", "procedure" => $procedure->getId(), ]); /* * Step 4 - Add the signature images */ $fileObject = $yousign->postFileObject([ "file" => $file->getId(), "member" => $member->getId(), "position" => "230,499,464,589", "page" => 2, "mention" => "Read and approved", "mention2" => "Signed By John Doe" ]); /* * Step 5 - Start the procedure */ $procedure = $yousign->putProcedure( $procedure->getId(), [ "start" => true, ] ); echo $procedure->toJson(JSON_PRETTY_PRINT);
在步骤 3 中,您可能需要添加多个成员。
在步骤 4 中,您可能需要为每个成员添加一个或多个签名图像。
使用签名 UI 品牌化
默认情况下,Signature-UI 具有Yousign主题(徽标、颜色等),但您可以从应用管理菜单中的Signature-UI视图自定义嵌入在iFrame中的签名流程,或者使用特定资源 /signature_uis
完全自定义此iFrame。
use Yousign\YousignApi; /* * Token */ $token = '123456789'; /* * Production mode */ $production = false; /* * Instanciate API wrapper */ $yousign = new YousignApi($token, $production); /* * Create your customized UI */ $ui = $yousign->postSignatureUi([ "name" => "My first template for Signature-UI", "description" => "Here is the Signature-UI template for Yousign Developers.", "defaultZoom" => 100, "logo" => "data:image/png;base64,iVBORw0K [...] XIwU3i6foIAAAAAElFTkSuQmCC", "languages" => ["fr", "en"], "defaultLanguage" => "en", "labels" => [ [ "name" => "NAME OF THE LABEL", "languages" => [ "en" => "Label en", "fr" => "Label fr" ], "creator" => null, ] ], "signImageTypesAvailable" => [ "name", "draw", ], "enableHeaderBar" => true, "enableHeaderBarSignAs" => true, "enableSidebar" => true, "enableMemberList" => true, "enableDocumentList" => true, "enableDocumentDownload" => true, "enableActivities" => false, "authenticationPopup" => false, "enableRefuseComment" => true, "fonts" => ["Roboto", "Lato"], "creator" => null, "redirectCancel" => [ "url" => "https://example.com?cancel=1", "target" => "_top", "auto" => false ], "redirectError" => [ "url" => "https://example.com?error=1", "target" => "_blank", "auto" => true ], "redirectSuccess" => [ "url" => "https://example.com?success=1", "target" => "_parent", "auto" => true ], "style" => " .sign-ui-header-bar { background-color: #00f } .sign-ui-headerbar-signas { background-color: #f00 } .sign-ui-headerbar-signas--primary { background-color: #f00 } .sign-ui-tab-item { color: #000 } .sign-ui-tab-item--current { background-color: #0f0; color: #fff } " ]);
在以下响应中,您将获取一个id,这对于创建您的iFrame非常有用。
[ "id" => "/signature_uis/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "name" => "My first template for Signature-UI", "description" => "Here is the Signature-UI template for Yousign Developers.", "enableHeaderBar" => true, "enableHeaderBarSignAs" => true, "enableSidebar" => true, "enableMemberList" => true, "enableDocumentList" => true, "enableDocumentDownload" => true, "enableActivities" => true, "authenticationPopup" => true, "enableRefuseComment" => true, "defaultZoom" => 100, "logo" => "data:image/png;base64,iVBORw0K [...] XIwU3i6foIAAAAAElFTkSuQmCC", "defaultLanguage" => "en", "signImageTypesAvailable" => [ "name", "draw" ], "languages" => [ "fr", "en", "es", "de", "it", "pt", "nl" ], "labels" => [ [ "id" => "/signature_ui_labels/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "name" => "NAME OF THE LABEL", "languages" => [ "en" => "Label en", "fr" => "Label fr" ], "creator" => null, "createdAt" => "2018-12-07T07:34:22+01:00", "updatedAt" => "2018-12-07T07:34:22+01:00" ] ], "fonts" => [ "Roboto", "Lato" ], "style" => "Just a CSS string for customize all of our iFrame.", "redirectCancel" => [ "url" => "https://example.com?cancel=1", "target" => "_top", "auto" => false ], "redirectError" => [ "url" => "https://example.com?error=1", "target" => "_blank", "auto" => true ], "redirectSuccess" => [ "url" => "https://example.com?success=1", "target" => "_parent", "auto" => true ], "workspace" => "/workspaces/XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "creator" => null, "createdAt" => "2018-12-07T07:34:22+01:00", "updatedAt" => "2018-12-07T07:34:22+01:00" ]
更多
-
要讨论新功能、提出反馈或简单地分享想法,您可以在 Mastodon 上联系我:https://cybre.space/@landrok
-
在 Yousign Sandbox 注册 上创建账户和 API 令牌