6
0

feat(game): 新增 GetKfUrl 获取客服页面链接

This commit is contained in:
许 洋 2026-08-05 11:31:54 +08:00
parent cb6b85f727
commit a6cc33fcc4
3 changed files with 123 additions and 0 deletions

View File

@ -212,3 +212,10 @@ func (c *Client) GetPaySwitchUser(req *GetPaySwitchUserReq) (resp *GetPaySwitchU
err = c.DoAction(req, resp)
return
}
// GetKfUrl 获取客服页面链接(纯透传接口,业务参数由调用方准备)
func (c *Client) GetKfUrl(req *GetKfUrlReq) (resp *GetKfUrlResp, err error) {
resp = CreateGetKfUrlResp()
err = c.DoAction(req, resp)
return
}

57
services/game/kf.go Normal file
View File

@ -0,0 +1,57 @@
package game
import (
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
)
// GetKfUrlReq 获取客服页面链接请求
//
// 该接口为纯透传game.gaore.com 只负责补 timestamp、算 sign、拼 URL
// 业务参数(根游戏 ID、uid 等)由调用方自行准备。
//
// 字段类型说明:除必填且恒非零的 GameId 外,其余字段一律用 string。
// 原因是 addParam 仅在 len(value) > 0 时下发参数string 空值会被自动跳过;
// 若用 int64零值会被格式化成 "0" 照样下发,既产生 role_id=0 之类噪声,
// 也会让游客场景错误地带上 uid=0。
type GetKfUrlReq struct {
*requests.JsonRequest
GameId int64 `position:"Json" field:"game_id"` // 根游戏 ID必填
Uid string `position:"Json" field:"uid"` // 贪玩账号 uid游客留空不下传
UserName string `position:"Json" field:"username"` // 贪玩账号名
MainGameId string `position:"Json" field:"main_game_id"` // 主包游戏 ID
SubGameId string `position:"Json" field:"sub_game_id"` // 子包游戏 ID
ServerId string `position:"Json" field:"server_id"` // 区服 ID
ServerName string `position:"Json" field:"server_name"` // 区服名称
RoleId string `position:"Json" field:"role_id"` // 角色 ID
RoleName string `position:"Json" field:"role_name"` // 角色名称
From string `position:"Json" field:"from"` // 来源pc / h5 / ios / android / mini_program
Navbar string `position:"Json" field:"navbar"` // 传 "1" 显示返回按钮,默认不显示
}
// GetKfUrlRespData 客服链接,有效期 12 小时,调用方不得缓存
type GetKfUrlRespData struct {
KfUrl string `json:"kf_url"`
}
type GetKfUrlResp struct {
*responses.BaseResponse
Code int `json:"code"`
Msg string `json:"msg"`
Data GetKfUrlRespData `json:"data"`
}
func CreateGetKfUrlReq() *GetKfUrlReq {
req := &GetKfUrlReq{
JsonRequest: &requests.JsonRequest{},
}
req.InitWithApiInfo(HOST, VERSION, "/api/game/getKfUrl")
req.Method = requests.POST
return req
}
func CreateGetKfUrlResp() *GetKfUrlResp {
return &GetKfUrlResp{
BaseResponse: &responses.BaseResponse{},
}
}

59
services/game/kf_test.go Normal file
View File

@ -0,0 +1,59 @@
package game
import (
"fmt"
"strings"
"testing"
)
func TestGetKfUrl(t *testing.T) {
client, err := NewClient()
if err != nil {
t.Fatalf("NewClient err: %v", err)
}
req := CreateGetKfUrlReq()
req.GameId = 10001
req.Uid = "166146"
resp, err := client.GetKfUrl(req)
if err != nil {
t.Fatalf("GetKfUrl err: %v", err)
}
if resp.Code != 1 {
t.Fatalf("expect code 1, got %d, msg: %s", resp.Code, resp.Msg)
}
if !strings.Contains(resp.Data.KfUrl, "game_id=10001") {
t.Fatalf("kf_url 缺少 game_id: %s", resp.Data.KfUrl)
}
if !strings.Contains(resp.Data.KfUrl, "uid=166146") {
t.Fatalf("kf_url 缺少 uid: %s", resp.Data.KfUrl)
}
if !strings.Contains(resp.Data.KfUrl, "sign=") {
t.Fatalf("kf_url 缺少 sign: %s", resp.Data.KfUrl)
}
fmt.Println(resp.Code, resp.Msg, resp.Data.KfUrl)
}
// TestGetKfUrlGuest 游客场景:不设 Uid链接中不应出现 uid
func TestGetKfUrlGuest(t *testing.T) {
client, err := NewClient()
if err != nil {
t.Fatalf("NewClient err: %v", err)
}
req := CreateGetKfUrlReq()
req.GameId = 10003
resp, err := client.GetKfUrl(req)
if err != nil {
t.Fatalf("GetKfUrl err: %v", err)
}
if resp.Code != 1 {
t.Fatalf("expect code 1, got %d, msg: %s", resp.Code, resp.Msg)
}
if strings.Contains(resp.Data.KfUrl, "uid=") {
t.Fatalf("游客链接不应带 uid: %s", resp.Data.KfUrl)
}
fmt.Println(resp.Code, resp.Msg, resp.Data.KfUrl)
}