2023-10-27 17:07:36 +08:00

398 lines
11 KiB
Go

package ca
import (
"errors"
"hospital-admin-api/config"
"net/url"
)
// 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
requestDataMap["configKey"] = d.ConfigKey
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
}
// RenewCloudCert 更新云证书
func RenewCloudCert(d *RenewCloudCertRequest) (*RenewCloudCertResponse, error) {
if d == nil {
return nil, errors.New("获取云证书失败")
}
// 获取签名
requestDataMap := make(map[string]interface{})
requestDataMap["entityId"] = d.EntityId
requestDataMap["pin"] = d.Pin
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("pin", d.Pin)
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/certRenew"
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 := &RenewCloudCertResponse{
CertBase64: certBase64.(string),
CertP7: certP7.(string),
CertSerialnumber: certSerialnumber.(string),
}
return result, nil
}
// RemoveCloudCert 注销云证书
func RemoveCloudCert(d *RemoveCloudCertRequest) (bool, error) {
if d == nil {
return false, errors.New("获取云证书失败")
}
// 获取签名
requestDataMap := make(map[string]interface{})
requestDataMap["entityId"] = d.EntityId
requestDataMap["pin"] = d.Pin
requestDataMap["authType"] = d.AuthType
requestDataMap["authTime"] = d.AuthTime
requestDataMap["authResult"] = d.AuthResult
requestDataMap["authNoticeType"] = d.AuthNoticeType
signature := GenerateSignature(requestDataMap)
if signature == "" {
return false, errors.New("云证书签名错误")
}
formData := url.Values{}
formData.Set("entityId", d.EntityId)
formData.Set("pin", d.Pin)
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/certRevoke"
_, err := postRequest(requestUrl, formData, signature)
if err != nil {
return false, errors.New(err.Error())
}
return true, nil
}
// AddUserSignConfig 添加用户签章配置
func AddUserSignConfig(d *AddUserSignConfigRequest) (bool, error) {
if d == nil {
return false, errors.New("获取云证书失败")
}
// 获取签名
requestDataMap := make(map[string]interface{})
requestDataMap["userId"] = d.UserId
requestDataMap["configKey"] = d.UserId
requestDataMap["keypairType"] = "3"
requestDataMap["certSn"] = d.CertSn
requestDataMap["signType"] = "4"
requestDataMap["signParam"] = d.SignParam
requestDataMap["sealImg"] = d.SealImg
requestDataMap["sealType"] = "4"
requestDataMap["signTemplate"] = "0"
signature := GenerateSignature(requestDataMap)
if signature == "" {
return false, errors.New("云证书签名错误")
}
formData := url.Values{}
formData.Set("userId", d.UserId)
formData.Set("configKey", d.UserId)
formData.Set("keypairType", "3")
formData.Set("certSn", d.CertSn)
formData.Set("signType", "4")
formData.Set("signParam", d.SignParam)
formData.Set("sealImg", d.SealImg)
formData.Set("sealType", "4")
formData.Set("signTemplate", "0")
// 构建请求 URL
requestUrl := config.C.CaOnline.CaOnlineApiUrl + "/signature-server/api/open/signature/userSignConfig"
_, err := postRequest(requestUrl, formData, signature)
if err != nil {
return false, errors.New(err.Error())
}
return true, nil
}