1.登录认证
简要描述:
- 验证登陆user_token 是否有效
请求URL:
- https://sdk.xiaokr.cn/api/cp/user/check
请求方式: (UTF-8)
- HTTP POST
接口说明:
验证user_token是否为有效的登录用户会话,若有效则返回其账号标识、账号创建者和昵称。通过"SDK 客户端"获取到user_token,传到"游戏服务器","游戏服务器"到"SDK 服务器"验证user_token的有效性。注意:进行接口调用前请确认user_token是否具备值,如user_token值为空时请勿调用此接口。请求次数有限制,如果超过频次限制,接口将返回错误码,不响应请求。
请求方
- 游戏服务器
响应方:
- SDK服务器
请求参数:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
app_id | 是 | STRING | 游戏接入时分配的应用app_id |
mem_id | 是 | STRING | 登陆时提供给CP的用户ID |
user_token | 是 | STRING | 登陆获取的user_token |
sign | 是 | STRING | 参数校验 |
请求示例:
POST参数: app_id=1&mem_id=23&user_token=aSzdVfmocjGiFivnOaGlEkxuciGnRtYTc4NmdxNjM0MWZlN24O0O0O&sign=033b1a55a22df5f9e517c117a960a240
假定app_key= de933fdbede098c62cb309443c3cf251sign 的签名规则:md5(app_id=...&mem_id=...&user_token=...&app_key=...)(替换...为实际值)
签名原文:app_id=1&mem_id=23&user_token=aSzdVfmocjGiFivnOaGlEkxuciGnRtYTc4NmdxNjM0MWZlN24O0O0O&app_key=de933fdbede098c62cb309443c3cf251
sign=md5(app_id=1&mem_id=23&user_token=aSzdVfmocjGiFivnOaGlEkxuciGnRtYTc4NmdxNjM0MWZlN24O0O0O&app_key=de933fdbede098c62cb309443c3cf251)
md5加密:
echo -n "app_id=1&mem_id=23&user_token=aSzdVfmocjGiFivnOaGlEkxuciGnRtYTc4NmdxNjM0MWZlN24O0O0O&app_key=de933fdbede098c62cb309443c3cf251"|md5sum
加密结果:033b1a55a22df5f9e517c117a960a240
返回示例(JSON返回)
{
"status": "0",
"msg": "请求参数为空 app_id",
"data": {
"birthday": "",
"real_name": "",
"id_card": ""
"is_auth": 1 "age": 0
}
}
返回参数说明
状态码 | 类型 | 说明 |
---|---|---|
status | STRING | 返回状态码 |
msg | STRING | 返回信息 |
data. birthday |
string | 出生日期 例如 : 2019-12-05 |
data. real_name |
string | 真实姓名 默认空串 |
data. id_card |
string | 身份证号 默认空串 |
data. is_auth |
int | 1 未实名 2 已实名 |
data. age |
int | 年龄 |
状态码说明
状态码 | 说明 |
---|---|
0 | 请求参数错误 |
1 | 成功 |
10 | 服务器内部错误 |
11 | app_id错误 |
12 | 签名错误 |
13 | user_token错误 |
14 | user_token超时,表示用户登录授权已超时,需引导用户重新登录,并更新接口访问令牌。(注:访问令牌的有效时长是1天) |
15 | mem_id错误 |
16 | 访问太频繁,超过访问次数 |
100 | 没有接口访问权限(注:出现时可联系技术人员确认权限是否开通) |
2.支付通知
简要描述:
- 平台充值成功后通知游戏服务器 请求接口
请求URL:
- 即充值结果通知地址,
CP提供
。游戏接入时,录入到的游戏平台中。
请求方式:(UTF-8)
- HTTP POST
接口说明:
请求方为SDK 服务器,响应方为CP服务器。
用户在游戏中提交购买请求后,游戏平台会异步执行充值购买,在购买操作完成后,游戏平台通过该接口将充值结果发送给“游戏服务器”。
此处定义本接口的规范,游戏合作商需根据此规范在“游戏服务器”实现本接口。
请求方:
- SDK 服务器
响应方:
- 游戏服务器
请求参数:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
app_id | 是 | STRING | 游戏ID |
cp_order_id | 是 | STRING | 游戏传入的外部订单号。服务器会根据这个订单号生成对应的平台订单号,请保证每笔订单传入的订单号的唯一性。URLencodeing |
mem_id | 是 | STRING | 玩家ID |
order_id | 是 | STRING | 平台订单号 |
order_status | 是 | STRING | 平台订单状态 1 未支付 2成功支付 3支付失败 |
pay_time | 是 | STRING | 订单下单时间 时间戳, Unix timestamp |
product_id | 是 | STRING | 商品idURLencodeing |
product_name | 是 | STRING | 商品名称 URLencodeing |
product_price | 是 | STRING | 商品价格(元);保留两位小数URLencodeing |
sign | 是 | STRING | MD5 签名 |
ext | 否 | STRING | 透传参数 CP下单时的原样放回 URLencodeing |
请求示例:
POST参数:
app_id=1&cp_order_id=20161028111&mem_id=&order_id=14794504894304304120001&order_status=2&pay_time=1479450489&product_id=1&product_name=%E5%85%83%E5%AE%9D&product_price=1&sign=3eaacb162b1f0fa12ad29dcd8e48ac1b&ext=%E7%A9%BF%E9%80%8F
假定app_key=f875364690581668449d4cf0aeb60560
sign 的签名规则:md5(app_id...&cp_order_id...&ext...&mem_id...&order_id...&order_status...&pay_time...&product_id...&product_name...&product_price...&app_key=...)
(替换...为实际值)
签名原文:
app_id=1&cp_order_id=20161028111&ext=%E7%A9%BF%E9%80%8F&mem_id=&order_id=14794504894304304120001&order_status=2&pay_time=1479450489&product_id=1&product_name=%E5%85%83%E5%AE%9D&product_price=1&app_key=f875364690581668449d4cf0aeb60560
sign=md5("app_id=1&cp_order_id=20161028111&ext=%E7%A9%BF%E9%80%8F&mem_id=&order_id=14794504894304304120001&order_status=2&pay_time=1479450489&product_id=1&product_name=%E5%85%83%E5%AE%9D&product_price=1&app_key=f875364690581668449d4cf0aeb60560")
md5加密:
echo -n "app_id=1&cp_order_id=20161028111&ext=%E7%A9%BF%E9%80%8F&mem_id=&order_id=14794504894304304120001&order_status=2&pay_time=1479450489&product_id=1&product_name=%E5%85%83%E5%AE%9D&product_price=1&app_key=f875364690581668449d4cf0aeb60560"|md5sum
加密结果:29456d3ef41003b92802993e4bdaca30
返回示例:
SUCCESS
返回参数说明:
响应内容 | 响应内容描述 |
---|---|
SUCCESS | 成功,表示游戏服务器成功接收了该次充值结果通知,校验签名,订单,金额等都没问题。 |
FAILURE | 失败,表示游戏服务器无法接收或识别该次充值结果通知,如:签名检验不正确、游戏服务器接收失败 |
通知机制:
充值操作完成并且充值成功后,“SDK 服务器”都会将充值结果通过“充值结果回调接口”发送到“游戏服务器”。“游戏服务器”收到“SDK 服务器”的充值通知后,根据处理结果返回字符串SUCCESS 或FAILURE。
如果返回SUCCESS,则“SDK服务器”结束通知任务;
如果返回FAILURE 或由于网络延时导致“SDK 服务器”没有收到任何返回,SDK 服务器将会在周期内进行重复通知。
3.游戏服务器开发要点
通信协议:
- “SDK 服务器”采用HTTP 协议作为通信协议,
- “游戏服务器”通过构造HTTP 请求(POST方式)向“SDK 服务器”发起接口请求。
user_token 验证注意事项:
- user_token验证应该在客户端接到sdk 登陆成功后,客户端再登陆游戏服务器的时候,游戏服务器请求sdk 服务器验证。
- 在登陆或必要的时候调用,不做无故调用,注意控制调用次数,这个接口做了次数等限制。
充值结果回调注意事项:
在充值完成之后,SDK服务器会回调CP 给的地址。
- *需要校验回调的金额是否跟商品的真实价格一致;
- *需要校验用户是否充值成功;
- *返回值:返回“SUCCESS”表示通知CP成功了,其他错误等情况返回”FAILURE”。
4.Demo
4.1 PHP-DEM0
登陆认证:
$query_data['user_token'] = 'rkmi2huqu9dv6750g5os11ilv2'; // 获取的user_token
$query_data['mem_id'] = '23'; // 获取的用户ID
$query_data['app_id'] = '1'; // 获取的游戏APPID
$app_key = 'de933fdbede098c62cb309443c3cf251'; // 获取的游戏APPKEY
$url = "http://api.【域名】/api/v7/cp/user/check";
$signstr = "app_id=" . $query_data['app_id'] . "&mem_id=" . $query_data['mem_id'] . "&user_token=" . $query_data['user_token'] . "&app_key=" . $app_key;
$query_data['sign'] = md5($signstr);
/* http请求 */
$rdata = http_post_data($url, $query_data);
if ($rdata) {
$rdata = json_decode($rdata,true);
if ('1' == $rdata['status']) {
// CP操作,请求成功,用户有效
echo $rdata['data'];
}
}
// HTTP json数据请求函数
function http_post_data($url, array $query_data) {
$post_str = http_build_query($query_data);
$curl = curl_init(); // 初始化curl
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 0); // 过滤HTTP头
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 显示输出结果
curl_setopt($curl, CURLOPT_POST, 1); // post传输数据
curl_setopt($curl, CURLOPT_POSTFIELDS, $params); // post传输数据
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 3); // 设置等待时间
$header = array(
"Content-Type: application/x-www-form-urlencoded; charset=UTF-8"
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
ob_start();
curl_exec($curl);
$return_content = ob_get_contents();
ob_end_clean();
curl_close($curl);
return $return_content;
}