Merge branch 'master' of https://golib.gaore.com/GaoreGo/gaore-common-sdk-go
This commit is contained in:
commit
85ab17cfd6
@ -18,10 +18,10 @@ func signRpcRequest(request requests.AcsRequest, signer Signer) (err error) {
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if signer != nil {
|
||||
if _, isContainsSign := request.GetQueryParams()["sign"]; isContainsSign {
|
||||
delete(request.GetQueryParams(), "sign")
|
||||
}
|
||||
|
||||
stringToSign := buildRpcStringToSign(request)
|
||||
request.SetStringToSign(stringToSign)
|
||||
signature := signer.Sign(stringToSign, "&")
|
||||
@ -29,11 +29,12 @@ func signRpcRequest(request requests.AcsRequest, signer Signer) (err error) {
|
||||
debug("GrSdk sign: %s", signature)
|
||||
debug("GrSdk sign string: %s", stringToSign)
|
||||
debug("GrSdk sign: \r\n")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func completeRpcSignParams(request requests.AcsRequest, signer Signer) (err error) {
|
||||
|
||||
if signer != nil {
|
||||
var accessKeyFrom string
|
||||
if accessKeyFrom, err = signer.GetAccessKeyFrom(); err != nil {
|
||||
return
|
||||
@ -43,13 +44,14 @@ func completeRpcSignParams(request requests.AcsRequest, signer Signer) (err erro
|
||||
queryParams["access_time"] = fmt.Sprintf("%d", time.Now().Unix())
|
||||
queryParams["access_key"], err = signer.GetAccessKeyId()
|
||||
queryParams["access_from"] = accessKeyFrom
|
||||
request.GetHeaders()["Gr-Sdk-From"] = accessKeyFrom
|
||||
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
request.GetHeaders()["Content-type"] = requests.Form
|
||||
request.GetHeaders()["Gr-Sdk-From"] = accessKeyFrom
|
||||
|
||||
formString := utils.GetUrlFormedMap(request.GetFormParams())
|
||||
request.SetContent(bytes.NewBufferString(formString).Bytes())
|
||||
return
|
||||
|
@ -91,11 +91,15 @@ func (client *Client) Init() (err error) {
|
||||
|
||||
func (client *Client) InitWithAccessKey(accessKeyId, accessKeySecret, accessKeyFrom string) (err error) {
|
||||
config := client.InitWithConfig()
|
||||
credential := &credentials.BaseCredential{
|
||||
var credential auth.Credential
|
||||
if accessKeyId != "" {
|
||||
credential = &credentials.BaseCredential{
|
||||
AccessKeyId: accessKeyId,
|
||||
AccessKeySecret: accessKeySecret,
|
||||
AccessKeyFrom: accessKeyFrom,
|
||||
}
|
||||
}
|
||||
|
||||
return client.InitWithOptions(config, credential)
|
||||
}
|
||||
|
||||
@ -133,8 +137,9 @@ func (client *Client) InitWithOptions(config *Config, credential auth.Credential
|
||||
if config.Timeout > 0 {
|
||||
client.httpClient.Timeout = config.Timeout
|
||||
}
|
||||
|
||||
if credential != nil {
|
||||
client.signer, err = auth.NewSignerWithCredential(credential, client.ProcessCommonRequestWithSigner)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -89,7 +89,7 @@ func Unmarshal(response AcsResponse, httpResponse *http.Response, format string)
|
||||
return
|
||||
}
|
||||
|
||||
if _, isCommonResponse := response.(CommonResponse); isCommonResponse {
|
||||
if _, isCommonResponse := response.(*CommonResponse); isCommonResponse {
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -109,3 +109,8 @@ func InitStructWithDefaultTag(bean interface{}) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func Md5(data string) string {
|
||||
s := md5.Sum([]byte(data))
|
||||
return hex.EncodeToString(s[:])
|
||||
}
|
||||
|
@ -23,3 +23,7 @@ func TestInitStructWithDefaultTag(t *testing.T) {
|
||||
InitStructWithDefaultTag(testcase)
|
||||
fmt.Printf("%+v", testcase)
|
||||
}
|
||||
|
||||
func TestMd5(t *testing.T) {
|
||||
t.Log(Md5("123456"))
|
||||
}
|
||||
|
61
services/msdk/client.go
Normal file
61
services/msdk/client.go
Normal file
@ -0,0 +1,61 @@
|
||||
package msdk
|
||||
|
||||
import (
|
||||
"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/responses"
|
||||
)
|
||||
|
||||
const VERSION = "2024-06-25"
|
||||
|
||||
var HOST = requests.Host{
|
||||
Default: "msdk.api.gaore.com",
|
||||
}
|
||||
|
||||
type Client struct {
|
||||
sdk.Client
|
||||
}
|
||||
|
||||
func NewClient() (client *Client, err error) {
|
||||
client = &Client{}
|
||||
err = client.Init()
|
||||
return
|
||||
}
|
||||
|
||||
// GetIdfa 获取设备归因信息
|
||||
func (c *Client) GetIdfa(req *GetIdfaReq) (resp *GetIdfaResp, err error) {
|
||||
resp = &GetIdfaResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
if req.Imei == "" && req.Idfa != "" {
|
||||
req.Imei = req.Idfa
|
||||
}
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
// GetUserAttr 获取用户归因信息
|
||||
func (c *Client) GetUserAttr(req *GetUserAttrReq) (resp *GetUserAttrResp, err error) {
|
||||
resp = &GetUserAttrResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
// GetImei 用户注册归因
|
||||
func (c *Client) GetImei(req *GetImeiReq) (resp *GetImeiResp, err error) {
|
||||
resp = &GetImeiResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Client) SetImei(req *SetImeiReq) (resp *SetImeiResp, err error) {
|
||||
resp = &SetImeiResp{
|
||||
BaseResponse: &responses.BaseResponse{},
|
||||
}
|
||||
err = c.DoAction(req, resp)
|
||||
return
|
||||
}
|
141
services/msdk/client_test.go
Normal file
141
services/msdk/client_test.go
Normal file
@ -0,0 +1,141 @@
|
||||
package msdk
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestClient_GetUserAttr(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
req := CreateGetUserAttrReq("ql83649336", "xxhbbxxl")
|
||||
resp, err := client.GetUserAttr(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
t.Log(resp)
|
||||
}
|
||||
|
||||
func TestGetIdfa(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
req := CreateGetIdfaReq()
|
||||
req.ChannelId = 1
|
||||
req.GameId = 3706
|
||||
req.Ip = "112.23.230.210"
|
||||
req.Imei = "00000000-0000-0000-0000-000000000000"
|
||||
req.LongId = "daff65f07c7cf84862f4217773e3d613"
|
||||
req.SdkVersion = "1.7.2"
|
||||
req.Os = "ios"
|
||||
req.GameOs = 2
|
||||
req.GameSubOs = 0
|
||||
req.Ua = "Mozilla/5.0 (iPad; CPU OS 15_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"
|
||||
req.GameSign = "hlhj"
|
||||
req.PkgAgentId = "100"
|
||||
req.PkgSiteId = "1001"
|
||||
req.Network = "Wifi"
|
||||
req.Idfv = "53F2A5F7-B1D4-4716-9775-07727C29BC7A"
|
||||
req.ScreenResolution = "2360*1640"
|
||||
req.System = "15.6.1"
|
||||
req.ProcessorModel = "iPad13,16"
|
||||
req.BaseBand = ""
|
||||
req.Model = "iPad13,16"
|
||||
req.Battery = "74"
|
||||
req.Oaid = ""
|
||||
req.AdInfo = ""
|
||||
req.WxPlatform = ""
|
||||
req.AdDevice = "{\"bootTimeInSec\":\"1745364499\",\"countryCode\":\"CN\",\"language\":\"zh-Hans-CN\",\"deviceName\":\"1b9018182a49e16ba85bb095f224867c\",\"systemVersion\":\"15.6.1\",\"machine\":\"iPad13,16\",\"carrierInfo\":\"unknown\",\"memory\":\"8000356352\",\"disk\":\"255983177728\",\"sysFileTime\":\"1663537105.729985\",\"model\":\"J407AP\",\"timeZone\":\"28800\",\"mntId\":\"A058368B97B0D073829608AAC13FFA64D9BEFD0FE3E14EDB106F2BABD6DF94B1C2BFC7509CBB683EE5B22D91A19FF67A@/dev/disk0s1s1\",\"deviceInitTime\":\"1663537056.906820124\"}"
|
||||
resp, err := client.GetIdfa(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
t.Log(resp)
|
||||
}
|
||||
|
||||
func TestGetImei(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
req := CreateGetImeiReq()
|
||||
req.Uid = 218047048
|
||||
req.UserName = "ct939725671"
|
||||
req.GameId = 8050
|
||||
req.GameSign = "mrwld"
|
||||
req.RegTime = 1750939725
|
||||
req.Imei = "of5wO5sKWep0OFPt9rWQf6xNJVPg"
|
||||
req.ChannelId = 1
|
||||
req.AgentId = 100
|
||||
req.SiteId = 1001
|
||||
req.Ip = "1864204063"
|
||||
req.Idfa = "of5wO5sKWep0OFPt9rWQf6xNJVPg"
|
||||
req.Logined = 1
|
||||
req.MatchType = 1
|
||||
req.GameAwemeId = ""
|
||||
req.ComeBackUser = 0
|
||||
req.FanCode = ""
|
||||
req.Network = ""
|
||||
req.Idfv = ""
|
||||
req.ScreenResolution = ""
|
||||
req.System = ""
|
||||
req.Electric = ""
|
||||
req.ProcessorModel = ""
|
||||
req.BaseBand = ""
|
||||
req.Model = ""
|
||||
req.Battery = ""
|
||||
req.Oaid = ""
|
||||
req.AdInfo = ""
|
||||
req.AdDevice = ""
|
||||
req.Ua = "WebSdk GaoreGame/1.3.1"
|
||||
req.WxPlatform = ""
|
||||
resp, err := client.GetImei(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
t.Log(resp)
|
||||
}
|
||||
|
||||
func TestSetImei(t *testing.T) {
|
||||
client, err := NewClient()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
req := CreateSetImeiReq()
|
||||
// 基础字段赋值
|
||||
req.UserName = "15179405888"
|
||||
req.GameId = 6062
|
||||
req.GameSign = "hlhj"
|
||||
req.ChannelId = 1 // mtype
|
||||
req.MatchType = 2
|
||||
req.Imei = "96d9acdd57535c92-null"
|
||||
req.Idfa = "96d9acdd57535c92-null"
|
||||
req.Network = "4G"
|
||||
req.Idfv = ""
|
||||
req.ScreenResolution = "2132x1080"
|
||||
req.System = "11"
|
||||
req.ProcessorModel = ""
|
||||
req.BaseBand = ""
|
||||
req.Model = "PCDM10"
|
||||
req.Battery = "45"
|
||||
req.Oaid = "B9258E43A5084B43B72D94580C830898343a97328d6fd210b9e23859b1d5e83d_gaore_"
|
||||
req.AdInfo = ""
|
||||
req.AdDevice = ""
|
||||
req.Ua = "Mozilla/5.0 (Linux; Android 11; PCDM10 Build/RP1A.200720.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.106 Mobile Safari/537.36; SHGR GaoreGame/2.3.5"
|
||||
req.WxPlatform = ""
|
||||
|
||||
resp, err := client.SetImei(req)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
t.Log(resp)
|
||||
}
|
218
services/msdk/user.go
Normal file
218
services/msdk/user.go
Normal file
@ -0,0 +1,218 @@
|
||||
package msdk
|
||||
|
||||
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"
|
||||
"time"
|
||||
)
|
||||
|
||||
const msdkKey = "msdk@gaore.com#!!"
|
||||
|
||||
type GetIdfaReq struct {
|
||||
*requests.RpcRequest
|
||||
ChannelId int `position:"Query" field:"mtype"`
|
||||
GameId int `position:"Query" field:"game_id"`
|
||||
GameSign string `position:"Query" field:"game_sign"`
|
||||
Ip string `position:"Query" field:"ip"`
|
||||
Imei string `position:"Query" field:"imei"`
|
||||
Idfa string `position:"Query" field:"idfa"`
|
||||
Idfv string `position:"Query" field:"idfv"`
|
||||
LongId string `position:"Query" field:"long_id"`
|
||||
SdkVersion string `position:"Query" field:"version"`
|
||||
Os string `position:"Query" field:"os"`
|
||||
GameOs int `position:"Query" field:"game_os"`
|
||||
GameSubOs int `position:"Query" field:"game_sub_os"`
|
||||
UserName string `position:"Query" field:"user_name"`
|
||||
Ua string `position:"Query" field:"ua"`
|
||||
LiveCode string `position:"Query" field:"live_code"`
|
||||
AdDevice string `position:"Query" field:"ad_device"`
|
||||
PkgAgentId string `position:"Query" field:"pkg_agent_id"`
|
||||
PkgSiteId string `position:"Query" field:"pkg_site_id"`
|
||||
Network string `position:"Query" field:"network"`
|
||||
ScreenResolution string `position:"Query" field:"screen_resolution"`
|
||||
System string `position:"Query" field:"system"`
|
||||
Electric string `position:"Query" field:"electric"`
|
||||
ProcessorModel string `position:"Query" field:"processor_model"`
|
||||
BaseBand string `position:"Query" field:"baseband"`
|
||||
Model string `position:"Query" field:"model"`
|
||||
Battery string `position:"Query" field:"battery"`
|
||||
Oaid string `position:"Query" field:"oaid"`
|
||||
AdInfo string `position:"Query" field:"adinfo"`
|
||||
WxPlatform string `position:"Query" field:"wx_platform"`
|
||||
}
|
||||
|
||||
type GetIdfaResp struct {
|
||||
*responses.BaseResponse
|
||||
GameId int `json:"game_id"`
|
||||
AgentId int `json:"agent_id"`
|
||||
SiteId int `json:"site_id"`
|
||||
GameAwemeId string `json:"game_aweme_id"`
|
||||
LongId string `json:"long_id"`
|
||||
DeviceId string `json:"device_id"`
|
||||
Exists bool `json:"exists"`
|
||||
FromAd bool `json:"from_ad"`
|
||||
MatchType int `json:"match_type"`
|
||||
ClickId string `json:"click_id,omitempty"` // 非必要字段,使用 omitempty 忽略空值
|
||||
MatchTrace string `json:"match_trace,omitempty"` // 非必要字段
|
||||
RegTime int64 `json:"reg_time"`
|
||||
}
|
||||
|
||||
func CreateGetIdfaReq() *GetIdfaReq {
|
||||
req := &GetIdfaReq{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/getIdfa.php")
|
||||
req.Method = requests.GET
|
||||
return req
|
||||
}
|
||||
|
||||
type GetUserAttrReq struct {
|
||||
*requests.RpcRequest
|
||||
UserName string `position:"Query" field:"user_name"`
|
||||
GameSign string `position:"Query" field:"game_sign"`
|
||||
Ts int64 `position:"Query" field:"ts"`
|
||||
Sign string `position:"Query" field:"sign"`
|
||||
}
|
||||
|
||||
type GetUserAttrResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data struct {
|
||||
Uid int `json:"uid"`
|
||||
UserName string `json:"user_name"`
|
||||
RegTime int `json:"reg_time"` // 假设注册时间是时间戳
|
||||
GameID int `json:"game_id"`
|
||||
RegIP string `json:"reg_ip"`
|
||||
AgentId int `json:"agent_id"`
|
||||
SiteId int `json:"site_id"`
|
||||
Imei string `json:"imei"`
|
||||
Oaid string `json:"oaid"`
|
||||
LongId string `json:"long_id"`
|
||||
PromotionId string `json:"promotion_id"`
|
||||
Mid3 string `json:"mid3"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
||||
func CreateGetUserAttrReq(userName, gameSign string) *GetUserAttrReq {
|
||||
req := &GetUserAttrReq{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.UserName = userName
|
||||
req.GameSign = gameSign
|
||||
req.Ts = time.Now().Unix()
|
||||
req.Sign = utils.Md5(fmt.Sprintf("%d%s", req.Ts, msdkKey))
|
||||
req.InitWithApiInfo(HOST, VERSION, "/getUserAttr.php")
|
||||
req.Method = requests.GET
|
||||
return req
|
||||
}
|
||||
|
||||
type GetImeiReq struct {
|
||||
*requests.RpcRequest
|
||||
Uid int `position:"Query" field:"uid"`
|
||||
UserName string `position:"Query" field:"user_name"`
|
||||
GameId int `position:"Query" field:"game_id"`
|
||||
GameSign string `position:"Query" field:"game_sign"`
|
||||
RegTime int64 `position:"Query" field:"reg_time"`
|
||||
Imei string `position:"Query" field:"imei"`
|
||||
ChannelId int `position:"Query" field:"mtype"`
|
||||
AgentId int `position:"Query" field:"agent_id"`
|
||||
SiteId int `position:"Query" field:"site_id"`
|
||||
Ip string `position:"Query" field:"ip"`
|
||||
UserIp string `position:"Query" field:"user_ip"`
|
||||
Idfa string `position:"Query" field:"idfa"`
|
||||
Logined int `position:"Query" field:"logined"`
|
||||
MatchType int `position:"Query" field:"match_type"`
|
||||
GameAwemeId string `position:"Query" field:"game_aweme_id"`
|
||||
ComeBackUser int `position:"Query" field:"come_back_user"` //回流用户标识 1=>回流用户
|
||||
LpReg int `position:"Query" field:"lp_reg"` // 落地页注册用户标识
|
||||
FanCode string `position:"Query" field:"fan_code"` // 粉丝码
|
||||
Network string `position:"Query" field:"network"`
|
||||
Idfv string `position:"Query" field:"idfv"`
|
||||
ScreenResolution string `position:"Query" field:"screen_resolution"`
|
||||
System string `position:"Query" field:"system"`
|
||||
Electric string `position:"Query" field:"electric"`
|
||||
ProcessorModel string `position:"Query" field:"processor_model"`
|
||||
BaseBand string `position:"Query" field:"baseband"`
|
||||
Model string `position:"Query" field:"model"`
|
||||
Battery string `position:"Query" field:"battery"`
|
||||
Oaid string `position:"Query" field:"oaid"`
|
||||
AdInfo string `position:"Query" field:"adinfo"`
|
||||
AdDevice string `position:"Query" field:"ad_device"`
|
||||
Ua string `position:"Query" field:"ua"`
|
||||
WxPlatform string `position:"Query" field:"wx_platform"`
|
||||
}
|
||||
|
||||
type GetImeiResp struct {
|
||||
*responses.BaseResponse
|
||||
Uid string `json:"uid"`
|
||||
UserName string `json:"user_name"`
|
||||
Openid string `json:"openid"`
|
||||
ChannelId string `json:"mtype"`
|
||||
Logined int `json:"logined"`
|
||||
GameId string `json:"game_id"`
|
||||
GameSign string `json:"game_sign"`
|
||||
MatchType int `json:"match_type"`
|
||||
RegTime int64 `json:"reg_time"` // 原始时间戳字符串
|
||||
Imei string `json:"imei"`
|
||||
Oaid string `json:"oaid"`
|
||||
Idfa string `json:"idfa"`
|
||||
Ip int64 `json:"ip"`
|
||||
UserIp string `json:"user_ip"`
|
||||
Ua string `json:"ua"`
|
||||
Media string `json:"media"`
|
||||
AgentId int `json:"agent_id"`
|
||||
SiteId int `json:"site_id"`
|
||||
AdInfo string `json:"adinfo"`
|
||||
GameAwemeId string `json:"game_aweme_id"`
|
||||
}
|
||||
|
||||
func CreateGetImeiReq() *GetImeiReq {
|
||||
req := &GetImeiReq{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/getImei.php")
|
||||
req.Method = requests.GET
|
||||
return req
|
||||
}
|
||||
|
||||
type SetImeiReq struct {
|
||||
*requests.RpcRequest
|
||||
UserName string `position:"Query" field:"user_name"`
|
||||
GameId int `position:"Query" field:"game_id"`
|
||||
Imei string `position:"Query" field:"imei"`
|
||||
Idfa string `position:"Query" field:"idfa"`
|
||||
GameSign string `position:"Query" field:"game_sign"`
|
||||
ChannelId int `position:"Query" field:"mtype"`
|
||||
MatchType int `position:"Query" field:"match_type"`
|
||||
Network string `position:"Query" field:"network"`
|
||||
Idfv string `position:"Query" field:"idfv"`
|
||||
ScreenResolution string `position:"Query" field:"screen_resolution"`
|
||||
System string `position:"Query" field:"system"` // 可能为系统版本号字符串
|
||||
ProcessorModel string `position:"Query" field:"processor_model"`
|
||||
BaseBand string `position:"Query" field:"baseband"`
|
||||
Model string `position:"Query" field:"model"`
|
||||
Battery string `position:"Query" field:"battery"`
|
||||
Oaid string `position:"Query" field:"oaid"`
|
||||
AdInfo string `position:"Query" field:"adinfo"`
|
||||
AdDevice string `position:"Query" field:"ad_device"`
|
||||
Ua string `position:"Query" field:"ua"`
|
||||
WxPlatform string `position:"Query" field:"wx_platform"`
|
||||
}
|
||||
|
||||
type SetImeiResp struct {
|
||||
*responses.BaseResponse
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
}
|
||||
|
||||
func CreateSetImeiReq() *SetImeiReq {
|
||||
req := &SetImeiReq{
|
||||
RpcRequest: &requests.RpcRequest{},
|
||||
}
|
||||
req.InitWithApiInfo(HOST, VERSION, "/setImei.php")
|
||||
req.Method = requests.GET
|
||||
return req
|
||||
}
|
Loading…
Reference in New Issue
Block a user