golang VerifID身份验证API客户端插件库vl-go的使用

golang VerifID身份验证API客户端插件库vl-go的使用

概述

vlgo是一个围绕VerifID身份验证层API的Go HTTP客户端库。它完整封装了验证层所有可用的端点,使用这个客户端和API足以验证某人的身份。

功能特性

  • VerifID vl REST API:
    • 用户(User)
    • 图片(Image)

安装

go get github.com/verifid/vl-go/vlgo

使用示例

REST API

vlgo包提供了一个Client用于访问VerifID验证层API。您需要遵循4个基本步骤来验证一个人及其身份。

用户验证步骤:

  1. 发送用户的个人数据
  2. 上传身份证或护照照片
  3. 上传个人资料照片
  4. 调用验证用户

以下是完整的示例代码:

import (
	"fmt"
	"net/http"
	"path"
	"time"

	"github.com/verifid/vl-go/vlgo"
)

var httpClient = &http.Client{
    Timeout: time.Second * 15,
}

func main() {
    // 1. 发送用户数据
    user := vlgo.User{
        Country:     "United States",
        DateOfBirth: "10.04.1980",
        Name:        "Tony",
        Surname:     "Stark"}

    userClient := vlgo.NewUserService(httpClient)
    userResponse, resp, err := userClient.User.SendUserData(user)
    if err != nil {
        fmt.Println("发送用户数据错误:", err)
        return
    }
    fmt.Println("用户数据响应:", userResponse)
    
    // 2. 上传身份证图片
    imageClient := vlgo.NewImageService(httpClient)

    identityImagePath := path.Dir("/resources/2.png")
    base64Str := imageClient.Image.ImageFileToBase64(identityImagePath)
    imageUpload := vlgo.ImageUpload{Image: base64Str, UserID: "userId"}

    uploadResponse, resp, err := imageClient.Image.UploadIdentity(imageUpload)
    if err != nil {
        fmt.Println("上传身份证图片错误:", err)
        return
    }
    fmt.Println("身份证上传响应:", uploadResponse)

    // 3. 上传个人资料照片
    profileImagePath := path.Dir("/resources/2.png")
    base64Str = imageClient.Image.ImageFileToBase64(profileImagePath)
    imageUpload = vlgo.ImageUpload{Image: base64Str, UserID: "userId"}

    uploadResponse, resp, err = imageClient.Image.UploadProfile(imageUpload)
    if err != nil {
        fmt.Println("上传个人资料照片错误:", err)
        return
    }
    fmt.Println("个人资料照片上传响应:", uploadResponse)

    // 4. 验证用户
    verifyUser := vlgo.VerifyUser{
        UserID:   "userId",
        Language: "en_core_web_sm"}
    userVerificationResponse, httResponse, err := userClient.User.VerifyUser(verifyUser)
    if err != nil {
        fmt.Println("验证用户错误:", err)
        return
    }
    fmt.Println("用户验证响应:", userVerificationResponse)
}

代码说明

  1. 初始化HTTP客户端:设置了15秒的超时时间
  2. 创建用户服务:使用NewUserService创建用户服务客户端
  3. 发送用户数据:通过SendUserData方法发送用户的基本信息
  4. 创建图片服务:使用NewImageService创建图片服务客户端
  5. 上传身份证图片
    • 将图片文件转换为Base64字符串
    • 通过UploadIdentity方法上传身份证图片
  6. 上传个人资料照片
    • 同样将图片转换为Base64
    • 通过UploadProfile方法上传
  7. 验证用户:最后通过VerifyUser方法完成用户验证

每个方法都返回响应对象、HTTP响应和可能的错误,建议对每个操作都进行错误检查。


更多关于golang VerifID身份验证API客户端插件库vl-go的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang VerifID身份验证API客户端插件库vl-go的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang VerifID身份验证API客户端插件库vl-go使用指南

vl-go是一个用于VerifID身份验证服务的Golang客户端库,它简化了与VerifID API的交互过程。下面我将详细介绍如何使用这个库。

安装

首先,你需要安装vl-go库:

go get github.com/verifid/vl-go

基本使用

1. 初始化客户端

package main

import (
	"fmt"
	"log"
	"github.com/verifid/vl-go"
)

func main() {
	// 初始化客户端
	client := vl.NewClient(
		"your-api-key",      // 替换为你的API密钥
		"your-api-secret",   // 替换为你的API密钥
		vl.WithEnvironment(vl.Sandbox), // 使用沙盒环境
	)
	
	// 或者使用生产环境
	// client := vl.NewClient("your-api-key", "your-api-secret", vl.WithEnvironment(vl.Production))
}

