feat(www,web): 新增 RefreshUserSessionID 与 web.ForceOut
重置密码副作用配套: - services/www 新增 RefreshUserSessionID(清 www 登录态,apisdk.gaore.com /user/sdk_passport.php)及无凭证 NewClient - 新建 services/web 包,ForceOut 清官网 web 登录态(web.gaore.com /web/users/force_out) 端点/参数/签名与老综合后台 GaoreSDK 1:1 对齐
This commit is contained in:
parent
34fbd24365
commit
252e5953f3
42
services/web/client.go
Normal file
42
services/web/client.go
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
package web
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
|
||||||
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
VERSION = "2020-01-01"
|
||||||
|
)
|
||||||
|
|
||||||
|
// HOST 官网 web 服务域名(带 ".",SDK 不会再追加 .gaore.com)
|
||||||
|
var HOST = requests.Host{
|
||||||
|
Default: "web.gaore.com",
|
||||||
|
}
|
||||||
|
|
||||||
|
type Client struct {
|
||||||
|
sdk.Client
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewClient() (client *Client, err error) {
|
||||||
|
client = new(Client)
|
||||||
|
err = client.Init()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ForceOut 清除玩家官网 web 登录 session,返回远端原始响应
|
||||||
|
// 对齐老综合后台 GaoreSDK web->force_out
|
||||||
|
func (c *Client) ForceOut(userName string, ts int64) (response string, err error) {
|
||||||
|
req := CreateForceOutReq(userName, ts)
|
||||||
|
resp := CreateForceOutResp()
|
||||||
|
err = c.DoAction(req, resp)
|
||||||
|
if err != nil && strings.Contains(err.Error(), "json Unmarshal:") {
|
||||||
|
// 远端返回非 JSON(如纯文本),直接取原始响应
|
||||||
|
return resp.GetHttpContentString(), nil
|
||||||
|
} else if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return resp.GetHttpContentString(), nil
|
||||||
|
}
|
||||||
44
services/web/force_out.go
Normal file
44
services/web/force_out.go
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package web
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||||
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||||
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
// forceOutSignKey 老综合后台业务层计算 sign 用的固定盐
|
||||||
|
const forceOutSignKey = "user_session_20220505"
|
||||||
|
|
||||||
|
type ForceOutReq struct {
|
||||||
|
*requests.RpcRequest
|
||||||
|
}
|
||||||
|
|
||||||
|
type ForceOutResp struct {
|
||||||
|
*responses.BaseResponse
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateForceOutReq 创建官网强制下线请求
|
||||||
|
// POST web.gaore.com/web/users/force_out,sign=md5(user_name+time+"user_session_20220505")
|
||||||
|
func CreateForceOutReq(userName string, ts int64) *ForceOutReq {
|
||||||
|
sign := utils.Md5(fmt.Sprintf("%s%d%s", userName, ts, forceOutSignKey))
|
||||||
|
|
||||||
|
req := &ForceOutReq{
|
||||||
|
RpcRequest: &requests.RpcRequest{},
|
||||||
|
}
|
||||||
|
req.InitWithApiInfo(HOST, VERSION, "/web/users/force_out")
|
||||||
|
req.FormParams = map[string]string{
|
||||||
|
"user_name": userName,
|
||||||
|
"time": fmt.Sprintf("%d", ts),
|
||||||
|
"sign": sign,
|
||||||
|
}
|
||||||
|
req.Method = requests.POST
|
||||||
|
return req
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateForceOutResp() *ForceOutResp {
|
||||||
|
return &ForceOutResp{
|
||||||
|
BaseResponse: &responses.BaseResponse{},
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,6 +1,8 @@
|
|||||||
package www
|
package www
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
|
||||||
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||||
)
|
)
|
||||||
@ -25,6 +27,13 @@ type Client struct {
|
|||||||
sdk.Client
|
sdk.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewClient 无凭证客户端(用于自带签名的表单接口,如 refreshUserSessionId)
|
||||||
|
func NewClient() (client *Client, err error) {
|
||||||
|
client = &Client{}
|
||||||
|
err = client.Init()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func NewClientWithAccessKey(accesskey, secrect, source string) (client *Client, err error) {
|
func NewClientWithAccessKey(accesskey, secrect, source string) (client *Client, err error) {
|
||||||
client = &Client{}
|
client = &Client{}
|
||||||
err = client.InitWithAccessKey(accesskey, secrect, source)
|
err = client.InitWithAccessKey(accesskey, secrect, source)
|
||||||
@ -42,3 +51,17 @@ func (c *Client) GetUserInfo(req *GetPwdRequest) (response *GetPwdResponse, err
|
|||||||
err = c.DoAction(req, response)
|
err = c.DoAction(req, response)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RefreshUserSessionID 刷新用户 session(清 www 登录态),返回远端原始响应
|
||||||
|
func (c *Client) RefreshUserSessionID(uname string) (response string, err error) {
|
||||||
|
req := CreateRefreshUserSessionIDReq(uname)
|
||||||
|
resp := CreateRefreshUserSessionIDResp()
|
||||||
|
err = c.DoAction(req, resp)
|
||||||
|
if err != nil && strings.Contains(err.Error(), "json Unmarshal:") {
|
||||||
|
// 远端返回非 JSON(如纯文本),直接取原始响应
|
||||||
|
return resp.GetHttpContentString(), nil
|
||||||
|
} else if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return resp.GetHttpContentString(), nil
|
||||||
|
}
|
||||||
|
|||||||
55
services/www/refresh_session.go
Normal file
55
services/www/refresh_session.go
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
package www
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
|
||||||
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
|
||||||
|
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 对齐老综合后台 GaoreSDK www->refreshUserSessionId 的固定 appid=20 验签
|
||||||
|
const (
|
||||||
|
refreshSessionAppID = "20"
|
||||||
|
refreshSessionAppKey = "yWpx3hWQHFhSnTCj#20#6KuRKuaAjLJ5sYRy"
|
||||||
|
)
|
||||||
|
|
||||||
|
// refreshSessionHost 老 PHP SDK 打的是 apisdk.gaore.com,与本包默认 HOST(apisdk.9ooo.cn) 不同,
|
||||||
|
// 此处显式固定到 apisdk.gaore.com,与老综合后台 1:1 对齐。
|
||||||
|
var refreshSessionHost = requests.Host{Default: "apisdk.gaore.com"}
|
||||||
|
|
||||||
|
type RefreshUserSessionIDReq struct {
|
||||||
|
*requests.RpcRequest
|
||||||
|
}
|
||||||
|
|
||||||
|
type RefreshUserSessionIDResp struct {
|
||||||
|
*responses.BaseResponse
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateRefreshUserSessionIDReq 刷新用户 www session(使官网/9ooo 登录态失效)
|
||||||
|
// POST /user/sdk_passport.php,sign=md5(appkey+time)
|
||||||
|
func CreateRefreshUserSessionIDReq(uname string) *RefreshUserSessionIDReq {
|
||||||
|
ts := time.Now().Unix()
|
||||||
|
sign := utils.Md5(refreshSessionAppKey + fmt.Sprintf("%d", ts))
|
||||||
|
|
||||||
|
req := &RefreshUserSessionIDReq{
|
||||||
|
RpcRequest: &requests.RpcRequest{},
|
||||||
|
}
|
||||||
|
req.InitWithApiInfo(refreshSessionHost, VERSION, "/user/sdk_passport.php")
|
||||||
|
req.FormParams = map[string]string{
|
||||||
|
"appid": refreshSessionAppID,
|
||||||
|
"time": fmt.Sprintf("%d", ts),
|
||||||
|
"do": "refreshUserSessionId",
|
||||||
|
"uname": uname,
|
||||||
|
"sign": sign,
|
||||||
|
}
|
||||||
|
req.Method = requests.POST
|
||||||
|
return req
|
||||||
|
}
|
||||||
|
|
||||||
|
func CreateRefreshUserSessionIDResp() *RefreshUserSessionIDResp {
|
||||||
|
return &RefreshUserSessionIDResp{
|
||||||
|
BaseResponse: &responses.BaseResponse{},
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user