开发者发行接入文档
目录
需要前期准备:
测试服登录回调(游戏地址)地址:?
测试服充值回调地址: ?
充值计费点
开发者接入文档
1. 07073登录游戏(必接)
接口地址:游戏开发商提供(添加游戏时的游戏登录回调地址)
提交方式:GET
接收参数(CGI) | 类型 | 必选 | 说明 | 是否参与加密 |
uid | String | True | 用户UID | 是 |
time | int | true | 当前时间unix时间戳 (服务端会判断时间是否超过配置时间) | 是 |
ext_fx | String | False | 发行额外透传参数 (如果有值在支付时原样回传) | 是 |
sign | string | True | 加密串 | 否 |
sign_type | string | True | 固定md5 | 否 |
fxjsver | String | false | Js版本号 防cdn刷新 | 否 |
cpchannel | String | false | Cp渠道id | 否 |
fxcgid | String | False | 发行服ID | 否 |
fxcpsessid | String | False | 发行标识 | 否 |
fxsdkver | String | false | 发行js sdk版本 | 否 |
isadult | int | False | 实名制标识,用于防沉迷,游戏方要求开,参数会依实际情况传递,否则统一传1 | 否 |
返回值样例 | ||||
说明 | ||||
游戏开发商验证成功后,自动登录对应游戏 | ||||
样例 | ||||
http://ceshi.073img.com/fxcpdemo/demo/game.php?time=1516764539&uid=dd5fe0bae03fee99863286dbe2cea8cf&sign=fe64c8a95ac8a09bfa7ca988da6224b7&sign_type=MD5&fxjsver=1&fxcgid=9&fxcpsessid=eubusrkq7ffbbo7bpbkh36aqm9425v64&fxsdkver=2 |
2. 引入07073开放平台jssdk(初始化跟引入SDK必接 有关回调选接)
<?php if ($_GET['fxsdkversion'] == 1) {?>
<script type="text/javascript" src="https://img5.073img.com/sdk/js/h5sdk07073.fxcp.js?ver=<?php echo $_GET['fxjsver']?>"></script>
<?php } else if ($_GET['fxsdkversion'] == 2) {?>
<script type="text/javascript" src="https://img5.073img.com/sdk/js/h5sdk07073.fxcp.1.0.js?ver=<?php echo $_GET['fxjsver']?>" id="fxcp07073script" da-cgid="<?php echo $_GET['fxcgid']?>" da-sessid="<?php echo $_GET['fxcpsessid']?>"></script>
<?php }?>
// 初始化配置
fxcp07073sdk.initConfig({
gamekey: "<?php echo GAME_KEY?>", //07073开放平台游戏KEY
uid: "<?php echo $_GET['uid']?>", //07073开放平台登录时uid
debug: false,
// 关注回调
onSubscribeCallback: function (msg) {
console.log("subscribe_callback", msg);
if (msg.errno == 0) {
//alert('关注成功,发礼包操作');
} else {
alert(msg.errstr);
}
},
// 分享回调
onShareOkCallback: function (msg) {
console.log('share_callback:', msg);
if (msg.errno == 0) {
//alert('分享成功,发礼包操作');
} else {
alert(msg.errstr);
}
},
// 收藏回调
onFavCallback: function (msg) {
console.log('onFav callback:', msg);
if (msg.errno == 0) {
//alert('收藏成功,发礼包操作');
} else {
alert(msg.errstr);
}
}, // 是否关注回调
onIsSubscribeBtnCallback: function (msg) {
console.log("onIsSubscribeCallback", msg);
if (msg.errno == 0) {
//alert('显示关注按钮');
} else {
alert(msg.errstr);
}
},
// 是否分享回调
onIsShareBtnCallback: function (msg) {
console.log("onIsShareBtnCallback", msg);
if (msg.errno == 0) {
//alert('显示分享按钮');
} else {
alert(msg.errstr);
}
},
// 是否收藏回调
onIsFavBtnCallback: function (msg) {
console.log("onIsFavBtnCallback", msg);
if (msg.errno == 0) {
//alert('显示收藏按钮');
} else {
alert(msg.errstr);
}
},
// 是否显示实名认证按钮
onIsVerifyBtnCallback: function (msg) {
console.log("onIsVerifyBtnCallback", msg);
if (msg.errno == 0) {
//alert('显示实名认证按钮');
document.getElementById('verifyA').style.display = 'block';
} else {
alert(msg.errstr);
}
},
// 实名认证操作
onVerifyCallback: function (msg) {
console.log("onVerifyCallback", msg);
if (msg.errno == 0) {
//alert('实名认证成功,发礼包操作');
} else {
alert(msg.errstr);
}
},
});
注:
回调方法,返回json格式 {errno:0, errstr: '关注成功'}
errno: 0:成功 1:失败或取消
errstr: 错误说明
3. 初始化 and 获取用户信息(选接)
// 初始化方法
function init()
{
// 关注按钮是否显示
fxcp07073sdk.isSubscribeBtn({});
// 分享按钮是否显示
fxcp07073sdk.isShareBtn({});
// 收藏按钮是否显示
fxcp07073sdk.isFavBtn({});
// 实名认证按钮是否显示
fxcp07073sdk.isVerifyBtn({});
// 获取用户信息
getuserinfo();
}
function getuserinfo() {
// 获得用户信息
fxcp07073sdk.getUserInfo(<?php echo json_encode($user_param);?>, function(msg) {
console.log('获取用户信息', msg);
// 获取用户信息保存到本地,头像等
if (msg.errno == 100) {
console.log('用户信息:', msg.info);
} else {
console.log('获取信息失败', msg.errstr);
}
});
}
init();
注:
1. 请在07073jssdk初始化以后,通过ajax后台加密数据,调用用户信息
// 获取用户信息参数
$user_data = [
//必填
'gamekey' => GAME_KEY, // H5开放平台游戏KEY
'uid' => $_GET['uid'], //H5开放平台用户id
'time' => time(), //当前时间unix时间戳
];
$user_param = $cls_verify07073->buildRequestPara($user_data);
返回的参数为:
{"errno":100,"errstr":"SUCCESS","info":{"username":"用户名","avatar":"用户头像","female":1}})
errno: 状态吗 100成功,其他为失败
errstr: 状态吗说明
info: 返回的信息
username: 用户名
avatar: 用户头像
female: 性别 [1:男0:女]
2.关注按钮,分享按钮,收藏按钮,初始化时候调用方法判断
游戏端实现隐藏或者显示相应按钮,(领取过奖励以后,不应该再次领取,应该隐藏相应按钮,cp实现即可),回调方法 参见2: 是否关注(分享,收藏)回调
4. 07073游戏支付(必接)
(1) 用户在游戏内购买游戏道具,通过异步请求生成json加密串,
加密串请求参数说明:
接收参数(CGI) | 类型 | 必选 | 说明 |
gamekey | String | True | H5开放平台游戏KEY |
uid | String | True | 用户UID (游戏登录时用户UID) |
time | int | true | 当前时间unix时间戳 (服务端会判断时间是否超过配置时间) |
ext_fx | String | False | 发行商额外透传参数 (登陆时传递ext_fx如有值,原样返回) |
goods_id | String | True | 商品ID |
goods_name | String | True | 商品名 |
fee | Int | True | 商品价格(分) |
server_id | String | true | 服务器id |
server_name | String | True | 服务器区服 |
area_id | String | True | 区ID |
area_name | String | True | 区名称 |
role_id | String | True | 角色ID |
role_name | String | True | 角色名 |
game_ordersn | String | True | 游戏生成订单号 |
ext_cp | String | False | 厂商额外透传参数 (支付成功后,异步通知时原样返回) |
sign | string | True | 加密串 |
sign_type | string | True | 固定md5 |
(2) 点击购买商品操作
// 支付
document.getElementById('payA').onclick = function() {
// 通过ajax请求获取参数
var pay_args = <?php echo json_encode($pay_param);?>;
// 附加上支付成功取消参数
pay_args.onPayCallback = function(data) {
console.log(data);
payok_report();
alert('支付成功');
};
pay_args.onPayCancel = function(data) {
console.log(data);
alert('取消支付');
};
// 支付操作
fxcp07073sdk.pay(pay_args);
};
pay_args 参数说明:
gamekey: H5开放平台游戏KEY
uid: 07073开放平台登录时uid
goods_id: 商品ID
goods_name: 商品名称
fee: 商品价格(分)
server_id: 服ID
server_name: 服名称
area_id: 区ID
area_name: 区名称
role_id:角色ID
role_name:角色名
game_ordersn: 游戏商品订单号
ext_fx: 07073开放平台登陆时传递的ext_fx(原样传回)
ext_cp: 游戏额外透传参数
time: 时间
sign: 加密串
以上部分是在服务端计算生成,参数说明同(2)
sign_type: 'MD5', 固定md5
onPayCallback: null, // 支付成功的回调函数(此方法不能作为充值成功的依据,需要通过服务器异步获取充值信息)用不到
onPayCancel: null // 取消支付回调函数 用不到
拉起支付返回104则是校验问题;106为缺少计费点,需要贵方提供商品ID,商品金额,商品描述
5. 游戏收藏接口(选接)
// 收藏操作
document.getElementById('favA').onclick = function() {
var json_data = {};
fxcp07073sdk.onFav(json_data);
}
收藏回调 参见2: 关注回调方法
6. 游戏关注接口(选接)
// 关注操作
document.getElementById('gzA').onclick = function() {
var json_data = {};
fxcp07073sdk.onSubscribe(json_data);
}
关注回调 参见2: 关注回调方法
7. 游戏分享接口(选接)
// 分享操作
document.getElementById('fenxiangA').onclick = function() {
var json_data = {};
fxcp07073sdk.onShare(json_data);
}
关注回调 参见2: 游戏分享回调方法
8. 游戏实名认证接口(选接)
// 实名认证操作
document.getElementById('verifyA').onclick = function() {
var json_data = {};
fxcp07073sdk.onVerify(json_data);
}
关注回调 参见2: 游戏实名认证回调方法
9. 游戏加载完成(选接)
fxcp07073sdk.ready();
10. 游戏重新登录(选接)
// 重新登录游戏操作
document.getElementById('reloginA').onclick = function() {
fxcp07073sdk.relogin();
}
11. 游戏数据上报(必接)
// 数据上报
var gBaseData = {
"roleid": "adf", //游戏角色的唯一ID
"nickname": "我的昵称", //游戏中角色的昵称,没有昵称的可以传空字符串
"server_id": "1" , // 服ID
"server_name": "混服" // 服名称
"area_id": "1" , // 区ID
"area_name": "1区" // 区名称
};
基础数据字段任何上报时都需要传输
12. 角色创建(必接)
// 角色创建
document.getElementById('creA').onclick = function() {
var extData = {};
fxcp07073sdk.roleCreate(gBaseData, extData);
}
13. 角色登录(必接)
// 角色登录
document.getElementById('longinA').onclick = function() {
var json_data = gBaseData;
var extData = {
level: 12, // 当前等级
vipLevel: 0, // VIP等级
score: 123456, // 默认为0,战力、综合评分等
relevel: 123 // 角色转生等级
};
fxcp07073sdk.roleEnterGame(gBaseData, extData);
}
14. 角色升级(必接)
// 角色升级
document.getElementById('levelA').onclick = function() {
var extData = {
level : 15,
score: 123456, // 默认为0,战力、综合评分等
};
fxcp07073sdk.roleLevelUp(gBaseData, extData);
}
15. 获取客服信息(选接)
// 获取客服信息
document.getElementById('kefuA').onclick = function() {
var json_data = {
onKefuInfoCallback: function(kefu_data) {
console.log(kefu_data);
}
};
fxcp07073sdk.onKefuInfo(json_data);
}
kefu_data: json格式
{qq:'123123124', qq_group:'12312312'}
16. 游戏支付异步回调(必接)
接口地址:游戏开发商提供(添加游戏时的充值回调地址)
提交方式:POST
例子:
ext_cp=1658001&fee=100&game_ordersn=1000000000212513&order_sn=fx2020120315393415674&time=160698119785cc4068eb2d3bbc29269b3c70c6dd6d
接收参数(CGI) | 类型 | 必选 | 说明 |
game_ordersn | String | True | 游戏订单号 |
order_sn | String | True | 07073订单号 (用于查询数据使用) |
fee | Int | True | 支付钱数(分) |
time | int | true | 当前时间unix时间戳 (服务端会判断时间是否超过配置时间) |
ext_cp | String | False | 厂商支付时候额外透传参数 (原样返回) |
sign | string | True | 加密串 |
sign_type | string | True | 固定md5 |
返回值样例 | |||
{ errno: 0, errstr: 成功 } | |||
说明 | |||
异步支付接口总共会在24小时内发起5次请求 errno: 错误码 0:成功 1或其他:失败 errstr: 状态吗说明
cp接受到异步回调以后,需要按返回值样例中形式返回json字符串 | |||
样例 | |||
17. 游戏返利回调,(返利服需要)(选接)
接口地址:游戏开发商提供(添加游戏时的游戏返利回调地址)
提交方式:POST
接收参数(CGI) | 类型 | 必选 | 说明 |
rebate_id | String | True | 申请返利ID |
uid | String | True | 用户UID |
server_id | Int | True | 服ID |
area_id | int | true | 区ID |
role_id | String | True | 角色ID |
total_amount | Int | True | 返利钱数 分 |
rebate_gamecoin | Int | True | 返利元宝 |
time | Int | True | 当前UNIX时间戳 |
sign | string | True | 加密串 |
sign_type | string | True | 固定md5 |
返回值样例 | |||
{ errno: 0, errstr: 成功 } | |||
说明 | |||
errno: 错误码 0:成功 1或其他:失败 errstr: 状态吗说明 | |||
样例 | |||
18. 加密方式说明
(1) 除去待签名参数数组中的空值和签名参数(去除sign,sign_type,空值)
(2) 请求的所有参数,需要根据参数名=参数值的格式,按首字符字典顺序(ascii值大小)排序,若遇到相同首字符,则判断第二个字符,以此类推,待签名字符串需要以“参数名1=参数值1&参数名2=参数值2&….&参数名N=参数值N”的规则进行拼接。
(3) 待签名数据应该是参数原始值而不是url encoding之后的值,例如:调用某接口需要对请求参数email进行数字签名,那么待签名数据应该是email=test@msn.com,而不是email=test%40msn.com。
(4) 将1,2操作后生成的串拼接上应用加密key,做md5操作生成sign值
签名结果与签名方式加入请求提交参数组中(sign,sign_type加入请求参数中)
19. 查询角色信息接口(选接)
接口地址:游戏开发商提供(添加游戏时的游戏查询角色信息接口)
提交方式:POST
接收参数(CGI) | 类型 | 必选 | 说明 |
uid | String | True | 用户UID |
返回值样例 | |||
{ errno: 0, errstr: 成功 info: [ { cp_server_id:服id cp_server_name: cp服名称 cp_area_id: 区id cp_area_name: cp区名称(一马当先) cp_role_id: 角色ID cp_role_name: 角色名称 level: 角色等级 viplevel: vip等级 } ] } | |||
说明 | |||
返回用户游戏中所有区服的游戏信息 errno: 错误码 0:成功 1或其他:失败 errstr: 状态吗说明 info: 角色信息 | |||
样例 | |||
20. 用户聊天消息推送(选接)
接口地址:https://sdk.07073.com/fx/user/user_msg_push
提交方式:POST
接收参数(CGI) | 类型 | 必选 | 说明 |
uid | String | True | 用户UID |
返回值样例 | |||
{ errno: 0, errstr: 成功 info: [ { cp_server_id:服id cp_server_name: cp服名称 cp_area_id: 区id cp_area_name: cp区名称(一马当先) cp_role_id: 角色ID cp_role_name: 角色名称 level: 角色等级 viplevel: vip等级 } ] } | |||
说明 | |||
返回用户游戏中所有区服的游戏信息 errno: 错误码 0:成功 1或其他:失败 errstr: 状态吗说明 info: 角色信息 | |||
样例 | |||