Files
tyapi-server/internal/shared/esign/example.go
2025-07-28 01:46:39 +08:00

257 lines
7.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package esign
import (
"fmt"
"log"
)
// Example 展示如何使用重构后的e签宝SDK
func Example() {
// 1. 创建配置
config, err := NewConfig(
"your_app_id",
"your_app_secret",
"https://smlopenapi.esign.cn",
"your_template_id",
&EsignContractConfig{
Name: "测试合同",
ExpireDays: 30,
RetryCount: 3,
},
&EsignAuthConfig{
OrgAuthModes: []string{"ORG"},
DefaultAuthMode: "ORG",
PsnAuthModes: []string{"PSN"},
WillingnessAuthModes: []string{"WILLINGNESS"},
RedirectUrl: "https://www.tianyuanapi.com/certification/callback",
},
&EsignSignConfig{
AutoFinish: true,
SignFieldStyle: 1,
ClientType: "ALL",
RedirectUrl: "https://www.tianyuanapi.com/certification/callback",
},
)
if err != nil {
log.Fatal("配置创建失败:", err)
}
// 2. 创建客户端
client := NewClient(config)
// 示例1: 简单合同签署流程
fmt.Println("=== 示例1: 简单合同签署流程 ===")
contractReq := &ContractSigningRequest{
CompanyName: "测试公司",
UnifiedSocialCode: "123456789012345678",
LegalPersonName: "张三",
LegalPersonID: "123456789012345678",
LegalPersonPhone: "13800138000",
}
result, err := client.GenerateContractSigning(contractReq)
if err != nil {
log.Printf("合同签署失败: %v", err)
} else {
fmt.Printf("合同签署成功: %+v\n", result)
}
// 示例2: 企业认证流程
fmt.Println("\n=== 示例2: 企业认证流程 ===")
authReq := &EnterpriseAuthRequest{
CompanyName: "测试公司",
UnifiedSocialCode: "123456789012345678",
LegalPersonName: "张三",
LegalPersonID: "123456789012345678",
TransactorName: "李四",
TransactorMobile: "13800138001",
TransactorID: "123456789012345679",
}
authResult, err := client.GenerateEnterpriseAuth(authReq)
if err != nil {
log.Printf("企业认证失败: %v", err)
} else {
fmt.Printf("企业认证成功: %+v\n", authResult)
}
// 示例3: 分步操作
fmt.Println("\n=== 示例3: 分步操作 ===")
// 3.1 填写模板
templateData := map[string]string{
"JFQY": "甲方公司",
"JFFR": "甲方法人",
"YFQY": "乙方公司",
"YFFR": "乙方法人",
"QDRQ": "2024年01月01日",
}
fileID, err := client.FillTemplate(templateData)
if err != nil {
log.Printf("模板填写失败: %v", err)
return
}
fmt.Printf("模板填写成功文件ID: %s\n", fileID)
// 3.2 创建签署流程
signFlowReq := &CreateSignFlowRequest{
FileID: fileID.FileID,
SignerAccount: "123456789012345678",
SignerName: "乙方公司",
TransactorPhone: "13800138000",
TransactorName: "乙方法人",
TransactorIDCardNum: "123456789012345678",
}
signFlowID, err := client.CreateSignFlow(signFlowReq)
if err != nil {
log.Printf("创建签署流程失败: %v", err)
return
}
fmt.Printf("签署流程创建成功流程ID: %s\n", signFlowID)
// 3.3 获取签署链接
signURL, shortURL, err := client.GetSignURL(signFlowID, "13800138000", "乙方公司")
if err != nil {
log.Printf("获取签署链接失败: %v", err)
return
}
fmt.Printf("签署链接: %s\n", signURL)
fmt.Printf("短链接: %s\n", shortURL)
// 3.4 查询签署状态
status, err := client.GetSignFlowStatus(signFlowID)
if err != nil {
log.Printf("查询签署状态失败: %v", err)
return
}
fmt.Printf("签署状态: %s\n", status)
// 3.5 检查是否完成
completed, err := client.IsSignFlowCompleted(signFlowID)
if err != nil {
log.Printf("检查签署状态失败: %v", err)
return
}
fmt.Printf("签署是否完成: %t\n", completed)
}
// ExampleBasicUsage 基础用法示例
func ExampleBasicUsage() {
// 最简单的用法 - 一行代码完成合同签署
config, _ := NewConfig("app_id", "app_secret", "server_url", "template_id", &EsignContractConfig{
Name: "测试合同",
ExpireDays: 30,
RetryCount: 3,
}, &EsignAuthConfig{
OrgAuthModes: []string{"ORG"},
DefaultAuthMode: "ORG",
PsnAuthModes: []string{"PSN"},
WillingnessAuthModes: []string{"WILLINGNESS"},
RedirectUrl: "https://www.tianyuanapi.com/certification/callback",
}, &EsignSignConfig{
AutoFinish: true,
SignFieldStyle: 1,
ClientType: "ALL",
RedirectUrl: "https://www.tianyuanapi.com/certification/callback",
})
client := NewClient(config)
// 快速合同签署
result, err := client.GenerateContractSigning(&ContractSigningRequest{
CompanyName: "我的公司",
UnifiedSocialCode: "123456789012345678",
LegalPersonName: "张三",
LegalPersonID: "123456789012345678",
LegalPersonPhone: "13800138000",
})
if err != nil {
log.Fatal("签署失败:", err)
}
fmt.Printf("请访问以下链接进行签署: %s\n", result.SignURL)
}
// ExampleWithCustomData 自定义数据示例
func ExampleWithCustomData() {
config, _ := NewConfig("app_id", "app_secret", "server_url", "template_id", &EsignContractConfig{
Name: "测试合同",
ExpireDays: 30,
RetryCount: 3,
}, &EsignAuthConfig{
OrgAuthModes: []string{"ORG"},
DefaultAuthMode: "ORG",
PsnAuthModes: []string{"PSN"},
WillingnessAuthModes: []string{"WILLINGNESS"},
RedirectUrl: "https://www.tianyuanapi.com/certification/callback",
}, &EsignSignConfig{
AutoFinish: true,
SignFieldStyle: 1,
ClientType: "ALL",
RedirectUrl: "https://www.tianyuanapi.com/certification/callback",
})
client := NewClient(config)
// 使用自定义模板数据
customData := map[string]string{
"custom_field_1": "自定义值1",
"custom_field_2": "自定义值2",
"contract_date": "2024年01月01日",
}
result, err := client.GenerateContractSigning(&ContractSigningRequest{
CompanyName: "我的公司",
UnifiedSocialCode: "123456789012345678",
LegalPersonName: "张三",
LegalPersonID: "123456789012345678",
LegalPersonPhone: "13800138000",
CustomData: customData,
})
if err != nil {
log.Fatal("签署失败:", err)
}
fmt.Printf("自定义合同签署链接: %s\n", result.SignURL)
}
// ExampleEnterpriseAuth 企业认证示例
func ExampleEnterpriseAuth() {
config, _ := NewConfig("app_id", "app_secret", "server_url", "template_id", &EsignContractConfig{
Name: "测试合同",
ExpireDays: 30,
RetryCount: 3,
}, &EsignAuthConfig{
OrgAuthModes: []string{"ORG"},
DefaultAuthMode: "ORG",
PsnAuthModes: []string{"PSN"},
WillingnessAuthModes: []string{"WILLINGNESS"},
RedirectUrl: "https://www.tianyuanapi.com/certification/callback",
}, &EsignSignConfig{
AutoFinish: true,
SignFieldStyle: 1,
ClientType: "ALL",
RedirectUrl: "https://www.tianyuanapi.com/certification/callback",
})
client := NewClient(config)
// 企业认证
authResult, err := client.GenerateEnterpriseAuth(&EnterpriseAuthRequest{
CompanyName: "我的公司",
UnifiedSocialCode: "123456789012345678",
LegalPersonName: "张三",
LegalPersonID: "123456789012345678",
TransactorName: "李四",
TransactorMobile: "13800138001",
TransactorID: "123456789012345679",
})
if err != nil {
log.Fatal("企业认证失败:", err)
}
fmt.Printf("请访问以下链接进行企业认证: %s\n", authResult.AuthURL)
}