From 7e7b4d6eb0a2783c4c160e6c41437553f0efeee4 Mon Sep 17 00:00:00 2001 From: haomingming Date: Tue, 28 Apr 2026 15:52:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extend/ca_v2/client_test.go | 37 ++++++++++++++++++++++++++++ extend/ca_v2/types.go | 48 +++++++++++++++++++++++++++++++++---- 2 files changed, 81 insertions(+), 4 deletions(-) diff --git a/extend/ca_v2/client_test.go b/extend/ca_v2/client_test.go index 3232fd4..ff1fb0e 100644 --- a/extend/ca_v2/client_test.go +++ b/extend/ca_v2/client_test.go @@ -64,6 +64,43 @@ func TestGetServiceURL(t *testing.T) { if response.WebToken != "token-1" || response.URL != "https://example.test/h5" { t.Fatalf("unexpected response: %+v", response) } + if string(response.ExpireTime) != "2026-05-01 10:00:00" { + t.Fatalf("unexpected expireTime: %s", response.ExpireTime) + } +} + +func TestGetServiceURLWithNumericExpireTime(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + _ = json.NewEncoder(w).Encode(map[string]interface{}{ + "result_code": 0, + "result_msg": "", + "success": true, + "body": map[string]interface{}{ + "webToken": "token-2", + "url": "https://example.test/h5-2", + "expireTime": 1745918720, + }, + }) + })) + defer server.Close() + + client := NewClient(server.URL, "test-app", "test-secret") + response, err := client.GetServiceURL(GetServiceURLRequest{ + CertType: "Personal", + Type: "CERT_APPLY", + EntityID: "user-2", + UserName: "Bob", + UserIDCard: "654321", + UserPhone: "13900000000", + AuthMethod: "face", + }) + if err != nil { + t.Fatalf("GetServiceURL error: %v", err) + } + + if string(response.ExpireTime) != "1745918720" { + t.Fatalf("unexpected expireTime: %s", response.ExpireTime) + } } func TestFetchH5FaceURLWithStringBody(t *testing.T) { diff --git a/extend/ca_v2/types.go b/extend/ca_v2/types.go index ebac22e..e7c876a 100644 --- a/extend/ca_v2/types.go +++ b/extend/ca_v2/types.go @@ -1,6 +1,10 @@ package cav2 -import "encoding/json" +import ( + "encoding/json" + "strconv" + "strings" +) type responseEnvelope struct { ResultCode int `json:"result_code"` @@ -28,9 +32,9 @@ type GetServiceURLRequest struct { } type GetServiceURLResponse struct { - WebToken string `json:"webToken"` - URL string `json:"url"` - ExpireTime string `json:"expireTime"` + WebToken string `json:"webToken"` + URL string `json:"url"` + ExpireTime flexibleString `json:"expireTime"` } type CertSignRequest struct { @@ -127,3 +131,39 @@ type PhoneVerificationRequest struct { IDCard string `json:"idCard"` PhoneNumber string `json:"phoneNumber"` } + +type flexibleString string + +func (s *flexibleString) UnmarshalJSON(data []byte) error { + raw := strings.TrimSpace(string(data)) + if raw == "" || raw == "null" { + *s = "" + return nil + } + + var str string + if err := json.Unmarshal(data, &str); err == nil { + *s = flexibleString(str) + return nil + } + + var number json.Number + if err := json.Unmarshal(data, &number); err == nil { + *s = flexibleString(number.String()) + return nil + } + + var integer int64 + if err := json.Unmarshal(data, &integer); err == nil { + *s = flexibleString(strconv.FormatInt(integer, 10)) + return nil + } + + var floatValue float64 + if err := json.Unmarshal(data, &floatValue); err == nil { + *s = flexibleString(strconv.FormatFloat(floatValue, 'f', -1, 64)) + return nil + } + + return nil +}