# 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:微博 等
  }
}
1
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时
  }
}
1
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.新用户注册,并实名为未成年人且在不允许游玩时间内,拦截认证行为返回。此逻辑是处于下面两方面考虑:
a.部分老游戏无法处理新增的未知错误,可能会导致游戏服务器异常,所以复用该错误码
b.部分游戏使用老版本,并因种种原因无力更新新版本sdk,由验证票据流程兜底

# 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
1
  • 返回结果

    返回字符串:success,表示成功

    返回字符串:refund,表示需要退款,目前支持的退款渠道有:官方支付宝、官方微信

    其他表示失败。

# 4. 附录A:服务器端签名算法

  • 参数说明:

    1. timestamp为调用接口时的unix时间戳(精确到秒)

    2. sequence为请求序列号(游戏服务器端需要保证两次调用接口生成的sequence不重复)

  • 签名算法:

    1. 调用方首先需要将请求的参数根据参数的key(ASCII码值)进行升序排序

    2. 将排序好的接口请求参数和参数值按key=val&key2=val2…这样得格式拼装成一个字符串,并在最后加上与APPID对应的APPKEY

    3. 对上述拼接好的字符串进行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);
}
1
2
3
4
5
6
7
8
9
10

# 5. 附录B:特殊说明

  • 订单重发机制:

    平台对所有发货状态非“success”的订单,采取统一的重发机制。具体的重发策略为:每60秒重发1次,最大重发次数为60次。

    对尝试重发后,最终失败的订单,我们会隔天通过报表机制发现,由平台方补发货,游戏方不需要参与。

  • 发货重复处理机制:

    基于订单重发机制,可能导致游戏方重复收到相同orderNo的发货通知,此时要求游戏检查orderNo实际到货情况,避免重复向玩家发放游戏币等虚拟货品。建议对一个月内的orderNo做唯一性检查。

    针对已发货成功的订单,要求游戏方收到重复通知时,请务必返回success,状态为“success”的订单,将不会继续触发重发机制。


Last Updated: 2024/12/6 03:08:14