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"},
|
2025-08-23 14:57:37 +08:00
|
|
|
|
RedirectUrl: "https://console.tianyuanapi.com/certification/callback",
|
2025-07-28 01:46:39 +08:00
|
|
|
|
},
|
|
|
|
|
|
&EsignSignConfig{
|
|
|
|
|
|
AutoFinish: true,
|
|
|
|
|
|
SignFieldStyle: 1,
|
|
|
|
|
|
ClientType: "ALL",
|
2025-08-23 14:57:37 +08:00
|
|
|
|
RedirectUrl: "https://console.tianyuanapi.com/certification/callback",
|
2025-07-28 01:46:39 +08:00
|
|
|
|
},
|
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"},
|
2025-08-23 14:57:37 +08:00
|
|
|
|
RedirectUrl: "https://console.tianyuanapi.com/certification/callback",
|
2025-07-28 01:46:39 +08:00
|
|
|
|
}, &EsignSignConfig{
|
|
|
|
|
|
AutoFinish: true,
|
|
|
|
|
|
SignFieldStyle: 1,
|
|
|
|
|
|
ClientType: "ALL",
|
2025-08-23 14:57:37 +08:00
|
|
|
|
RedirectUrl: "https://console.tianyuanapi.com/certification/callback",
|
2025-07-28 01:46:39 +08:00
|
|
|
|
})
|
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"},
|
2025-08-23 14:57:37 +08:00
|
|
|
|
RedirectUrl: "https://console.tianyuanapi.com/certification/callback",
|
2025-07-28 01:46:39 +08:00
|
|
|
|
}, &EsignSignConfig{
|
|
|
|
|
|
AutoFinish: true,
|
|
|
|
|
|
SignFieldStyle: 1,
|
|
|
|
|
|
ClientType: "ALL",
|
2025-08-23 14:57:37 +08:00
|
|
|
|
RedirectUrl: "https://console.tianyuanapi.com/certification/callback",
|
2025-07-28 01:46:39 +08:00
|
|
|
|
})
|
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"},
|
2025-08-23 14:57:37 +08:00
|
|
|
|
RedirectUrl: "https://console.tianyuanapi.com/certification/callback",
|
2025-07-28 01:46:39 +08:00
|
|
|
|
}, &EsignSignConfig{
|
|
|
|
|
|
AutoFinish: true,
|
|
|
|
|
|
SignFieldStyle: 1,
|
|
|
|
|
|
ClientType: "ALL",
|
2025-08-23 14:57:37 +08:00
|
|
|
|
RedirectUrl: "https://console.tianyuanapi.com/certification/callback",
|
2025-07-28 01:46:39 +08:00
|
|
|
|
})
|
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)
|
|
|
|
|
|
}
|