Files
tyapi-server/internal/shared/esign/example.go

257 lines
7.2 KiB
Go
Raw Normal View History

2025-07-20 20:53:26 +08:00
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",
2025-07-28 01:46:39 +08:00
&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",
},
2025-07-20 20:53:26 +08:00
)
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() {
// 最简单的用法 - 一行代码完成合同签署
2025-07-28 01:46:39 +08:00
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",
})
2025-07-20 20:53:26 +08:00
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() {
2025-07-28 01:46:39 +08:00
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",
})
2025-07-20 20:53:26 +08:00
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() {
2025-07-28 01:46:39 +08:00
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",
})
2025-07-20 20:53:26 +08:00
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)
}