From abb6cc61fb2194a7dffb690c62c46f21d3b85ef0 Mon Sep 17 00:00:00 2001 From: liguanjie Date: Tue, 10 Jun 2025 10:16:15 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E3=80=90cs=E6=9C=8D=E5=8A=A1=E3=80=91=201?= =?UTF-8?q?=E3=80=81=E5=88=9D=E5=A7=8B=E5=8C=96=202=E3=80=81=E6=96=B0?= =?UTF-8?q?=E5=A2=9Efaq=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/cs/client.go | 30 ++++++++++++++++++++++++ services/cs/client_test.go | 26 +++++++++++++++++++++ services/cs/faq.go | 48 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 services/cs/client.go create mode 100644 services/cs/client_test.go create mode 100644 services/cs/faq.go diff --git a/services/cs/client.go b/services/cs/client.go new file mode 100644 index 0000000..704c958 --- /dev/null +++ b/services/cs/client.go @@ -0,0 +1,30 @@ +package cs + +import ( + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk" + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" +) + +const ( + VERSION = "2025-06-10" +) + +var HOST = requests.Host{ + Default: "cs", +} + +type Client struct { + sdk.Client +} + +func NewClient() (client *Client, err error) { + client = new(Client) + err = client.Init() + return +} + +func (client *Client) GetFaq(req *GetFaqRequest) (resp *GetFaqResponse, err error) { + resp = CreateGetFaqResponse() + err = client.DoAction(req, resp) + return +} diff --git a/services/cs/client_test.go b/services/cs/client_test.go new file mode 100644 index 0000000..765b81d --- /dev/null +++ b/services/cs/client_test.go @@ -0,0 +1,26 @@ +package cs + +import ( + "fmt" + "testing" +) + +/** + * 客服工单服务,单元测试 + */ + +func TestGetFaq(t *testing.T) { + client, newErr := NewClient() + if newErr != nil { + panic(newErr) + } + + req := CreateGetFaqRequest() + info, err := client.GetFaq(req) + if err != nil { + t.Error(err) + return + } + + fmt.Printf("%+v", info) +} diff --git a/services/cs/faq.go b/services/cs/faq.go new file mode 100644 index 0000000..104c94d --- /dev/null +++ b/services/cs/faq.go @@ -0,0 +1,48 @@ +package cs + +import ( + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" +) + +// Faq 树状结构 +type Faq struct { + Id int64 `json:"id"` + ParentId int64 `json:"parent_id"` + Title string `json:"title"` + Answer string `json:"answer"` + Type int64 `json:"type"` + WorkOrderTemplateId int64 `json:"work_order_template_id"` + CreatedAt string `json:"created_at"` + UpdatedAt string `json:"updated_at"` + ProcessFlow string `json:"process_flow"` + Children []*Faq `json:"children"` +} + +type GetFaqRequest struct { + *requests.RpcRequest +} + +type GetFaqResponse struct { + *responses.BaseResponse + Code int `json:"code"` + Msg string `json:"msg"` + Data Faq `json:"data"` +} + +func CreateGetFaqRequest() (req *GetFaqRequest) { + req = &GetFaqRequest{ + RpcRequest: &requests.RpcRequest{}, + } + req.InitWithApiInfo(HOST, VERSION, "/v1/faq/list") + + req.Method = requests.POST + return +} + +func CreateGetFaqResponse() (response *GetFaqResponse) { + response = &GetFaqResponse{ + BaseResponse: &responses.BaseResponse{}, + } + return +} From b282de0a2f0df87b7d7a3a80efc90199fde0b18d Mon Sep 17 00:00:00 2001 From: liguanjie Date: Tue, 10 Jun 2025 10:32:20 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E3=80=90cs=E6=9C=8D=E5=8A=A1=E3=80=91=201?= =?UTF-8?q?=E3=80=81=E6=96=B0=E5=A2=9E=E7=94=A8=E6=88=B7=E5=9F=BA=E6=9C=AC?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/cs/client.go | 6 +++++ services/cs/client_test.go | 21 ++++++++++++++-- services/cs/user.go | 49 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 services/cs/user.go diff --git a/services/cs/client.go b/services/cs/client.go index 704c958..ed5af27 100644 --- a/services/cs/client.go +++ b/services/cs/client.go @@ -28,3 +28,9 @@ func (client *Client) GetFaq(req *GetFaqRequest) (resp *GetFaqResponse, err erro err = client.DoAction(req, resp) return } + +func (client *Client) GetUserInfo(req *GetUserInfoRequest) (resp *GetUserInfoResponse, err error) { + resp = CreateGetUserInfoResponse() + err = client.DoAction(req, resp) + return +} diff --git a/services/cs/client_test.go b/services/cs/client_test.go index 765b81d..d3f2e6e 100644 --- a/services/cs/client_test.go +++ b/services/cs/client_test.go @@ -9,6 +9,7 @@ import ( * 客服工单服务,单元测试 */ +// 获取faq树状数据 func TestGetFaq(t *testing.T) { client, newErr := NewClient() if newErr != nil { @@ -16,11 +17,27 @@ func TestGetFaq(t *testing.T) { } req := CreateGetFaqRequest() - info, err := client.GetFaq(req) + faq, err := client.GetFaq(req) if err != nil { t.Error(err) return } - fmt.Printf("%+v", info) + fmt.Printf(fmt.Sprintf("%#+v", faq)) +} + +// 获取玩家基本信息 +func TestGetUserInfo(t *testing.T) { + client, newErr := NewClient() + if newErr != nil { + panic(newErr) + } + req := CreateGetUserInfoRequest("ws45265737") + info, err := client.GetUserInfo(req) + if err != nil { + t.Error(err) + return + } + + fmt.Printf(fmt.Sprintf("%v", info)) } diff --git a/services/cs/user.go b/services/cs/user.go new file mode 100644 index 0000000..9815d65 --- /dev/null +++ b/services/cs/user.go @@ -0,0 +1,49 @@ +package cs + +import ( + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" +) + +/** + * 获取玩家(用户)相关信息 + */ + +// UserInfo 用户信息 +type UserInfo struct { + UserName string `json:"user_name"` + Uid int64 `json:"uid"` + Telephone string `json:"telephone"` +} + +type GetUserInfoRequest struct { + *requests.RpcRequest +} + +type GetUserInfoResponse struct { + *responses.BaseResponse + Code int `json:"code"` + Msg string `json:"msg"` + Data UserInfo `json:"data"` +} + +func CreateGetUserInfoRequest(userName string) (req *GetUserInfoRequest) { + req = &GetUserInfoRequest{ + RpcRequest: &requests.RpcRequest{}, + } + req.InitWithApiInfo(HOST, VERSION, "/v1/user/info") + + req.FormParams = map[string]string{ + "user_name": userName, + } + + req.Method = requests.POST + return +} + +func CreateGetUserInfoResponse() (response *GetUserInfoResponse) { + response = &GetUserInfoResponse{ + BaseResponse: &responses.BaseResponse{}, + } + return +} From d3f303e20cafbd61c8953276c3f2ea5064133bea Mon Sep 17 00:00:00 2001 From: liguanjie Date: Tue, 10 Jun 2025 14:19:18 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E3=80=90cs=E6=9C=8D=E5=8A=A1=E3=80=91=201?= =?UTF-8?q?=E3=80=81=E6=96=B0=E5=A2=9E=E7=94=A8=E6=88=B7=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/cs/client.go | 6 ++++++ services/cs/client_test.go | 20 ++++++++++++++++++++ services/cs/user.go | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+) diff --git a/services/cs/client.go b/services/cs/client.go index ed5af27..6a013ae 100644 --- a/services/cs/client.go +++ b/services/cs/client.go @@ -34,3 +34,9 @@ func (client *Client) GetUserInfo(req *GetUserInfoRequest) (resp *GetUserInfoRes err = client.DoAction(req, resp) return } + +func (client *Client) GetCsUserRoleList(req *GetUserRoleListRequest) (resp *GetUserRoleListResponse, err error) { + resp = CreateGetUserRoleListResponse() + err = client.DoAction(req, resp) + return +} diff --git a/services/cs/client_test.go b/services/cs/client_test.go index d3f2e6e..b51e5bb 100644 --- a/services/cs/client_test.go +++ b/services/cs/client_test.go @@ -41,3 +41,23 @@ func TestGetUserInfo(t *testing.T) { fmt.Printf(fmt.Sprintf("%v", info)) } + +// 获取玩家角色列表 +func TestGetUserRoleList(t *testing.T) { + client, newErr := NewClient() + if newErr != nil { + panic(newErr) + } + req := CreateGetUserRoleListRequest(int64(63610626), int64(2850)) + info, err := client.GetCsUserRoleList(req) + if err != nil { + t.Error(err) + return + } + if info.Code != 0 { + t.Error("获取玩家角色列表失败") + fmt.Printf(fmt.Sprintf("%v", info)) + return + } + fmt.Printf(fmt.Sprintf("%v", info)) +} diff --git a/services/cs/user.go b/services/cs/user.go index 9815d65..9f858e1 100644 --- a/services/cs/user.go +++ b/services/cs/user.go @@ -47,3 +47,40 @@ func CreateGetUserInfoResponse() (response *GetUserInfoResponse) { } return } + +// UserRoleInfo 玩家角色信息 +type UserRoleInfo struct { + Uid int64 `json:"uid"` + RoleName string `json:"role_name"` + RoleId string `json:"role_id"` +} + +type GetUserRoleListRequest struct { + *requests.JsonRequest +} + +type GetUserRoleListResponse struct { + *responses.BaseResponse + Code int `json:"code"` + Msg string `json:"msg"` + Data []UserRoleInfo `json:"data"` +} + +func CreateGetUserRoleListRequest(uId int64, gameId int64) (req *GetUserRoleListRequest) { + req = &GetUserRoleListRequest{ + JsonRequest: &requests.JsonRequest{}, + } + req.InitWithApiInfo(HOST, VERSION, "/v1/user/role_list") + + req.JsonParams["uid"] = uId + req.JsonParams["game_id"] = gameId + + req.Method = requests.POST + return +} +func CreateGetUserRoleListResponse() (response *GetUserRoleListResponse) { + response = &GetUserRoleListResponse{ + BaseResponse: &responses.BaseResponse{}, + } + return +} From 607dbc87c6d972e906f5672544e1c9cfba578b19 Mon Sep 17 00:00:00 2001 From: liguanjie Date: Tue, 10 Jun 2025 14:46:46 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E3=80=90cs=E6=9C=8D=E5=8A=A1=E3=80=91=201?= =?UTF-8?q?=E3=80=81=E6=96=B0=E5=A2=9E=E7=94=A8=E6=88=B7=E7=9F=AD=E4=BF=A1?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=E7=A0=81=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/cs/client.go | 12 +++++++ services/cs/client_test.go | 42 +++++++++++++++++++++++ services/cs/user.go | 69 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+) diff --git a/services/cs/client.go b/services/cs/client.go index 6a013ae..00e01f3 100644 --- a/services/cs/client.go +++ b/services/cs/client.go @@ -40,3 +40,15 @@ func (client *Client) GetCsUserRoleList(req *GetUserRoleListRequest) (resp *GetU err = client.DoAction(req, resp) return } + +func (client *Client) GetUserServerList(req *GetUserServerListRequest) (resp *GetUserServerListResponse, err error) { + resp = CreateGetUserServerListResponse() + err = client.DoAction(req, resp) + return +} + +func (client *Client) SendSmsCode(req *SendSmsRequest) (resp *SendSmsResponse, err error) { + resp = CreateSendSmsResponse() + err = client.DoAction(req, resp) + return +} diff --git a/services/cs/client_test.go b/services/cs/client_test.go index b51e5bb..33323fe 100644 --- a/services/cs/client_test.go +++ b/services/cs/client_test.go @@ -61,3 +61,45 @@ func TestGetUserRoleList(t *testing.T) { } fmt.Printf(fmt.Sprintf("%v", info)) } + +// 获取玩家区服列表 +func TestGetUserServerList(t *testing.T) { + client, newErr := NewClient() + if newErr != nil { + panic(newErr) + } + req := CreateGetUserServerListRequest(int64(63610626), int64(2850)) + info, err := client.GetUserServerList(req) + if err != nil { + t.Error(err) + return + } + if info.Code != 0 { + t.Error("获取玩家区服列表失败") + fmt.Printf(fmt.Sprintf("%v", info)) + return + } + fmt.Printf(fmt.Sprintf("%v", info)) +} + +// 给玩家发送短信 +func TestSendSms(t *testing.T) { + client, newErr := NewClient() + if newErr != nil { + panic(newErr) + } + req := CreateSendSmsRequest(SendSmsReq{ + Phone: "13725263463", + }) + info, err := client.SendSmsCode(req) + if err != nil { + t.Error(err) + return + } + if info.Code != 0 { + t.Error("给玩家发送短信失败") + fmt.Printf(fmt.Sprintf("%v", info)) + return + } + fmt.Printf(fmt.Sprintf("%v", info)) +} diff --git a/services/cs/user.go b/services/cs/user.go index 9f858e1..d65581b 100644 --- a/services/cs/user.go +++ b/services/cs/user.go @@ -84,3 +84,72 @@ func CreateGetUserRoleListResponse() (response *GetUserRoleListResponse) { } return } + +// UserServerInfo 玩家区服信息 +type UserServerInfo struct { + ServerName string `json:"server_name"` +} +type GetUserServerListRequest struct { + *requests.JsonRequest +} +type GetUserServerListResponse struct { + *responses.BaseResponse + Code int `json:"code"` + Msg string `json:"msg"` + Data []UserServerInfo `json:"data"` +} + +func CreateGetUserServerListRequest(uId int64, gameId int64) (req *GetUserServerListRequest) { + req = &GetUserServerListRequest{ + JsonRequest: &requests.JsonRequest{}, + } + req.InitWithApiInfo(HOST, VERSION, "/v1/user/server_list") + + req.JsonParams["uid"] = uId + req.JsonParams["game_id"] = gameId + + req.Method = requests.POST + return +} +func CreateGetUserServerListResponse() (response *GetUserServerListResponse) { + response = &GetUserServerListResponse{ + BaseResponse: &responses.BaseResponse{}, + } + return +} + +type SendSmsReq struct { + Phone string `json:"phone"` +} + +// SendSmsResp 发送短信返回 +type SendSmsResp struct { + // 短信发送时间戳,工单模块 有效期5分钟 + SendCodeTime int64 `json:"send_code_time"` +} + +type SendSmsRequest struct { + *requests.JsonRequest +} +type SendSmsResponse struct { + *responses.BaseResponse + Code int `json:"code"` + Msg string `json:"msg"` + Data SendSmsResp `json:"data"` +} + +func CreateSendSmsRequest(param SendSmsReq) (req *SendSmsRequest) { + req = &SendSmsRequest{ + JsonRequest: &requests.JsonRequest{}, + } + req.InitWithApiInfo(HOST, VERSION, "/v1/user/send_sms") + req.JsonParams["phone"] = param.Phone + req.Method = requests.POST + return +} +func CreateSendSmsResponse() (response *SendSmsResponse) { + response = &SendSmsResponse{ + BaseResponse: &responses.BaseResponse{}, + } + return +} From 2ab968dfb214836180b528459d37e4564a41e02a Mon Sep 17 00:00:00 2001 From: liguanjie Date: Tue, 10 Jun 2025 21:41:57 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E3=80=90cs=E6=9C=8D=E5=8A=A1=E3=80=91=201?= =?UTF-8?q?=E3=80=81=E6=96=B0=E5=A2=9E=E5=B7=A5=E5=8D=95=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/cs/client.go | 14 ++++++++++++ services/cs/client_test.go | 28 ++++++++++++++++++++++-- services/cs/order.go | 43 +++++++++++++++++++++++++++++++++++++ services/cs/test.png | Bin 0 -> 25168 bytes 4 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 services/cs/order.go create mode 100644 services/cs/test.png diff --git a/services/cs/client.go b/services/cs/client.go index 00e01f3..0daa1bf 100644 --- a/services/cs/client.go +++ b/services/cs/client.go @@ -1,6 +1,7 @@ package cs import ( + "errors" "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk" "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" ) @@ -52,3 +53,16 @@ func (client *Client) SendSmsCode(req *SendSmsRequest) (resp *SendSmsResponse, e err = client.DoAction(req, resp) return } + +func (client *Client) Upload(req *UploadRequest) (resp *UploadResponse, err error) { + // check file stream + if req.FileStream == nil { + err = errors.New("stream is empty") + return + } + // 必须设置content + req.SetContent(req.FileStream) + resp = CreateUploadResponse() + err = client.DoAction(req, resp) + return +} diff --git a/services/cs/client_test.go b/services/cs/client_test.go index 33323fe..95b65fe 100644 --- a/services/cs/client_test.go +++ b/services/cs/client_test.go @@ -2,6 +2,7 @@ package cs import ( "fmt" + "os" "testing" ) @@ -98,8 +99,31 @@ func TestSendSms(t *testing.T) { } if info.Code != 0 { t.Error("给玩家发送短信失败") - fmt.Printf(fmt.Sprintf("%v", info)) - return } fmt.Printf(fmt.Sprintf("%v", info)) } + +// 工单图片上传 +func TestUpload(t *testing.T) { + client, newErr := NewClient() + if newErr != nil { + panic(newErr) + } + // 读取文件流 + file, err := os.ReadFile("test.png") + if err != nil { + t.Error(err) + return + } + req := CreateUploadRequest() + req.FileStream = file + res, err := client.Upload(req) + if err != nil { + t.Error(err) + return + } + if res.Code != 0 { + t.Error("工单图片上传失败") + } + fmt.Printf(fmt.Sprintf("%v", res)) +} diff --git a/services/cs/order.go b/services/cs/order.go new file mode 100644 index 0000000..ccb7fb7 --- /dev/null +++ b/services/cs/order.go @@ -0,0 +1,43 @@ +package cs + +import ( + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests" + "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses" +) + +/** + * 客服工单,相关方法 + */ + +type UploadRequest struct { + *requests.StreamRequest + FileStream []byte +} + +type UploadResponse struct { + *responses.BaseResponse + Code int `json:"code"` + Msg string `json:"msg"` + Data struct { + FileName string `json:"file_name"` + FileUrl string `json:"file_url"` + FilePath string `json:"file_path"` + } + TraceId string `json:"trace_id"` +} + +func CreateUploadRequest() (req *UploadRequest) { + req = &UploadRequest{ + StreamRequest: &requests.StreamRequest{}, + } + + req.InitWithApiInfo(HOST, VERSION, "/v1/work_order/upload_image") + req.Method = requests.POST + return +} + +func CreateUploadResponse() (resp *UploadResponse) { + return &UploadResponse{ + BaseResponse: &responses.BaseResponse{}, + } +} diff --git a/services/cs/test.png b/services/cs/test.png new file mode 100644 index 0000000000000000000000000000000000000000..24b76517874b419de5e558dd7fb962aff6f325a8 GIT binary patch literal 25168 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

}Jele;?f)6?zerx(|ELLj-reemRo z3%UK1RaNqbHhsy4oR}8B#4@o;!zS9yn!KfdUHJ(0D~Hh-nf9x2z-C#)QiC?_$;(G zUub(q44#RJJpi!t{tYk99fUzEsz8CZe0qpef7P`Mq&MmDDRx>7d z1;J@2mo8Wi%gx0=#BEHjyrPia?C}2l-);h8R8h#t|E7<$44lx4#9lk1*(^~4Dj-cv zh(mNV+hu1&V68T8&}$=PIJiK6ba~tpkU$oNfNW&85664E1>632WE4Om+%^btK>xrg z8JJW2k=$aus#dAX7N|o;zm287hwYq2Ili+h4xbZ%Z>7%7*v5+FC@_gl4rk0Xj;tY0wvSxE+?J^;-jiyv zbrF5ocjUTwB-gvWcYIb*vn8b(`a4KSuoTI0CJlQ_DXE66dD0$il{vWnmHbhEyc``o z9Hx2}cP_UQUPlTz+l9^*OBjzzz9epCSkML|YE$Zz0dbAW#)g*eddIhK^a{^HVq%Gu zy8jkTBRie~a0mo>IrWGsoRrUkXU+YV(=!C?T#cKQx&EZ|zmoCBEdDJl+ohwY95M_8 znzgTgb|d!^W0R%F`XHN;$P_XvPDqXdsSTGozsp|EmE}5?5Tnp6C|Z$N!6V`S6Otr^pl%AI~yUasTg zW)-n*K~>XW2oGtQ7&@Mv96xzzKd__o6B)us&lvZa7`I@PCE3O zdL*P-zCrVOvr~0$q%Ed7Ud@-iQi%O+E9zT-cCO;*=jrb3yL%4R^mRIY15u)Buh*)f zE_dMEh_#lDR>UWW8cm^sIW@cwrF#zl!#$vhI2K?v`hzN z*2?e!>%X>DX+YH8efhDVI}=+xB)ca93rFDmE(*tL!X+kYK~9aw_ENx8MZh~AHAb=; zC|!#Ab^%qdp~@G zlP$-;zo&T7e2gdd@$C6+1oVGwPPVv3XnI@VkGoPf&Xq{zP(fdx34GkXtAQKlYrQ4@ z{gXDj`7tA8-;VBO-0w#L&iEe56uc5I?Qc@;_I9Z5t^Pn!3{Pz%z;*BwGx;6;(w+m- zuPks&{~5+uEVsLcZ3x%VZg6G?QdzxBce$jy=SMOcY2#VY9^+)MC4`q@%i6Iq(uqHG z^h+a+nz{hha3h+G@dHR?9xJ)N3!CT{In>K5EH}R}>3%PK^Oj2q@@n9V=;|52AjCv& z@9iopJ*{^#c0%PKGmfQAtEB2HS_g_si|9RulOe;=@i}hUZ}WRJ%6E?=;sPNv;4*;q zU^jlrC$%FX0hYe9wwYaG_^EEux~P)Mx|jk+a~Rv!r&~#V8Scb2O#Jj=3+tAqG3KTg zZ*ZILo^SD~N5$uE1{3Ei!7^c0R5~K{tkc!cL}Gil1u3G-Z^@vg%uVX8n^!?fQN4KS z_Sk^IUeDXkXS*~u zVSYk$2Dho^U|!Xzs84uFW_&=YJ2s?na3H)Not@IMb}nmXJUI(K__11+r))Qk|Ht3| zNvGoTmT{84Kx=_`eM**9ea{h|-vn6?Sn`8frK4`#_*Lt5EN1)qrq#-e4Zj6Yo7S

