提交 68b69e50 作者: 彭程

后端接口

上级 15219c1c
-- "a/overseas/\346\234\215\345\212\241\347\253\257\346\216\245\345\217\243.md" # 服务端接口说明
# 服务端接口说明
### 目录
1.[接入说明](#sec1)
    1.1 [术语表](#sec1.1)
    1.2 [数据字典](#sec1.2)
2.[服务端接口](#sec2)
    2.1 [接口规则](#sec2.1)
        请求域名
        请求方式
        请求格式
        返回格式
        状态说明
3.[接口列表](#sec3)
      [签名规则1](#sigin1)
        3.1.1 [支付通知](#sec3.1.1)
        3.1.2 [安卓登录检查](#sec3.1.2)
        3.1.3 [IOS登录检查](#sec3.1.3)
1. 接入说明<a name="sec1"></a>
### 1.1 术语表<a name="sec1.1"></a>
> | 名称 | 说明 |
> | ---------- | ------------------------------------------------------------ |
> | CP | 游戏研发商。 |
> | SDK | 由平台方提供给游戏研发商,用于游戏接入平台登录,支付。 |
> | SDK 服务 | 由平台方开发,用于完成 SDK 的登录,支付流程,承接游戏服务端的数据。 |
> | 游戏服务 | 游戏研发商开发,为游戏提供服务。 |
> | 安卓游戏 | 游戏研发方商开发的安卓游戏。 |
> | iOS游戏 | 游戏研发商开发的iOS游戏一般情况系与安卓同游同服 |
> | 支付服务 | 由平台方调用支付服务,包括google apple 支付等 |
### 1.2 数据字典<a name="sec1.2"></a>
> | 名称 | 说明 |
> | ----------- | ------------------------------------------------- |
> | member_id | 用户在平台注册账号的唯一标识。 |
> | player_id | 用户在平台的一个游戏中的唯一标识。 |
> | user_token | 用户在平台登录的会话标识。 |
> | main_game_id| 游戏在平台的父级唯一标识。 |
> | game_id | 游戏在平台的子级唯一标识。 |
> | game_secret | 平台方提供,游戏签名秘钥。 |
> | cp_order_id | 游戏研发商订单唯一标识 |
> | order_id | 平台方提供,订单唯一标识,与 cp_order_id 一一对应 |
> | secret | 平台方提供,游戏签名秘钥 与 game_secret 不同 |
## 2.服务端接入<a name="sec2"></a>
### 2.1 接口规则<a name="sec2.1"></a>
##### 请求域名
> 【HTTPS】zyou-overseas.hznets.com
##### 请求方式
> 【POST】
##### 请求格式
> 【JSON】
##### 返回格式
> 【JSON】
##### 状态说明
| 状态码 | 说明 |
| ------ | -------- |
| 1 | 成功 |
| -1 | 错误 |
| -100 | 未登录 |
| -422 | 参数错误 |
## 3.接口列表<a name="sec3"></a>
##### 签名规则1<a name="sigin1"></a>
> **签名秘钥**
>
> game_secret 为 16 位字符串,由 SDK 对接时提供,每一个游戏单独提供一个 game_secret
> **签名串**
>
> 请求参数(去除 sign)通过参数名作升序排序;如果参数值是一个对象,需要将该队形通过参数名升序排序后转换为 json 字符串;将排好序的参数与 game_secret 以一下格式进行字符串拼接(game_secret 放在最后)
>
> key1=value1&key2=value2&key3=value3&game_secret=secret
> **签名算法**
>
> 【md5】
>
> sign = md5(签名串)
> ##### 注意
>
> <u>如果参数值是一个对象,需要将该对象通过参数名升序排序后转换为 json 字符串;</u>
>
> <u>转换 json 注意不要对中文进行转义</u>
##### 签名示例
```php
<php?
$gameSecret = "game_secret";
$params = ["player_id" => 1245, "game_id" => 14];
$signStr = '';
ksort($params, SORT_REGULAR);
foreach ($params as $key => $val) {
if (is_array($val)) {
ksrot($val, SORT_REGULAR); //对对象参数进行排序
$val = json_encode($val, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR);
}
$signStr .= $key . '=' . $val . '&';
}
$signStr .= 'game_secret=' . $gameSecret;
$sign = md5($signStr);
```
### 3.1.1 支付通知<a name="sec3.1.1"></a>
> 需要游戏服务端完成该接口,接收平台充值成功的信息。[签名规则1](#sigin1)
接口地址:充值结果通知地址,由 CP 方提供
请求数据
>body:
| 字段 | 是否必传 | 字段类型 | | |
|---------------------------------------------------------------|------|----------|--------------------------------------------------------|------|
| order | 是 | Object | 订单相关 | |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;order_id | 是 | String | 平台订单 ID | |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cp_order_id | 是 | String | 游戏传入的外部订单号,服务器会根据这个订单号生成对应的平台订单号,<br>请保证每笔订单传入的订单号的唯一性 | |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;product_price | 是 | String | 商品单价(分) | |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;amount | 是 | String | 商品总价(分) | |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;product_id | 是 | String | 商品 ID | |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;product_cnt | 是 | String | 商品数量 | |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pay_time | 是 | String | 支付时间(时间戳,到秒) | |
| &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ext | 是 | String | CP 自定义参数,透传信息 | |
| game_id | 是 | String | 游戏接入时分配的游戏 ID 【子级唯一】 | |
| player_id | 是 | String | 游戏接入登录返回的用户唯一标识 | |
| sign | 是 | String | 签名(签名规则参照 2.1 签名规则,签名的 key 由 SDK 提供) | |
返回数据
| 字段 | 是否必要 | 字段类型 | |
|-------------|-------| -------- |---------|
| status_code | 是 | int | 1 成功 |
| msg | 是 | string | 返回信息 |
##### 注意
> 通知使用的参数格式均为字符串(String) 返回status_code = 1 为成功, 否则会重复通知三次
### 3.1.2 安卓登录检查<a name="sec3.1.2"></a>
> 游戏通过 SDK 获得 用户 user_token, 游戏服务端需要在用户登录游戏成功后调用登录验证接口,验证 user_token 是否为有效登录用户会话,SDK 服务端需要通过该接口判断用户是否登录游戏服务 。[签名规则1](#sigin1)
接口地址:/android_sdk/auth/checkLogin
请求数据
>header
| 字段 | 是否必传 | 字段类型 | | |
|--------------|------|----------|--------------------------------------------------------|------|
| Content-Type | 是 | String | application/json | |
| User-Token | 是 | String | 游戏登录后由 SDK 返回的 user_token | |
>body
| 字段 | 是否必传 | 字段类型 | | |
|-----------|------|----------|------------------------------------------------------|------|
| game_id | 是 | String | 游戏接入时分配的 game_id(建议从 user_token 中取,#后面的数字即为 game_id) | |
| player_id | 是 | String | 游戏登录后由 SDK 返回的 player_id | |
| sign | 是 | String | 参数签名 | |
返回数据
| | 是否必要 | 字段类型 | |
|-------------| -------- | -------- | ---------- |
| status_code | 是 | int | 1 成功 |
| msg | 是 | string | 返回信息 |
### 3.1.3 IOS登录检查<a name="sec3.1.3"></a>
> 游戏通过 SDK 获得 用户 user_token, 游戏服务端需要在用户登录游戏成功后调用登录验证接口,验证 user_token 是否为有效登录用户会话,SDK 服务端需要通过该接口判断用户是否登录游戏服务 。[签名规则1](#sigin1)
接口地址:/ios_sdk/auth/checkLogin
请求数据
>header
| 字段 | 是否必传 | 字段类型 | | |
|---------------------------------------------------------------|------|----------|--------------------------------------------------------|------|
| Content-Type | 是 | String | application/json | |
| User-Token | 是 | String | 游戏登录后由 SDK 返回的 user_token | |
>body
| 字段 | 是否必传 | 字段类型 | | |
|-----------|------|----------|------------------------------------------------------|------|
| game_id | 是 | String | 游戏接入时分配的 game_id(建议从 user_token 中取,#后面的数字即为 game_id) | |
| player_id | 是 | String | 游戏登录后由 SDK 返回的 player_id | |
| sign | 是 | String | 参数签名 | |
返回数据
| | 是否必要 | 字段类型 | |
| ---- | -------- | -------- | --------------------- |
| status_code | 是 | int | 1 成功 2 失败 |
| msg | 是 | string | 返回信息 : 处理成功 |
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论