package esign import ( "fmt" ) // OrgAuthService 机构认证服务 // 处理机构认证和授权相关操作 type OrgAuthService struct { httpClient *HTTPClient config *Config } // NewOrgAuthService 创建机构认证服务 func NewOrgAuthService(httpClient *HTTPClient, config *Config) *OrgAuthService { return &OrgAuthService{ httpClient: httpClient, config: config, } } // UpdateConfig 更新配置 func (s *OrgAuthService) UpdateConfig(config *Config) { s.config = config } // OrgAuthRequest 机构认证请求 type OrgAuthRequest struct { OrgName string `json:"orgName"` // 机构名称 OrgIDCardNum string `json:"orgIdCardNum"` // 机构证件号 LegalRepName string `json:"legalRepName"` // 法定代表人姓名 LegalRepIDCardNum string `json:"legalRepIdCardNum"` // 法定代表人身份证号 TransactorName string `json:"transactorName"` // 经办人姓名 TransactorIDCardNum string `json:"transactorIdCardNum"` // 经办人身份证号 TransactorMobile string `json:"transactorMobile"` // 经办人手机号 } // GetAuthURL 获取机构认证&授权页面链接 // 为机构用户获取认证和授权页面链接,用于机构身份认证 func (s *OrgAuthService) GetAuthURL(req *OrgAuthRequest) (string, string, string, error) { // 构建请求数据 requestData := GetOrgAuthUrlRequest{ OrgAuthConfig: &OrgAuthConfig{ OrgName: req.OrgName, OrgInfo: &OrgAuthInfo{ OrgIDCardNum: req.OrgIDCardNum, OrgIDCardType: OrgCardTypeUSCC, LegalRepName: req.LegalRepName, LegalRepIDCardNum: req.LegalRepIDCardNum, LegalRepIDCardType: IDCardTypeChina, }, TransactorAuthPageConfig: &TransactorAuthPageConfig{ PsnAvailableAuthModes: []string{AuthModeMobile3}, PsnDefaultAuthMode: AuthModeMobile3, PsnEditableFields: []string{}, }, TransactorInfo: &TransactorAuthInfo{ PsnAccount: req.TransactorMobile, PsnInfo: &PsnAuthInfo{ PsnName: req.TransactorName, PsnIDCardNum: req.TransactorIDCardNum, PsnIDCardType: IDCardTypeChina, PsnMobile: req.TransactorMobile, PsnIdentityVerify: true, }, }, }, ClientType: ClientTypeAll, RedirectConfig: &RedirectConfig{ RedirectUrl: s.config.Auth.RedirectUrl, }, } // 序列化请求数据 jsonData, err := MarshalRequest(requestData) if err != nil { return "", "", "", err } fmt.Printf("获取机构认证&授权页面链接请求数据: %s\n", string(jsonData)) // 发送API请求 responseBody, err := s.httpClient.Request("POST", "/v3/org-auth-url", jsonData) if err != nil { return "", "", "", fmt.Errorf("获取机构认证&授权页面链接失败: %v", err) } // 解析响应 var response GetOrgAuthUrlResponse if err := UnmarshalResponse(responseBody, &response); err != nil { return "", "", "", err } if err := CheckResponseCode(response.Code, response.Message); err != nil { return "", "", "", err } fmt.Printf("机构认证&授权页面链接获取成功!\n") fmt.Printf("认证流程ID: %s\n", response.Data.AuthFlowId) fmt.Printf("完整链接: %s\n", response.Data.AuthUrl) fmt.Printf("短链接: %s\n", response.Data.AuthShortUrl) return response.Data.AuthFlowId, response.Data.AuthUrl, response.Data.AuthShortUrl, nil } // CreateAuthConfig 创建机构认证配置 // 构建机构认证所需的配置信息 func (s *OrgAuthService) CreateAuthConfig(req *OrgAuthRequest) *OrgAuthConfig { return &OrgAuthConfig{ OrgName: req.OrgName, OrgInfo: &OrgAuthInfo{ OrgIDCardNum: req.OrgIDCardNum, OrgIDCardType: OrgCardTypeUSCC, LegalRepName: req.LegalRepName, LegalRepIDCardNum: req.LegalRepIDCardNum, LegalRepIDCardType: IDCardTypeChina, }, TransactorAuthPageConfig: &TransactorAuthPageConfig{ PsnAvailableAuthModes: []string{AuthModeMobile3}, PsnDefaultAuthMode: AuthModeMobile3, PsnEditableFields: []string{}, }, TransactorInfo: &TransactorAuthInfo{ PsnAccount: req.TransactorMobile, PsnInfo: &PsnAuthInfo{ PsnName: req.TransactorName, PsnIDCardNum: req.TransactorIDCardNum, PsnIDCardType: IDCardTypeChina, PsnMobile: req.TransactorMobile, PsnIdentityVerify: true, }, }, } } // ValidateAuthInfo 验证机构认证信息 // 检查机构认证信息的完整性和格式 func (s *OrgAuthService) ValidateAuthInfo(req *OrgAuthRequest) error { if req.OrgName == "" { return fmt.Errorf("机构名称不能为空") } if req.OrgIDCardNum == "" { return fmt.Errorf("机构证件号不能为空") } if req.LegalRepName == "" { return fmt.Errorf("法定代表人姓名不能为空") } if req.LegalRepIDCardNum == "" { return fmt.Errorf("法定代表人身份证号不能为空") } if req.TransactorName == "" { return fmt.Errorf("经办人姓名不能为空") } if req.TransactorIDCardNum == "" { return fmt.Errorf("经办人身份证号不能为空") } if req.TransactorMobile == "" { return fmt.Errorf("经办人手机号不能为空") } // 验证统一社会信用代码格式(18位) if len(req.OrgIDCardNum) != 18 { return fmt.Errorf("机构证件号(统一社会信用代码)必须是18位") } // 验证身份证号格式(18位) if len(req.LegalRepIDCardNum) != 18 { return fmt.Errorf("法定代表人身份证号必须是18位") } if len(req.TransactorIDCardNum) != 18 { return fmt.Errorf("经办人身份证号必须是18位") } // 验证手机号格式(11位) if len(req.TransactorMobile) != 11 { return fmt.Errorf("经办人手机号必须是11位") } return nil } // QueryOrgIdentity 查询机构认证信息 // 查询机构的实名认证状态和信息 func (s *OrgAuthService) QueryOrgIdentity(req *QueryOrgIdentityRequest) (*QueryOrgIdentityResponse, error) { // 序列化请求数据 jsonData, err := MarshalRequest(req) if err != nil { return nil, err } // 发送API请求 responseBody, err := s.httpClient.Request("POST", "/v3/organizations/identity", jsonData) if err != nil { return nil, fmt.Errorf("查询机构认证信息失败: %v", err) } // 解析响应 var response QueryOrgIdentityResponse if err := UnmarshalResponse(responseBody, &response); err != nil { return nil, err } if err := CheckResponseCode(int(response.Code), response.Message); err != nil { return nil, err } return &response, nil }