W!8qTkVJR<2Vj^ro_u@LxUMKtGuo^noooN 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 literal 0 HcmV?d00001 From a5e43aa59a3ac7c81aa6b471fc72d9fd6a690285 Mon Sep 17 00:00:00 2001 From: liguanjie Date: Tue, 10 Jun 2025 21:46:21 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E3=80=90cs=E6=9C=8D=E5=8A=A1=E3=80=91=201?= =?UTF-8?q?=E3=80=81json=E5=8F=82=E6=95=B0=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/cs/user.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/cs/user.go b/services/cs/user.go index d65581b..81a8b56 100644 --- a/services/cs/user.go +++ b/services/cs/user.go @@ -130,6 +130,7 @@ type SendSmsResp struct { type SendSmsRequest struct { *requests.JsonRequest + Phone string `position:"Json" field:"phone"` } type SendSmsResponse struct { *responses.BaseResponse @@ -141,9 +142,10 @@ type SendSmsResponse struct { func CreateSendSmsRequest(param SendSmsReq) (req *SendSmsRequest) { req = &SendSmsRequest{ JsonRequest: &requests.JsonRequest{}, + Phone: param.Phone, } req.InitWithApiInfo(HOST, VERSION, "/v1/user/send_sms") - req.JsonParams["phone"] = param.Phone + req.Method = requests.POST return }