f
This commit is contained in:
@@ -173,9 +173,9 @@ type GetUserIdRequest struct {
|
|||||||
|
|
||||||
// GetUserIdResponse 获取操作ID响应
|
// GetUserIdResponse 获取操作ID响应
|
||||||
type GetUserIdResponse struct {
|
type GetUserIdResponse struct {
|
||||||
Code interface{} `json:"code"` // 可能是字符串"200"或数字200
|
Code interface{} `json:"code"` // 可能是字符串"200"或数字200
|
||||||
Msg string `json:"msg"`
|
Msg string `json:"msg"`
|
||||||
Data *UserIdData `json:"data,omitempty"`
|
Data []UserIdData `json:"data,omitempty"` // data 是数组
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetCodeInt 获取 code 的 int 值
|
// GetCodeInt 获取 code 的 int 值
|
||||||
@@ -197,7 +197,12 @@ func (r *GetUserIdResponse) GetCodeInt() int {
|
|||||||
|
|
||||||
// UserIdData 操作ID数据
|
// UserIdData 操作ID数据
|
||||||
type UserIdData struct {
|
type UserIdData struct {
|
||||||
UserId string `json:"userId"`
|
UserId string `json:"userId"`
|
||||||
|
UserName string `json:"userName,omitempty"`
|
||||||
|
Mobile string `json:"mobile,omitempty"`
|
||||||
|
UserStatus int `json:"userStatus,omitempty"`
|
||||||
|
RealName string `json:"realName,omitempty"`
|
||||||
|
RealNameStatus int `json:"realNameStatus,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetUserId 获取操作ID(带缓存)
|
// GetUserId 获取操作ID(带缓存)
|
||||||
@@ -270,14 +275,19 @@ func (y *YunYinSignPayService) GetUserId(ctx context.Context, accessToken string
|
|||||||
return "", fmt.Errorf("获取操作ID失败: %s", userIdResp.Msg)
|
return "", fmt.Errorf("获取操作ID失败: %s", userIdResp.Msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
if userIdResp.Data == nil || userIdResp.Data.UserId == "" {
|
if len(userIdResp.Data) == 0 {
|
||||||
logx.Errorf("[云印签API] GetUserId: 操作ID数据为空,响应: %+v", userIdResp)
|
logx.Errorf("[云印签API] GetUserId: 操作ID数据为空,响应: %+v", userIdResp)
|
||||||
return "", fmt.Errorf("操作ID数据为空")
|
return "", fmt.Errorf("操作ID数据为空")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取操作ID
|
// 获取操作ID(从数组中取第一个元素)
|
||||||
operationUserId := userIdResp.Data.UserId
|
operationUserId := userIdResp.Data[0].UserId
|
||||||
logx.Infof("[云印签API] GetUserId: 获取操作ID成功,UserID: %s", operationUserId)
|
if operationUserId == "" {
|
||||||
|
logx.Errorf("[云印签API] GetUserId: 操作ID为空,响应数据: %+v", userIdResp.Data[0])
|
||||||
|
return "", fmt.Errorf("操作ID为空")
|
||||||
|
}
|
||||||
|
logx.Infof("[云印签API] GetUserId: 获取操作ID成功,UserID: %s, 用户名: %s, 手机号: %s",
|
||||||
|
operationUserId, userIdResp.Data[0].UserName, userIdResp.Data[0].Mobile)
|
||||||
|
|
||||||
// 存储到Redis,2小时过期
|
// 存储到Redis,2小时过期
|
||||||
err = y.redis.SetexCtx(ctx, YunYinSignPayUserIdKey, operationUserId, int(UserIdCacheExpire.Seconds()))
|
err = y.redis.SetexCtx(ctx, YunYinSignPayUserIdKey, operationUserId, int(UserIdCacheExpire.Seconds()))
|
||||||
@@ -319,6 +329,7 @@ type FillComponent struct {
|
|||||||
type StartSignFlowRequest struct {
|
type StartSignFlowRequest struct {
|
||||||
TemplateCode string `json:"templateCode"`
|
TemplateCode string `json:"templateCode"`
|
||||||
TemplateName string `json:"templateName"`
|
TemplateName string `json:"templateName"`
|
||||||
|
FlowType int `json:"flowType"` // 流程类型:0-正常签署流程,2-临时签署流程(买家信息后补)
|
||||||
AutoFill int `json:"autoFill"`
|
AutoFill int `json:"autoFill"`
|
||||||
SourceOrderCode string `json:"sourceOrderCode"`
|
SourceOrderCode string `json:"sourceOrderCode"`
|
||||||
ParticipantList []ParticipantInfo `json:"participantList"`
|
ParticipantList []ParticipantInfo `json:"participantList"`
|
||||||
@@ -334,7 +345,7 @@ type StartSignFlowResponse struct {
|
|||||||
|
|
||||||
// StartSignFlowData 发起签署数据(API响应)
|
// StartSignFlowData 发起签署数据(API响应)
|
||||||
type StartSignFlowData struct {
|
type StartSignFlowData struct {
|
||||||
FlowID string `json:"flowId,omitempty"`
|
FlowID interface{} `json:"flowId,omitempty"` // 可能是 int64 或 string
|
||||||
FlowStatus int `json:"flowStatus,omitempty"`
|
FlowStatus int `json:"flowStatus,omitempty"`
|
||||||
FlowDesc string `json:"flowDesc,omitempty"`
|
FlowDesc string `json:"flowDesc,omitempty"`
|
||||||
FlowTitle string `json:"flowTitle,omitempty"`
|
FlowTitle string `json:"flowTitle,omitempty"`
|
||||||
@@ -345,6 +356,22 @@ type StartSignFlowData struct {
|
|||||||
ParticipantList []ParticipantItem `json:"participantList,omitempty"`
|
ParticipantList []ParticipantItem `json:"participantList,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetFlowIDString 获取 flowId 的字符串值
|
||||||
|
func (d *StartSignFlowData) GetFlowIDString() string {
|
||||||
|
switch v := d.FlowID.(type) {
|
||||||
|
case string:
|
||||||
|
return v
|
||||||
|
case int:
|
||||||
|
return fmt.Sprintf("%d", v)
|
||||||
|
case int64:
|
||||||
|
return fmt.Sprintf("%d", v)
|
||||||
|
case float64:
|
||||||
|
return fmt.Sprintf("%.0f", v)
|
||||||
|
default:
|
||||||
|
return fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// StartSignFlowResult 发起签署流程返回结果
|
// StartSignFlowResult 发起签署流程返回结果
|
||||||
type StartSignFlowResult struct {
|
type StartSignFlowResult struct {
|
||||||
ParticipantID string // 签署方2的参与者ID
|
ParticipantID string // 签署方2的参与者ID
|
||||||
@@ -353,19 +380,35 @@ type StartSignFlowResult struct {
|
|||||||
|
|
||||||
// ParticipantItem 参与者项(响应中的)
|
// ParticipantItem 参与者项(响应中的)
|
||||||
type ParticipantItem struct {
|
type ParticipantItem struct {
|
||||||
ParticipantID string `json:"participantId"`
|
ParticipantID interface{} `json:"participantId"` // 可能是 int64 或 string
|
||||||
ParticipantFlag string `json:"participantFlag"`
|
ParticipantFlag string `json:"participantFlag"`
|
||||||
SignStatus interface{} `json:"signStatus,omitempty"`
|
SignStatus interface{} `json:"signStatus,omitempty"`
|
||||||
ParticipantCorpID string `json:"participantCorpId,omitempty"`
|
ParticipantCorpID interface{} `json:"participantCorpId,omitempty"` // 可能是 int64 或 string
|
||||||
ParticipantCorpName string `json:"participantCorpName,omitempty"`
|
ParticipantCorpName string `json:"participantCorpName,omitempty"`
|
||||||
ParticipantType int `json:"participantType"`
|
ParticipantType int `json:"participantType"`
|
||||||
ParticipateBizType []string `json:"participateBizType,omitempty"`
|
ParticipateBizType []string `json:"participateBizType,omitempty"`
|
||||||
PsnID string `json:"psnId,omitempty"`
|
PsnID interface{} `json:"psnId,omitempty"` // 可能是 int64 或 string
|
||||||
PsnName string `json:"psnName,omitempty"`
|
PsnName string `json:"psnName,omitempty"`
|
||||||
PayeeContractFlag interface{} `json:"payeeContractFlag,omitempty"`
|
PayeeContractFlag interface{} `json:"payeeContractFlag,omitempty"`
|
||||||
Payee interface{} `json:"payee,omitempty"`
|
Payee interface{} `json:"payee,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetParticipantIDString 获取 participantId 的字符串值
|
||||||
|
func (p *ParticipantItem) GetParticipantIDString() string {
|
||||||
|
switch v := p.ParticipantID.(type) {
|
||||||
|
case string:
|
||||||
|
return v
|
||||||
|
case int:
|
||||||
|
return fmt.Sprintf("%d", v)
|
||||||
|
case int64:
|
||||||
|
return fmt.Sprintf("%d", v)
|
||||||
|
case float64:
|
||||||
|
return fmt.Sprintf("%.0f", v)
|
||||||
|
default:
|
||||||
|
return fmt.Sprintf("%v", v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// GetCodeInt 获取 code 的 int 值
|
// GetCodeInt 获取 code 的 int 值
|
||||||
func (r *StartSignFlowResponse) GetCodeInt() int {
|
func (r *StartSignFlowResponse) GetCodeInt() int {
|
||||||
switch v := r.Code.(type) {
|
switch v := r.Code.(type) {
|
||||||
@@ -454,16 +497,18 @@ func (y *YunYinSignPayService) StartSignFlow(ctx context.Context, accessToken, u
|
|||||||
return nil, fmt.Errorf("签署数据为空")
|
return nil, fmt.Errorf("签署数据为空")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flowIDStr := signFlowResp.Data.GetFlowIDString()
|
||||||
logx.Infof("[云印签API] StartSignFlow: 签署数据,流程ID: %s, 流程状态: %d, 流程描述: %s, 参与者数量: %d",
|
logx.Infof("[云印签API] StartSignFlow: 签署数据,流程ID: %s, 流程状态: %d, 流程描述: %s, 参与者数量: %d",
|
||||||
signFlowResp.Data.FlowID, signFlowResp.Data.FlowStatus, signFlowResp.Data.FlowDesc, len(signFlowResp.Data.ParticipantList))
|
flowIDStr, signFlowResp.Data.FlowStatus, signFlowResp.Data.FlowDesc, len(signFlowResp.Data.ParticipantList))
|
||||||
|
|
||||||
// 从 participantList 中找到签署方2的 participantId
|
// 从 participantList 中找到签署方2的 participantId
|
||||||
var participantID2 string
|
var participantID2 string
|
||||||
for i, participant := range signFlowResp.Data.ParticipantList {
|
for i, participant := range signFlowResp.Data.ParticipantList {
|
||||||
|
participantIDStr := participant.GetParticipantIDString()
|
||||||
logx.Infof("[云印签API] StartSignFlow: 响应参与者[%d],标志: %s, 参与者ID: %s, 类型: %d",
|
logx.Infof("[云印签API] StartSignFlow: 响应参与者[%d],标志: %s, 参与者ID: %s, 类型: %d",
|
||||||
i, participant.ParticipantFlag, participant.ParticipantID, participant.ParticipantType)
|
i, participant.ParticipantFlag, participantIDStr, participant.ParticipantType)
|
||||||
if participant.ParticipantFlag == "签署方2" {
|
if participant.ParticipantFlag == "签署方2" {
|
||||||
participantID2 = participant.ParticipantID
|
participantID2 = participantIDStr
|
||||||
logx.Infof("[云印签API] StartSignFlow: 找到签署方2,参与者ID: %s", participantID2)
|
logx.Infof("[云印签API] StartSignFlow: 找到签署方2,参与者ID: %s", participantID2)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -475,12 +520,12 @@ func (y *YunYinSignPayService) StartSignFlow(ctx context.Context, accessToken, u
|
|||||||
}
|
}
|
||||||
|
|
||||||
logx.Infof("[云印签API] StartSignFlow: 发起签署流程成功,订单号: %s, 流程ID: %s, 签署方2参与者ID: %s",
|
logx.Infof("[云印签API] StartSignFlow: 发起签署流程成功,订单号: %s, 流程ID: %s, 签署方2参与者ID: %s",
|
||||||
req.SourceOrderCode, signFlowResp.Data.FlowID, participantID2)
|
req.SourceOrderCode, flowIDStr, participantID2)
|
||||||
|
|
||||||
// 返回结果,包含签署方2的参与者ID和流程ID
|
// 返回结果,包含签署方2的参与者ID和流程ID
|
||||||
return &StartSignFlowResult{
|
return &StartSignFlowResult{
|
||||||
ParticipantID: participantID2,
|
ParticipantID: participantID2,
|
||||||
TaskID: signFlowResp.Data.FlowID, // 使用 flowId 作为 taskId
|
TaskID: flowIDStr, // 使用 flowId 作为 taskId
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -670,6 +715,7 @@ func (y *YunYinSignPayService) CreateYunYinSignPayOrder(ctx context.Context, use
|
|||||||
startSignFlowReq := &StartSignFlowRequest{
|
startSignFlowReq := &StartSignFlowRequest{
|
||||||
TemplateCode: y.config.TemplateCode,
|
TemplateCode: y.config.TemplateCode,
|
||||||
TemplateName: y.config.TemplateName,
|
TemplateName: y.config.TemplateName,
|
||||||
|
FlowType: 0, // 0-正常签署流程(签署方信息需准确完整),2-临时签署流程(签署方二信息可为占位符)
|
||||||
AutoFill: 1,
|
AutoFill: 1,
|
||||||
SourceOrderCode: outTradeNo,
|
SourceOrderCode: outTradeNo,
|
||||||
ParticipantList: participantList,
|
ParticipantList: participantList,
|
||||||
|
|||||||
Reference in New Issue
Block a user