360SDK手游直充
1.介绍和流程
1.1介绍
下载360安全支付apk:https://pay.360.cn/index/mobile 打开apk点击首页的手游充值
1.2交易流程
2.根据qid查询玩家信息
2.1重要名词说明
qid:360平台用户ID的简称;
app_key:游戏编号;
server_id:游戏区服编号,由游戏自行编号,只支持可见ASCII字符,最大长度为8字节;
server_name:游戏区服名称;
2.2功能说明
2.3请求地址
2.4接口方式
表单请求(GET),JSON应答,字符集为UTF-8
2.5请求参数字典
参数 | 参数名称 | 类型(最大长度) | 参数说明 | 是否可空 | 描述 |
qid | 360用户ID | number | 不可空 | ||
app_key | 游戏编号 | string | 不可空 | ||
timestamp | 时间戳 | number | UNIX时间戳 | 不可空 | |
sign | 签名 | string | 不可空 |
签名:
$sign = md5($app_key#$qid#$timestamp)
请求样例:
http://game_url/?qid=1010100013&app_key=1234567890abcdefghijklmnopqrstuv×tamp= 1409049619&sign=6414bcc9bd30773808e761d377f67fbd
签名样例:
假设$app_secret= a3e3330c5a6c97d9d4a9e11b2b92f327
md5(1234567890abcdefghijklmnopqrstuv#1010100013#1409049619#a3e3330c5a6c97d9d4a9e11b2b92f327)
2.6应答参数字典
应答结果:应答为一个JSON报文。报文的编码格式为UTF-8。
参数 | 参数名称 | 类型(最大长度) | 参数说明 | 是否可空 | 描述 |
result_code | 查询应答码 | string | 不可空 | 查询应答码,0000为成功,其他为失败 | |
result_msg | 查询应答信息 | string | 可空 | 查询应答信息 | |
record,timestamp | 返回时间戳 | number | 不可空 | UnixTimeStamp | |
record,user_info | 玩家信息 | string | 单笔格式为: 区服编号^区服名称(url编码)^角色名称(url编码)^性别^最后登陆时间^在线时长^帮派或阵容(url编码)^职业^角色等级^角色状态^经验值^角色创建时间 多笔用“|”分割 | 不可空 | 所有中文原始编码为UTF-8 区服编号:游戏自己的编号,唯一确定一个区服,将在游戏充值的接口中原样返回给游戏,用来定位区服; 区服名称:url编码,会展示给用户确认 角色名称:url编码后的玩家在游戏中的角色名称; 性别:m:男,f:女,u:未知或其他; 在线时长:单位秒; 最后登录时间:UnixTimeStamp; 角色状态:是否禁用 0/1; 角色创建时间:UnixTimeStamp; 除区服编号、区服名称和角色名称为必须返回的参数外,其他参数为可空参数 |
3.手游充值
3.1功能说明
玩家在直充平台扣款后,直充平台通知游戏给用户加游戏币。
3.2请求地址
3.3接口方式
表单请求(GET/POST),JSON应答,字符集为UTF-8
3.4请求参数字典
参数 | 参数名称 | 类型(最大长度) | 参数说明 | 是否可空 | 描述 |
qid | 360用户ID | number | 不可空 | 如:105060140 | |
app_key | 游戏编号 | string | 不可空 | ||
server_id | 区服编号 | string | 游戏在查询接口中返回的区服编号 | 不可空 | |
user_role | 角色名称 | string | 游戏在查询接口中返回的区服编号 | 可空 | |
order_id | 订单号 | string | 360直充平台订单号 | 不可空 | 最大长度64位的ASCII字符串 |
amount | 充值金额 | number | 充值金额,单位分 | 不可空 | 如20 |
sign | 交易签名 | string | 签名 | 不可空 | sign=b309bff0edac2aa6e3ea7a2e9af7c940 |
签名:
$sign = md5($amount#$app_key#$order_id#$qid#$server_id)
请求样例:
http://game_url/?qid=1010100013&app_key=1234567890abcdefghijklmnopqrstuv&server_id= S1&order_id=ZC14082600001&amount=3000&sign=6414bcc9bd30773808e761d377f67fbd
签名样例:
假设$app_secret= a3e3330c5a6c97d9d4a9e11b2b92f327
md5(3000#1234567890abcdefghijklmnopqrstuv#ZC14082600001#1010100013#S1#a3e3330c5a6c97d9d4a9e11b2b92f327)
3.5应答参数
应答结果:应答为一个JSON报文。报文的编码格式为UTF-8。
参数 | 参数名称 | 类型(最大长度) | 参数说明 | 是否可空 | 描述 |
result_code | 应答码 | string | 不可空 | 应答码,ok为成功,如果回应其他值或者不回应,则被认为通知失败,360 会尝试多次通知。这个机制用来避免掉单。游戏应做好一条订单收到多次通知的准备,防止多次加钱。同时,需要特别注意的是,回应的 ok 表示游戏已经正常接到消息,无需继续发送通知。它不表示订单成功与否,或者应用处理成功与否。对于重复的通知,游戏如果发现订单已经成功处理完毕,无需继续处理,也要返回 ok。否则,360 会认为未成功通知,会继续发送通知 | |
result_msg | 应答信息 | string | 可空 | 应答信息 | |
record,timestamp | 返回时间戳 | number | 不可空 | UnixTimeStamp | |
record,game_amount | 充值的游戏币个数 | number | 不可空 |
4.数字签名算法
4.1描述
必选参数必须有值,而且参数值必须不为空,不为0。字符集为 utf-8。
所有不为空,不为 0 的参数都需要加入签名,参数必须为做 urlencode 之前的原始数值. 如中文金币,作为参数传输时编码为%E9%87%91%E5%B8%81,做签名时则要用其原始中文值金币(注意字符集必须是UTF-8)。
对所有不为空,不为0的参数按照参数名字母升序排列(如 php 的 ksort 函数)
使用符号#拼装排序后的参数值,最后用#连接应用的 app_secret,整体用 md5 计算签名,就是 sign 参数的值。注意有些语言的 md5 计算结果里字母为大写,需要转化为小写。
4.2签名示例代码
4.3PHP
function sign($params,$key)
{/*{{{*/
ksort($params);
reset($params);
$sign = '';
foreach ($params as $index => $value)
{
if ('sign' == $index || empty($value))
{
continue;
}
$sign.= $value.'#';
}
$sign .= $key;
$sign_value = md5($sign);
return $sign_value;
}/*}}}*/