# GHOME SDK 服务端 API (国内)
# 1. 【认证】服务器登录票据验证接口
用法说明
为了保证游戏服务器的安全性,游戏服务器在登记用户登录信息之前需要到G家平台服务器做一个验证
接口地址
https://mservice.sdo.com/v1/open/ticket
传值方式
GET
参数列表
appid: 游戏对应的APPID
timestamp: 精确到秒的unix时间戳
sequence: 不重复的请求序列号(全局唯一)
ticket_id: 从客户端登录接口返回的ticket字符串;
sign: 签名串(参考:“附录A:服务器端签名算法”,签名原始串示例:appid=xxx&sequence=xxx&ticket_id=xxx & timestamp=xxxappsecretkey)
返回结果
返回结果按json编码,数据格式为:
{
"code":0, #返回状态,0为成功,1为失败,2 签名错误7 osap商户不存在,3001 票据不存在或超过有效期或被反复验证,1003 票据申请的appId和验证的APPID不一致
"msg":"ok", #错误信息
"data":{
"userid":123456, #平台用户id,纯数字,无类型。
"token":"40E00263-16A7-8CFA-D0E8-C951D683EA24", #平台TOKEN,36位字符串,暂时不用
"phone":"+86-139****6893", #手机帐号,带国际区号,可用于显示帐号
"invitation_code":"34343", #邀请码
"thirdId":"34343", #第三方账号ID
"companyId":"172", #第三方公司ID,172表示为盛趣账号体系
"userAttribute": "6", #6表示游客,其他值表示非游客
"adult_flag":2, #0未实名,1未成年,2成年
"ptid":"ac12345bd.pt", #pt账号,仅当companyId=172时返回
"sndaCompanyId":"301" #微信微博qq账号接入盛趣账号体系第三方id,300:微信;301:QQ;302:微博 等
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
错误处理
错误码 错误信息 错误处理 说明 3001 ticket timeout 验证失败服务端票据验证返回3001场景,请游戏客户端重新拉起GHome登录框,让用户重新登录。 该错误发生有两个场景:
1.票据过期,认证票据有效期为5分钟。当游戏存在某些业务导致可能超过5分钟时,我们建议游戏客户端先行调用GHome SDK内getTicket
方法获取最新票据
2.新用户注册,并实名为未成年人且在不允许游玩时间内,拦截认证行为返回。此逻辑是处于下面两方面考虑:a.部分老游戏无法处理新增的未知错误,可能会导致游戏服务器异常,所以复用该错误码 b.部分游戏使用老版本,并因种种原因无力更新新版本sdk,由验证票据流程兜底
# 2. 【认证】服务器登录票据验证接口V2
用法说明
非游戏特殊需要,建议使用第一版接口,此v2版接口逻辑新增入参areaid和响应参数gameAccount 为了保证游戏服务器的安全性,游戏服务器在登记用户登录信息之前需要到G家平台服务器做一个验证
接口地址
https://mservice.sdo.com/v1/open/ticket2
传值方式
GET
参数列表
appid: 游戏对应的APPID
areaid: 游戏区号,针对传奇世界新增
timestamp: 精确到秒的unix时间戳
sequence: 不重复的请求序列号(全局唯一)
ticket_id: 从客户端登录接口返回的ticket字符串;
sign: 签名串(参考:“附录A:服务器端签名算法”,签名原始串示例:appid=xxx&areaid=xxx&sequence=xxx&ticket_id=xxx & timestamp=xxxappsecretkey)
返回结果
返回结果按json编码,数据格式为:
{
"code":0, #返回状态,0为成功,1为失败,2 签名错误7 osap商户不存在,3001 票据不存在或超过有效期或被反复验证,1003 票据申请的appId和验证的APPID不一致
"msg":"ok", #错误信息
"data":{
"userid":123456, #平台用户id,纯数字,无类型。
"token":"40E00263-16A7-8CFA-D0E8-C951D683EA24", #平台TOKEN,36位字符串,暂时不用
"phone":"+86-139****6893", #手机帐号,带国际区号,可用于显示帐号
"invitation_code":"34343", #邀请码
"thirdId":"34343", #第三方账号ID
"companyId":"172", #第三方公司ID,172表示为盛趣账号体系
"userAttribute": "6", #6表示游客,其他值表示非游客
"adult_flag":2, #0未实名,1未成年,2成年
"ptid":"ac12345bd.pt", #pt账号,仅当companyId=172时返回
"sndaCompanyId":"301" #微信微博qq账号接入盛趣账号体系第三方id,300:微信;301:QQ;302:微博 等
"gameAccount":"#0123ABCD", # 需注意,v1/open/ticket2独有,端游游戏账号,目前仅针对传奇世界返回,且companyId=172时
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
错误处理
错误码 | 错误信息 | 错误处理 | 说明 |
---|---|---|---|
3001 | ticket timeout | 验证失败服务端票据验证返回3001场景,请游戏客户端重新拉起GHome登录框,让用户重新登录。 | 该错误发生有两个场景: 1.票据过期,认证票据有效期为5分钟。当游戏存在某些业务导致可能超过5分钟时,我们建议游戏客户端先行调用GHome SDK内 getTicket 方法获取最新票据2.新用户注册,并实名为未成年人且在不允许游玩时间内,拦截认证行为返回。此逻辑是处于下面两方面考虑: |
# 3. 【支付】服务器订单通知接口
用法说明
用于将用户支付结果通知给游戏。
接口地址
接口地址需要游戏提供,可以在开发商后台“我的游戏 > 区服管理”中配置。
传值方式
POST
参数列表
orderNo: 服务器的订单号
userId:用户ID
gameOrderNo: 游戏的订单号
product: 商品ID(在开发商后台“我的游戏 > 充值管理”中配置)当游戏服务器发货是按照游戏自己记录的商品id发货时,请保证这里返回的商品id是否与游戏自己记录的商品id一致,方可发货;如不一致,游戏可以拒绝发货!
extend:游戏发送过来的扩展信息,原格式返回
sign:签名串(参考“附录A:服务器端签名算法”)
time:到账时间
参数示例
orderNo=791000012PP016140210105937000001&userId=18178&gameOrderNo=NONE&product=com.winggod.jingzhuan&extend=NONE&time=1392004960&sign=ad08d9e2d7b7df6603bc431392d1c707
返回结果
返回字符串:success,表示成功
返回字符串:refund,表示需要退款,目前支持的退款渠道有:官方支付宝、官方微信
其他表示失败。
# 4. 附录A:服务器端签名算法
参数说明:
timestamp为调用接口时的unix时间戳(精确到秒)
sequence为请求序列号(游戏服务器端需要保证两次调用接口生成的sequence不重复)
签名算法:
调用方首先需要将请求的参数根据参数的key(ASCII码值)进行升序排序
将排序好的接口请求参数和参数值按key=val&key2=val2…这样得格式拼装成一个字符串,并在最后加上与APPID对应的APPKEY
对上述拼接好的字符串进行md5编码,获得最终的签名串
代码示例(PHP):
public function sign ($params, $secret_key) { // $params数组必须包含timestamp
ksort($params);
$pair = array();
foreach($in as $k => $v){
$pair[] = $k. '=' .$v;
}
$str = implode('&', $pair); // 拼接字符串
$str = $str.$secret_key; // 把APPKEY补充到最后
return md5($str);
}
2
3
4
5
6
7
8
9
10
# 5. 附录B:特殊说明
订单重发机制:
平台对所有发货状态非“success”的订单,采取统一的重发机制。具体的重发策略为:每60秒重发1次,最大重发次数为60次。
对尝试重发后,最终失败的订单,我们会隔天通过报表机制发现,由平台方补发货,游戏方不需要参与。
发货重复处理机制:
基于订单重发机制,可能导致游戏方重复收到相同orderNo的发货通知,此时要求游戏检查orderNo实际到货情况,避免重复向玩家发放游戏币等虚拟货品。建议对一个月内的orderNo做唯一性检查。
针对已发货成功的订单,要求游戏方收到重复通知时,请务必返回success,状态为“success”的订单,将不会继续触发重发机制。