| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- package qiyuesuosdk
- import (
- "encoding/base64"
- "strconv"
- "strings"
- v2seal_request "git.sxidc.com/student-physical-examination/contract_lock_sdk/model/v2seal/request"
- v2seal_response "git.sxidc.com/student-physical-examination/contract_lock_sdk/model/v2seal/response"
- "git.sxidc.com/student-physical-examination/contract_lock_sdk/model/common"
- )
- // DeriveCompanySealName 根据机构名称推导契约锁公章名称(与制章/授权逻辑一致)。
- func DeriveCompanySealName(companyDisplayName string) string {
- sealName := strings.TrimSpace(companyDisplayName)
- if sealName == "" {
- return "机构公章"
- }
- if !strings.Contains(sealName, "章") {
- sealName += "公章"
- }
- return sealName
- }
- // CompanySealImage 下载机构电子公章图片(PNG)。
- func (c *Client) CompanySealImage(company CompanyLocateParams, sealName string) ([]byte, string, error) {
- sealName = strings.TrimSpace(sealName)
- if sealName == "" {
- return nil, "", ErrInvalidParams
- }
- body := map[string]any{
- "sealName": sealName,
- "sealAttribute": "ELECTRONIC",
- "sealImageFormatRequest": map[string]any{
- "imageFormat": "png",
- },
- }
- if company.ID != "" {
- body["companyId"] = company.ID
- }
- if company.Name != "" {
- body["companyName"] = company.Name
- }
- if company.RegisterNo != "" {
- body["registerNo"] = company.RegisterNo
- }
- data, contentType, err := c.postForImageBytes("/seal/customparam/image", body)
- if err != nil {
- return nil, "", err
- }
- if len(data) == 0 {
- return nil, "", ErrSealImageUnavailable
- }
- return data, contentType, nil
- }
- // CompanySealImageBase64 下载机构公章并返回标准 Base64(不含 data: 前缀)。
- func (c *Client) CompanySealImageBase64(company CompanyLocateParams, sealName string) (string, string, error) {
- data, contentType, err := c.CompanySealImage(company, sealName)
- if err != nil {
- return "", "", err
- }
- return base64.StdEncoding.EncodeToString(data), contentType, nil
- }
- // CompanySignQualifications 法人单位签章资质(是否已有可用电子章等)。
- type CompanySignQualifications struct {
- ElectronicSeal bool `json:"electronicSeal"`
- SM2Cert bool `json:"sm2Cert"`
- RSACert bool `json:"rsaCert"`
- }
- type companySignQualificationsResp struct {
- apiResponse
- Result CompanySignQualifications `json:"result"`
- }
- type sealCreateResp struct {
- apiResponse
- Result v2seal_response.V2SealCreateResponse `json:"result"`
- }
- // UserPortalURL 由开放平台 API 地址推导用户前台地址(制章/登录)。
- func UserPortalURL(apiAddress string) string {
- addr := strings.TrimRight(apiAddress, "/")
- if strings.Contains(addr, ":9182") {
- return strings.Replace(addr, ":9182", ":9180", 1)
- }
- return addr
- }
- // CompanySignQualificationsFor 查询法人单位是否具备电子印章等签章资质。
- func (c *Client) CompanySignQualificationsFor(company CompanyLocateParams) (*CompanySignQualifications, error) {
- companyReq, err := company.toCompanyRequest()
- if err != nil {
- return nil, err
- }
- var resp companySignQualificationsResp
- if err := c.postJSON("/company/sign/qualifications", map[string]any{
- "companyRequest": companyReq,
- }, &resp); err != nil {
- return nil, err
- }
- if err := resp.err(); err != nil {
- return nil, err
- }
- return &resp.Result, nil
- }
- // CompanySealCreatePageURL 获取制作电子公章的页面链接(method=page)。
- func (c *Client) CompanySealCreatePageURL(company CompanyLocateParams, companyDisplayName, sealName, operatorMobile string) (string, error) {
- if sealName == "" || operatorMobile == "" {
- return "", ErrInvalidParams
- }
- displayName := companyDisplayName
- if displayName == "" {
- displayName = company.Name
- }
- comp := &common.Company{Name: displayName}
- if company.RegisterNo != "" {
- comp.RegisterNo = company.RegisterNo
- }
- if company.ID != "" {
- if id, err := strconv.ParseInt(company.ID, 10, 64); err == nil {
- comp.Id = &id
- }
- }
- modify := true
- req := v2seal_request.V2SealCreateRequest{
- BusinessType: "ELECTRONIC",
- SealType: "COMPANY",
- Method: "page",
- Name: sealName,
- SealCategoryName: "公章",
- Company: comp,
- OperatorInfo: &common.UserInfoRequest{
- Mobile: operatorMobile,
- },
- Modify: &modify,
- }
- var resp sealCreateResp
- if err := c.postJSON("/v2/seal/create", req, &resp); err != nil {
- return "", err
- }
- if err := resp.err(); err != nil {
- return "", err
- }
- url := resp.Result.PageUrl
- if url == "" {
- url = resp.Result.LocalPageUrl
- }
- if url == "" {
- return "", ErrSealCreatePageUnavailable
- }
- return url, nil
- }
- // IsSealNotFoundError 静默授权时「查询的印章不存在」。
- func IsSealNotFoundError(err error) bool {
- if err == nil {
- return false
- }
- msg := err.Error()
- return strings.Contains(msg, "查询的印章不存在") || strings.Contains(msg, "无可授权的印章")
- }
|