安装
Chaindoc SDK完整安装指南。配置Server SDK实现后端集成,部署Embed SDK构建前端签名界面。
先决条件
开始之前
需具备API访问权限的Chaindoc账户(需订阅商业版) Node.js 18+ 用于服务器 SDK 现代浏览器对嵌入式SDK的支持(Chrome、Firefox、Safari、Edge) 控制面板中的API密钥(公钥和私钥)
服务器 SDK 安装
服务器端SDK用于后端集成——文档管理、签名请求及区块链验证。
步骤 1:安装软件包
npm install @chaindoc_io/server-sdk步骤 2:配置环境变量
在项目根目录创建一个 .env 文件:
.env
# Production keys
CHAINDOC_SECRET_KEY=sk_live_xxxxxxxxxxxxx
# Staging/Testing keys
# CHAINDOC_SECRET_KEY=sk_test_xxxxxxxxxxxxx
# Optional: Custom API endpoint
# CHAINDOC_API_URL=https://api.chaindoc.io安全警告
切勿将.env文件提交至版本控制系统 将 .env 文件添加至 .gitignore 开发、测试和生产环境需使用不同密钥 为保障安全,请定期更换密钥
步骤3:初始化SDK
lib/chaindoc.ts
import { Chaindoc } from '@chaindoc_io/server-sdk';
// Basic initialization
export const chaindoc = new Chaindoc({
secretKey: process.env.CHAINDOC_SECRET_KEY!,
});
// Advanced configuration
export const chaindocAdvanced = new Chaindoc({
secretKey: process.env.CHAINDOC_SECRET_KEY!,
baseUrl: process.env.CHAINDOC_API_URL, // Optional
timeout: 60000, // 60 seconds
retry: {
maxRetries: 5,
baseDelayMs: 1000,
maxDelayMs: 10000,
},
headers: {
'X-Custom-Header': 'value',
},
});步骤4:验证连接
terminal
// Test API connection
const health = await chaindoc.healthCheck();
if (health.status === 'ok' && health.apiKeyValid) {
console.log('✓ Connected to Chaindoc API');
console.log('User ID:', health.userId);
} else {
console.error('✗ Connection failed');
}嵌入式SDK安装
嵌入式SDK为网络应用程序提供签名接口。兼容任何JavaScript框架。
步骤 1:安装软件包
npm install @chaindoc_io/embed-sdk步骤 2:配置环境变量
# .env.local
REACT_APP_CHAINDOC_PUBLIC_KEY=pk_live_xxxxx
# or for Next.js
NEXT_PUBLIC_CHAINDOC_PUBLIC_KEY=pk_live_xxxxx步骤3:在您的应用中初始化
// hooks/useChaindoc.ts
import { useRef, useEffect } from 'react';
import { ChaindocEmbed } from '@chaindoc_io/embed-sdk';
export function useChaindoc() {
const sdkRef = useRef<ChaindocEmbed | null>(null);
useEffect(() => {
sdkRef.current = new ChaindocEmbed({
publicKey: process.env.REACT_APP_CHAINDOC_PUBLIC_KEY!,
environment: 'production',
});
return () => {
sdkRef.current?.destroy();
};
}, []);
return sdkRef.current;
}框架特定设置
Next.js(应用路由器)
app/providers.tsx
'use client';
import { createContext, useContext, useEffect, useRef } from 'react';
import { ChaindocEmbed } from '@chaindoc_io/embed-sdk';
const ChaindocContext = createContext<ChaindocEmbed | null>(null);
export function ChaindocProvider({ children }: { children: React.ReactNode }) {
const sdkRef = useRef<ChaindocEmbed | null>(null);
useEffect(() => {
if (!sdkRef.current) {
sdkRef.current = new ChaindocEmbed({
publicKey: process.env.NEXT_PUBLIC_CHAINDOC_PUBLIC_KEY!,
});
}
return () => {
sdkRef.current?.destroy();
};
}, []);
return (
<ChaindocContext.Provider value={sdkRef.current}>
{children}
</ChaindocContext.Provider>
);
}
export const useChaindoc = () => useContext(ChaindocContext);Next.js(Pages Router)
pages/_app.tsx
import type { AppProps } from 'next/app';
import { useEffect, useRef } from 'react';
import { ChaindocEmbed } from '@chaindoc_io/embed-sdk';
export default function App({ Component, pageProps }: AppProps) {
const sdkRef = useRef<ChaindocEmbed | null>(null);
useEffect(() => {
sdkRef.current = new ChaindocEmbed({
publicKey: process.env.NEXT_PUBLIC_CHAINDOC_PUBLIC_KEY!,
});
return () => {
sdkRef.current?.destroy();
};
}, []);
return <Component {...pageProps} />;
}Nuxt 3
插件/chaindoc.client.ts
import { ChaindocEmbed } from '@chaindoc_io/embed-sdk';
export default defineNuxtPlugin(() => {
const config = useRuntimeConfig();
const chaindoc = new ChaindocEmbed({
publicKey: config.public.chaindocPublicKey,
});
return {
provide: {
chaindoc,
},
};
});Angular
服务/chaindoc.service.ts
import { Injectable, OnDestroy } from '@angular/core';
import { ChaindocEmbed } from '@chaindoc_io/embed-sdk';
import { environment } from '../environments/environment';
@Injectable({
providedIn: 'root'
})
export class ChaindocService implements OnDestroy {
private sdk: ChaindocEmbed;
constructor() {
this.sdk = new ChaindocEmbed({
publicKey: environment.chaindocPublicKey,
});
}
getSdk(): ChaindocEmbed {
return this.sdk;
}
ngOnDestroy(): void {
this.sdk.destroy();
}
}TypeScript 配置
两个SDK均包含完整的TypeScript定义文件,无需额外安装@types包。
tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"moduleResolution": "bundler",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"types": ["node"],
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true
}
}环境配置
开发环境
terminal
// Use test keys for development
const chaindoc = new Chaindoc({
secretKey: 'sk_test_xxxxx',
baseUrl: 'https://api.chaindoc.io',
});
const embed = new ChaindocEmbed({
publicKey: 'pk_test_xxxxx',
environment: 'staging',
debug: true, // Enable detailed logs
});生产环境
terminal
// Use live keys for production
const chaindoc = new Chaindoc({
secretKey: process.env.CHAINDOC_SECRET_KEY!, // sk_live_xxxxx
});
const embed = new ChaindocEmbed({
publicKey: process.env.NEXT_PUBLIC_CHAINDOC_PUBLIC_KEY!, // pk_live_xxxxx
environment: 'production',
});验证
通过以下验证步骤测试您的安装:
1检查SDK版本console.log(ChaindocEmbed.version); // 应输出版本号
2验证API连接测试健康检查端点以确认API密钥有效
3测试文件上传上传小型测试文件以验证媒体接口是否正常工作
4初始化嵌入式SDK初始化SDK并检查浏览器控制台是否有任何错误
故障排除
模块未找到错误
terminal
# Clear cache and reinstall
rm -rf node_modules package-lock.json
npm install
# For yarn
rm -rf node_modules yarn.lock
yarn installTypeScript 错误
若遇到 TypeScript 错误,请确保 tsconfig.json 中的模块解析设置正确,并已安装 Node.js 类型库。
terminal
npm install --save-dev @types/nodeAPI密钥问题
常见API密钥问题
401 未授权 - API密钥无效或已过期 403 禁止访问 - 访问API需提供商业计划 密钥必须与环境匹配(测试环境使用测试密钥,生产环境使用正式密钥) 前端使用公钥(pk_),后端仅使用私钥(sk_)
后续步骤
- 查阅快速入门指南,开始您的首次集成
- 查阅API文档获取端点参考
- 探索 SDK 文档以了解高级功能
- 设置Webhook以获取实时通知
- 加入GitHub开发者社区获取支持
专业技巧
每个环境请使用独立的API密钥 开发期间启用调试模式以获取详细日志 监控SDK版本并定期更新 在生产环境部署前,请在测试环境中进行全面测试