Kurulum
Chaindoc SDK'lerini projenize ekleyin. İki paket bulunmaktadır: backend işlemleri için Server SDK (dokümanlar, imzalar, doğrulama) ve ön yüzünüze imza arayüzü entegre etmek için Embed SDK.
Başlamadan önce
Henüz bir hesabınız yoksa, hesap oluşturmak için hızlı başlangıç rehberi ile başlayın.
Server SDK
Server SDK, backend'deki tüm işlemleri yönetir: doküman oluşturma, imza istekleri gönderme, takım yönetimi ve blockchain doğrulama tetikleme. REST API etrafında ince bir wrapper'dır, bu yüzden API dokümanlarını okuduysanız, metod isimleri tanıdık gelecektir.
Paketi yükleyin
npm install @chaindoc_io/server-sdkOrtam değişkenlerini ayarlayın
Proje kök dizininde bir `.env` dosyası oluşturun. Burada secret key'e ihtiyacınız olacak.
# 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.ioSDK'yı başlatın
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',
},
});Temel yapılandırma çoğu proje için yeterlidir. Toplu doküman işleme yapıyorsanız, API rate limitleri olduğundan retry ayarlarını ayarlamaya değer.
Bağlantınızı doğrulayın
// 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');
}Bu başarısız olursa, secret key'inizin `sk_live_` (production) veya `sk_test_` (sandbox) ile başladığından emin olun. En yaygın sorun, yanlışlıkla public key kullanmaktır.
Embed SDK
Embed SDK, Chaindoc imza arayüzünü web uygulamanızın içinde göstermenizi sağlar. Kullanıcılarınız sitenizden ayrılmadan doküman imzalayabilir. React, Vue, Angular veya düz JavaScript ile çalışır.
Paketi yükleyin
npm install @chaindoc_io/embed-sdkCDN seçeneği, hızlı prototipler veya build adımı olmayan siteler için kullanışlıdır. Production için npm paketini kullanın, böylece tree-shaking ve uygun versiyon kontrolü elde edersiniz.
Ortam değişkenlerini ayarlayın
Embed SDK, client-side kodda güvenle dahil edilebilen public key (`pk_`) kullanır.
# .env.local
REACT_APP_CHAINDOC_PUBLIC_KEY=pk_live_xxxxx
# or for Next.js
NEXT_PUBLIC_CHAINDOC_PUBLIC_KEY=pk_live_xxxxxUygulamanızda başlatın
// 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;
}Framework-spesifik kurulum
Bu örnekler, Embed SDK'nin her framework'te provider veya servis olarak nasıl bağlanacağını gösterir. Backend'de Server SDK kullanıyorsanız, provider'a ihtiyacınız yoktur; sadece ihtiyacınız olan yerde import edin.
Next.js (App Router)
'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)
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
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
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 yapılandırması
Her iki SDK de tam TypeScript tanımlamaları ile birlikte gelir. Ekstra `@types` paketlerine ihtiyacınız yoktur.
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"moduleResolution": "bundler",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"types": ["node"],
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true
}
}Eski bir TypeScript kurulumu (< 5.0) kullanıyorsanız, `"bundler"` yerine `"moduleResolution": "node"` kullanın.
Geliştirme vs. production
Gerçek dokümanlar oluşturmaktan veya gerçek alıcılara imza e-postaları göndermekten kaçınmak için geliştirme sırasında test anahtarları kullanın.
Geliştirme kurulumu
// 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
});`debug: true` flag'i, istek/yanıt detaylarını konsola yazdırır. Gürültülüdür, ama bir şeyin neden çalışmadığını anlamaya çalışırken kullanışlıdır.
Production kurulumu
// 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',
});Kurulumunuzu doğrulayın
Her şeyin doğru bağlandığından emin olmak için bu kontrolleri yapın:
1SDK versiyonunu kontrol edinUygulamanızda `console.log(ChaindocEmbed.version)` çalıştırın. Bir versiyon numarası yazdırırsa, paket doğru yüklenmiştir.
2API bağlantısını test edinBackend'den `chaindoc.healthCheck()` çağırın. Başarılı bir yanıt, secret key'inizin geçerli olduğu ve API'ye erişilebildiği anlamına gelir.
3Dosya yüklemeyi deneyin`chaindoc.media.upload()` ile küçük bir test PDF'i yükleyin. Bu, auth, ağ ve dosya işlemenin çalıştığını doğrular.
4İmza arayüzünü açınEmbed SDK'yı başlatın ve test oturumu ile `openSignatureFlow()` çağırın. Modal görünürse, hazırsınız demektir.
Sorun giderme
"Module not found" hatası
Bu genellikle paketin düzgün yüklenmemesi veya önbellekte bir versiyon çakışması olduğu anlamına gelir. Her şeyi temizleyip yeniden yükleyin:
# npm
rm -rf node_modules package-lock.json
npm install
# yarn
rm -rf node_modules yarn.lock
yarn installTypeScript tip hataları
Node.js tiplerinin yüklü olduğundan ve `tsconfig.json`'unuzun doğru module resolution kullandığından emin olun. Çoğu sorun, eşleşmeyen `moduleResolution` ayarlarından kaynaklanır.
npm install --save-dev @types/nodeAPI key hataları
401 veya 403 yanıtları alıyorsanız, şunları kontrol edin:
- 401 Unauthorized, anahtarın geçersiz veya süresi dolmuş olduğu anlamına gelir. Dashboard'dan yeniden oluşturun.
- 403 Forbidden, planınızın API erişimi içermediği anlamına gelir. Business planına ihtiyacınız var.
- Doğru key tipini kullandığınızdan emin olun: `pk_` anahtarları Embed SDK (frontend) için, `sk_` anahtarları Server SDK (backend) içindir. Bunları karıştırmak en yaygın hatadır.
- Test anahtarları (`_test_`) sadece sandbox'ta çalışır. Live anahtarları (`_live_`) production'a bağlanır.
Sıradaki adımlar
SDK'ler yüklendiğine göre, bir sonraki adımınızı seçin:
- Hızlı başlangıç — 10 dakikada ilk imza isteğinizi gönderin
- API dokümantasyonu — örneklerle tam endpoint referansı
- SDK'ler — gelişmiş SDK özellikleri ve framework özel rehberler
- Webhooks — gerçek zamanlı olay bildirimleri kurun
- Güvenlik en iyi uygulamaları — canlıya geçmeden önce yapılandırmanız gerekenler