package ca import ( "errors" "hospital-open-api/config" "net/url" ) // EditCloudCertRequestData 修改云证书请求数据 type EditCloudCertRequestData struct { EntityId string `json:"entityId"` // 用户唯一标识,由业务系统定义 EntityType string `json:"entityType"` // 用户类型,可选值[Personal/Organizational] PersonalPhone string `json:"personalPhone"` // 联系人电话 PersonalName string `json:"personalName"` // 个人姓名,类型为Personal时必填 PersonalIdNumber string `json:"personalIdNumber"` // 个人证件号,类型为Personal时必填 OrgName string `json:"orgName"` // 组织机构名称,信用代码类型为Organizational时必填 OrgNumber string `json:"orgNumber"` // 组织机构代码,信用代码类型为Organizational时必填 Pin string `json:"pin"` // 证书PIN码 OrgDept string `json:"orgDept"` // 卫生证书:医院部门 Province string `json:"province"` // 卫生证书:省、州 Locality string `json:"locality"` // 卫生证书:城市 AuthType string `json:"authType"` // 委托鉴证方式[实人认证、线下认证、其它方式认证] AuthTime string `json:"authTime"` // 委托鉴证时间(鉴证完成的时间戳)单位:秒 AuthResult string `json:"authResult"` // 委托鉴证结果[认证通过] AuthNoticeType string `json:"authNoticeType"` // 委托鉴证告知类型[数字证书申请告知] } // AddCloudCertRequest 新增云证书请求数据 type AddCloudCertRequest struct { EntityId string `json:"entityId"` // 用户唯一标识,由业务系统定义 EntityType string `json:"entityType"` // 用户类型,可选值[Personal/Organizational] PersonalPhone string `json:"personalPhone"` // 联系人电话 PersonalName string `json:"personalName"` // 个人姓名,类型为Personal时必填 PersonalIdNumber string `json:"personalIdNumber"` // 个人证件号,类型为Personal时必填 OrgName string `json:"orgName"` // 组织机构名称,信用代码类型为Organizational时必填 OrgNumber string `json:"orgNumber"` // 组织机构代码,信用代码类型为Organizational时必填 Pin string `json:"pin"` // 证书PIN码 OrgDept string `json:"orgDept"` // 卫生证书:医院部门 Province string `json:"province"` // 卫生证书:省、州 Locality string `json:"locality"` // 卫生证书:城市 AuthType string `json:"authType"` // 委托鉴证方式[实人认证、线下认证、其它方式认证] AuthTime string `json:"authTime"` // 委托鉴证时间(鉴证完成的时间戳)单位:秒 AuthResult string `json:"authResult"` // 委托鉴证结果[认证通过] AuthNoticeType string `json:"authNoticeType"` // 委托鉴证告知类型[数字证书申请告知] } // GetUserSignConfigRequestData 获取用户签章图片 type GetUserSignConfigRequestData struct { UserId string `json:"userId"` // 用户标识信息 } // DeleteUserSignConfigRequestData 删除签章配置 type DeleteUserSignConfigRequestData struct { UserId string `json:"userId"` // 用户标识信息 ConfigKey string `json:"configKey"` // 签章配置唯一标识 } // EditCloudCertResponse 修改云证书返回数据 type EditCloudCertResponse struct { CertBase64 string `json:"certBase64"` // 签名值证书 CertP7 string `json:"certP7"` // 证书链 CertSerialnumber string `json:"certSerialnumber"` // 证书序列号 } // AddCloudCertResponse 申请云证书返回数据 type AddCloudCertResponse struct { CertBase64 string `json:"certBase64"` // 签名值证书 CertP7 string `json:"certP7"` // 证书链 CertSerialnumber string `json:"certSerialnumber"` // 证书序列号 } // GetUserSignConfigResponse 获取用户签章图片返回数据 type GetUserSignConfigResponse struct { SealImg string `json:"sealImg"` // 印章图片 SealType int `json:"sealType"` // 印章类型(1公章;2财务章;3个人章;4合同印章;5其他) AppId string `json:"appId"` // 应用appid Id string `json:"id"` // 印章唯一标识 } // EditCloudCert 修改云证书 func EditCloudCert(d *EditCloudCertRequestData) (*EditCloudCertResponse, error) { if d == nil { return nil, errors.New("修改云证书失败") } // 获取签名 requestDataMap := make(map[string]interface{}) requestDataMap["entityId"] = d.EntityId requestDataMap["entityType"] = d.EntityType requestDataMap["personalPhone"] = d.PersonalPhone requestDataMap["personalName"] = d.PersonalName requestDataMap["personalIdNumber"] = d.PersonalIdNumber requestDataMap["orgName"] = d.OrgName requestDataMap["orgNumber"] = d.OrgNumber requestDataMap["pin"] = d.Pin requestDataMap["orgDept"] = d.OrgDept requestDataMap["province"] = d.Province requestDataMap["locality"] = d.Locality requestDataMap["authType"] = d.AuthType requestDataMap["authTime"] = d.AuthTime requestDataMap["authResult"] = d.AuthResult requestDataMap["authNoticeType"] = d.AuthNoticeType signature := GenerateSignature(requestDataMap) if signature == "" { return nil, errors.New("云证书签名错误") } formData := url.Values{} formData.Set("entityId", d.EntityId) formData.Set("entityType", d.EntityType) formData.Set("personalPhone", d.PersonalPhone) formData.Set("personalName", d.PersonalName) formData.Set("personalIdNumber", d.PersonalIdNumber) formData.Set("orgName", d.OrgName) formData.Set("orgNumber", d.OrgNumber) formData.Set("pin", d.Pin) formData.Set("orgDept", d.OrgDept) formData.Set("province", d.Province) formData.Set("locality", d.Locality) formData.Set("authType", d.AuthType) formData.Set("authTime", d.AuthTime) formData.Set("authResult", d.AuthResult) formData.Set("authNoticeType", d.AuthNoticeType) // 构建请求 URL requestUrl := config.C.CaOnline.CaOnlineApiUrl + "/cloud-certificate-service/api/cloudCert/open/v2/cert/certChange" response, err := postRequest(requestUrl, formData, signature) if err != nil { return nil, errors.New(err.Error()) } certBase64, ok := response["certBase64"] if !ok { return nil, errors.New("返回数据错误") } certP7, ok := response["certP7"] if !ok { return nil, errors.New("返回数据错误1") } certSerialnumber, ok := response["certSerialnumber"] if !ok { return nil, errors.New("返回数据错误2") } result := &EditCloudCertResponse{ CertBase64: certBase64.(string), CertP7: certP7.(string), CertSerialnumber: certSerialnumber.(string), } return result, nil } // AddCloudCert 新增云证书 func AddCloudCert(d *AddCloudCertRequest) (*AddCloudCertResponse, error) { if d == nil { return nil, errors.New("获取云证书失败") } // 获取签名 requestDataMap := make(map[string]interface{}) requestDataMap["entityId"] = d.EntityId requestDataMap["entityType"] = d.EntityType requestDataMap["personalPhone"] = d.PersonalPhone requestDataMap["personalName"] = d.PersonalName requestDataMap["personalIdNumber"] = d.PersonalIdNumber requestDataMap["orgName"] = d.OrgName requestDataMap["orgNumber"] = d.OrgNumber requestDataMap["pin"] = d.Pin requestDataMap["orgDept"] = d.OrgDept requestDataMap["province"] = d.Province requestDataMap["locality"] = d.Locality requestDataMap["authType"] = d.AuthType requestDataMap["authTime"] = d.AuthTime requestDataMap["authResult"] = d.AuthResult requestDataMap["authNoticeType"] = d.AuthNoticeType signature := GenerateSignature(requestDataMap) if signature == "" { return nil, errors.New("云证书签名错误") } formData := url.Values{} formData.Set("entityId", d.EntityId) formData.Set("entityType", d.EntityType) formData.Set("personalPhone", d.PersonalPhone) formData.Set("personalName", d.PersonalName) formData.Set("personalIdNumber", d.PersonalIdNumber) formData.Set("orgName", d.OrgName) formData.Set("orgNumber", d.OrgNumber) formData.Set("pin", d.Pin) formData.Set("orgDept", d.OrgDept) formData.Set("province", d.Province) formData.Set("locality", d.Locality) formData.Set("authType", d.AuthType) formData.Set("authTime", d.AuthTime) formData.Set("authResult", d.AuthResult) formData.Set("authNoticeType", d.AuthNoticeType) // 构建请求 URL requestUrl := config.C.CaOnline.CaOnlineApiUrl + "/cloud-certificate-service/api/cloudCert/open/v2/cert/certEnroll" response, err := postRequest(requestUrl, formData, signature) if err != nil { return nil, errors.New(err.Error()) } certBase64, ok := response["certBase64"] if !ok { return nil, errors.New("返回数据错误") } certP7, ok := response["certP7"] if !ok { return nil, errors.New("返回数据错误") } certSerialnumber, ok := response["certSerialnumber"] if !ok { return nil, errors.New("返回数据错误") } result := &AddCloudCertResponse{ CertBase64: certBase64.(string), CertP7: certP7.(string), CertSerialnumber: certSerialnumber.(string), } return result, nil } // GetUserSignConfig 获取用户签章图片 func GetUserSignConfig(d *GetUserSignConfigRequestData) (*GetUserSignConfigResponse, error) { if d == nil { return nil, errors.New("修改云证书失败") } // 获取签名 requestDataMap := make(map[string]interface{}) requestDataMap["userId"] = d.UserId signature := GenerateSignature(requestDataMap) if signature == "" { return nil, errors.New("云证书签名错误") } formData := url.Values{} formData.Set("userId", d.UserId) // 构建请求 URL requestUrl := config.C.CaOnline.CaOnlineApiUrl + "/signature-server/api/open/signature/fetchUserSeal" response, err := postRequest(requestUrl, formData, signature) if err != nil { return nil, errors.New(err.Error()) } // 返回内容为空,未设置签章图片 if response == nil { return nil, nil } sealImg, ok := response["sealImg"] if !ok { return nil, errors.New("返回数据错误") } sealType, ok := response["sealType"] if !ok { return nil, errors.New("返回数据错误") } appId, ok := response["appId"] if !ok { return nil, errors.New("返回数据错误") } id, ok := response["id"] if !ok { return nil, errors.New("返回数据错误") } result := &GetUserSignConfigResponse{ SealImg: sealImg.(string), SealType: sealType.(int), AppId: appId.(string), Id: id.(string), } return result, nil } // DeleteUserSignConfig 删除签章配置 func DeleteUserSignConfig(d *DeleteUserSignConfigRequestData) (bool, error) { if d == nil { return false, errors.New("修改云证书失败") } // 获取签名 requestDataMap := make(map[string]interface{}) requestDataMap["userId"] = d.UserId signature := GenerateSignature(requestDataMap) if signature == "" { return false, errors.New("云证书签名错误") } formData := url.Values{} formData.Set("userId", d.UserId) formData.Set("configKey", d.ConfigKey) // 构建请求 URL requestUrl := config.C.CaOnline.CaOnlineApiUrl + "/signature-server/api/open/signature/delSignConfig" response, err := postRequest(requestUrl, formData, signature) if err != nil { return false, errors.New(err.Error()) } // 返回内容为空 if response == nil { return true, nil } return true, nil }