2. 身份验证请求

func verifyIdentity(client *vl.Client) {
	// 创建验证请求
	request := &vl.IdentityVerificationRequest{
		FirstName:   "John",
		LastName:    "Doe",
		DateOfBirth: "1980-01-01",
		Address: vl.Address{
			Street1:    "123 Main St",
			City:      "New York",
			State:     "NY",
			PostalCode: "10001",
			Country:    "US",
		},
		Document: vl.Document{
			Type:           "DRIVERS_LICENSE",
			Number:        "DL12345678",
			IssuingState:  "NY",
			ExpiryDate:    "2025-12-31",
		},
	}

	// 发送验证请求
	response, err := client.VerifyIdentity(request)
	if err != nil {
		log.Fatalf("验证失败: %v", err)
	}

	// 处理响应
	fmt.Printf("验证结果: %+v\n", response)
	if response.Verified {
		fmt.Println("身份验证成功!")
	} else {
		fmt.Println("身份验证失败:", response.Reason)
	}
}

3. 处理响应

VerifID API会返回详细的验证结果:

type IdentityVerificationResponse struct {
	Verified      bool     `json:"verified"`
	Reason        string   `json:"reason,omitempty"`
	Score         float64  `json:"score,omitempty"`
	Details       []Detail `json:"details,omitempty"`
	TransactionID string   `json:"transactionId"`
}

type Detail struct {
	Field   string `json:"field"`
	Status  string `json:"status"`
	Message string `json:"message"`
}

高级功能

1. 自定义HTTP客户端

func customHTTPClient() {
	// 创建自定义HTTP客户端
	httpClient := &http.Client{
		Timeout: 30 * time.Second,
	}

	// 使用自定义HTTP客户端初始化VerifID客户端
	client := vl.NewClient(
		"your-api-key",
		"your-api-secret",
		vl.WithHTTPClient(httpClient),
		vl.WithEnvironment(vl.Production),
	)
}

2. 设置请求超时

client := vl.NewClient(
	"your-api-key",
	"your-api-secret",
	vl.WithTimeout(15*time.Second), // 设置15秒超时
)

3. 批量验证

func batchVerification(client *vl.Client) {
	requests := []*vl.IdentityVerificationRequest{
		{
			FirstName: "John",
			LastName:  "Doe",
			// 其他字段...
		},
		{
			FirstName: "Jane",
			LastName:  "Smith",
			// 其他字段...
		},
	}

	results, err := client.BatchVerifyIdentity(requests)
	if err != nil {
		log.Fatal(err)
	}

	for _, result := range results {
		fmt.Printf("结果: %+v\n", result)
	}
}

错误处理

func handleErrors(client *vl.Client) {
	_, err := client.VerifyIdentity(&vl.IdentityVerificationRequest{
		// 无效请求...
	})

	if err != nil {
		switch e := err.(type) {
		case *vl.APIError:
			// 处理API返回的错误
			fmt.Printf("API错误: %d %s\n", e.StatusCode, e.Message)
		case *vl.NetworkError:
			// 处理网络错误
			fmt.Printf("网络错误: %v\n", e.Err)
		default:
			// 其他错误
			fmt.Printf("未知错误: %v\n", err)
		}
		return
	}
}

最佳实践

  1. 缓存API密钥:不要硬编码API密钥,使用环境变量或配置管理系统
  2. 错误重试:对于临时性错误实现重试逻辑
  3. 日志记录:记录所有验证请求和响应(注意敏感信息)
  4. 性能监控:监控API调用时间和成功率
func safeVerify(client *vl.Client, request *vl.IdentityVerificationRequest) (*vl.IdentityVerificationResponse, error) {
	// 实现带重试的逻辑
	var lastErr error
	for i := 0; i < 3; i++ {
		response, err := client.VerifyIdentity(request)
		if err == nil {
			return response, nil
		}
		
		// 如果是临时性错误则重试
		if isTemporaryError(err) {
			lastErr = err
			time.Sleep(time.Duration(i+1) * time.Second) // 指数退避
			continue
		}
		
		return nil, err
	}
	return nil, lastErr
}

func isTemporaryError(err error) bool {
	// 判断是否为临时性错误
	// 例如网络超时、速率限制等
	return false
}

通过vl-go库,你可以轻松地将VerifID的身份验证功能集成到你的Golang应用中。记得在生产环境中使用前充分测试所有功能。

回到顶部