快速入门指南
在10分钟内上手 Chaindoc。本指南将带您了解网页界面和 API 两种使用方式,您可以根据需求选择适合的路径。
通过网页界面进行签名
无需编写任何代码即可发送您的第一份签名请求。网页应用会处理所有流程:上传文件、添加签署人、签署流程以及区块链验证。
分步指南:您的第一次签名
1创建账户在 app.chaindoc.io 注册并验证您的邮箱。大约需要30秒。
2上传文档点击「新建文档」并拖拽您的文件。Chaindoc 支持 PDF、Office 文档和图片,最大50MB。
3填写详细信息给文档命名,可选添加描述,并选择访问级别(私有、团队或公开)。标签是可选的,但有助于后续搜索。
4创建签名请求点击「请求签名」,添加签署人邮箱,设置截止日期,并撰写消息。签署顺序可以是并行(所有人同时签署)或顺序(逐一签署)。
5发送请求检查详情后点击发送。每位收件人都会收到一封包含安全签署链接的邮件。如需身份验证,您还可以启用 KYC 验证。
6跟踪进度仪表板实时显示谁已签署、谁尚未签署。每当有新的签名提交时,您都会收到通知。
7下载已签署副本所有人签署完成后,下载最终文档。文档附带区块链验证证书,证明文档未被篡改。
想了解不同的签名类型(简单签名、高级签名、合格签名)?这关系到合规性问题。大多数商业合同使用简单电子签名即可,但受监管行业通常需要高级或合格签名。
通过 API 集成
如果您要在自己的应用中集成签名功能,可以使用 REST API 和 TypeScript SDK。流程与网页界面相同,只是实现了自动化。
1. 获取 API 密钥
API 访问需要商业套餐。在仪表板的设置 > API 访问中创建两个密钥:
- 公钥 (`pk_`) 用于前端 Embed SDK
- 密钥 (`sk_`) 用于后端 Server SDK。请勿在客户端代码中使用此密钥。
2. 安装 SDK
选择适合您使用场景的 SDK。大多数应用需要同时使用两者:Server SDK 用于创建文档,Embed SDK 用于签署界面。
# Node.js 18+ required
npm install @chaindoc_io/server-sdk如需详细的框架设置(React、Vue、Angular、Next.js),请参阅安装指南。
3. 上传并创建文档
import { Chaindoc } from '@chaindoc_io/server-sdk';
import { readFile } from 'fs/promises';
// Initialize SDK
const chaindoc = new Chaindoc({
secretKey: process.env.CHAINDOC_SECRET_KEY!,
});
// 1. Upload document
const buffer = await readFile('./contract.pdf');
const file = new Blob([buffer], { type: 'application/pdf' });
const { media } = await chaindoc.media.upload([file]);
// 2. Create document record
const doc = await chaindoc.documents.create({
name: 'Service Agreement',
description: 'Q4 2024 Contract',
media: media[0],
status: 'published', // Triggers blockchain verification
hashtags: ['#contract', '#2024'],
meta: [{ key: 'client', value: 'Acme Corp' }],
});
console.log('Document created:', doc.documentId);设置 `status: 'published'` 会自动触发区块链验证。如果您想稍后发布,请使用 `'draft'` 状态。
4. 创建签名请求
// Create signature request for multiple signers
const sigRequest = await chaindoc.signatures.createRequest({
versionId: doc.document.versions[0].uuid,
recipients: [
{ email: 'signer1@example.com' },
{ email: 'signer2@example.com' },
],
deadline: new Date('2024-12-31'),
message: 'Please review and sign this agreement',
embeddedFlow: true, // Enable for frontend integration
});
console.log('Signature request created:', sigRequest.signatureRequest.uuid);如果您要在应用内显示签署界面,请设置 `embeddedFlow: true`。如果不设置,签署人将收到 Chaindoc 托管签署页面的链接。
5. 显示签署界面(前端)
此步骤是可选的。如果您设置了 `embeddedFlow: true`,可以在应用内直接打开签署界面。首先在后端创建会话,然后将会话 ID 传递给前端。
// Create embedded session for signer
const session = await chaindoc.embedded.createSession({
email: 'signer1@example.com',
metadata: {
documentId: doc.documentId,
signatureRequestId: sigRequest.signatureRequest.uuid,
},
});
// Return sessionId to frontend
res.json({ sessionId: session.sessionId });6. 检查状态并监听事件
您可以轮询状态,但对于生产环境,webhooks 是更好的选择。它们会在事件发生时立即通知您的服务器。
// Poll approach (fine for testing)
const status = await chaindoc.signatures.getRequestStatus(
sigRequest.signatureRequest.uuid
);
if (status.signatureRequest.status === 'completed') {
console.log('All signatures collected!');
}7. 设置 webhooks(推荐)
Webhooks 实时推送事件到您的服务器,无需不断检查。以下是一个基本的 Express 处理程序:
// Configure webhook endpoint
app.post('/webhooks/chaindoc', (req, res) => {
const event = req.headers['x-webhook-event'];
const payload = req.body;
switch (event) {
case 'document.verified':
console.log('Document verified on blockchain:', payload.txHash);
break;
case 'signature.request.completed':
console.log('All signatures collected!');
// Send notifications, update status, etc.
break;
}
res.status(200).send('OK');
});在生产环境中,您应该使用 HMAC 验证 webhook 签名,确保 payload 确实来自 Chaindoc。webhooks 指南 详细介绍了这一点。
完整工作流示例
以下是完整流程:上传、创建、签署、验证。复制代码,替换您的 API 密钥,您就拥有了一个可用的原型。
import { Chaindoc } from '@chaindoc_io/server-sdk';
import { readFile } from 'fs/promises';
async function createSigningWorkflow() {
const chaindoc = new Chaindoc({
secretKey: process.env.CHAINDOC_SECRET_KEY!,
});
// Step 1: Upload document
const buffer = await readFile('./contract.pdf');
const file = new Blob([buffer], { type: 'application/pdf' });
const { media } = await chaindoc.media.upload([file]);
// Step 2: Create document
const doc = await chaindoc.documents.create({
name: 'Service Agreement',
description: 'Contract for consulting services',
media: media[0],
status: 'published',
hashtags: ['#contract'],
meta: [],
});
// Step 3: Create signature request
const sigRequest = await chaindoc.signatures.createRequest({
versionId: doc.document.versions[0].uuid,
recipients: [{ email: 'signer@example.com' }],
deadline: new Date('2024-12-31'),
embeddedFlow: true,
});
// Step 4: Create session for frontend
const session = await chaindoc.embedded.createSession({
email: 'signer@example.com',
metadata: {
documentId: doc.documentId,
signatureRequestId: sigRequest.signatureRequest.uuid,
},
});
return {
documentId: doc.documentId,
sessionId: session.sessionId,
};
}
// Usage
const { documentId, sessionId } = await createSigningWorkflow();
console.log('Ready for signing:', { documentId, sessionId });下一步
既然您已经掌握了基础知识,根据您正在构建的内容,可以深入研究以下内容:
- 安装指南 — React、Vue、Angular 和 Next.js 的框架特定设置
- API 文档 — 完整的端点参考,包含请求/响应示例
- SDK — Server SDK 和 Embed SDK,以及各框架集成指南
- Webhooks — 生产应用的实时事件通知
- 安全最佳实践 — 上线前需要加固的内容
常见问题
区块链验证需要多长时间?
通常需要1-5分钟,具体取决于网络情况。您的文档会立即可用。验证在后台运行,完成后您会收到 webhook 事件通知。
我可以在不付费的情况下测试 API 吗?
免费套餐让您可以访问网页界面。API 访问需要商业套餐,但沙盒环境允许您测试所有功能,而不会影响真实数据或消耗配额。
这些签名具有法律约束力吗?
是的。Chaindoc 签名符合欧洲的 eIDAS、美国的 ESIGN Act 和 UETA,以及大多数其他司法管辖区的同等法规。区块链验证在此基础上增加了一层额外的证据,这在争议中可能很重要。有关哪种签名类型符合您合规需求的详细信息,请参阅签名文档。
我可以上传哪些文件格式?
PDF、DOC、DOCX、XLS、XLSX、PPT、PPTX、TXT、JPG、PNG、GIF、WEBP、SVG、MP4、AVI、MOV 和 WMV。最大文件大小为50MB。