2023-08-31 17:32:45 +08:00

328 lines
11 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}