328 lines
11 KiB
Go
328 lines
11 KiB
Go
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
|
||
}
|