页游运营通常开发商会交由平台代理发行运营,分成款获得收入,比如37wan,xy等平台,这里就存在一个游戏对接的问题,平台玩家怎么能在开发商的机器上玩呢?开发商自己在自己的服务器上肯定是能玩的,平台用户过来怎么处理?其实很简单,平台上进入相应的游戏只是加载一个iframe框架,然后地址就读取一个网址就是了,那重点就是这个http请求的生成,这个就是接口,通常开发商给平台一个文档,规定需要给开发商传递的参数,比如
//以下是需要的参数
// 传入参数:
// - 用户ID: uid (urlencode之后的值)
// - 平台ID: platform
// - 游戏名: gkey
// - 区服ID: skey
// - 时间戳: time
// - 防沉迷: is_adult
// - 登陆失败跳转URL: back_url
// - 登陆类型: type(登陆类型,web登陆或微端登陆,值为 pc或web,pc为微端登陆,web页登陆)
// - 签名 : sign
//签名规则为: md5($uid.$platform.$gkey.$skey.$time.$is_adult.'#'.$lkey) (lkey为登陆密钥,注:uid为urldecode之后的值)
//http://s1.cssg.center.my4399.com/login.html?uid=$uid&platform=$platform&gkey=$gkey&skey=$skey&time=$time&is_adult=$is_adult&back_url=$back_url&type=$type&sign=md5($uid.$platform.$gkey.$skey.$time.$is_adult.'#'.$lkey)
至于你请求过去开发商怎么处理,那个是别人的问题,他们会根据你传递的参数和key以及sign签名,判断你是不是合作平台的玩家,如果他们根据你穿的参数判断是合作平台的玩家,那么iframe加载他们的游戏界面就可以正常展示,否则会有错误信息返回,那我们现在就根据他们需要的数据构造请求的URL就好
$tmpReturn = array();//返回的数据
$tmpUid = $strParam['uid'];
$tmpPlatform = 'xxxx';//各个平台不同
$tmpGkey = 'xxxx';
$tmpSkey = intval($strParam['sid']);
$tmpTime = time();
if($strParam['fcm'] ==0){$is_adult=2;}
else{$is_adult = $strParam['fcm'];}
$back_url = 'xy.xy.com';
$tmpLkey = '';
$tmpSign = md5(urldecode($tmpUid).$tmpPlatform.$tmpGkey.$tmpSkey.$tmpTime.$is_adult.'#'.$tmpLkey);
if($strParam['ismicroclient'] == TRUE){
$type = 'pc';
}else{
$type = 'web';
}
$params = array(
'uid' => $tmpUid,
'platform' => $tmpPlatform,
'gkey' => $tmpGkey,
'skey' => $tmpSkey,
'time' => $tmpTime,
'is_adult' => $is_adult,
'back_url' => $back_url,
'type' => $type,
'sign' => $tmpSign,
);
$tmpSignUrl = http_build_query($params);
$tmpReturn['tmpServerURL'] = 'http://s'.$tmpSkey.'.'.'gate.xxx.xxx.com/login.html?'.$tmpSignUrl; //将xxx替换为要求的地址,每个游戏对接不同
游戏还需要返回角色信息,其实和对接大同小异,就是构造正确的请求地址,对方会返回你需要的东西
$tmpSign2 = md5(urldecode($tmpUid).$tmpPlatform.$tmpGkey.$tmpSkey.$tmpTime.'#'.$tmpLkey);
$params2 = array(
'uid' => $tmpUid,
'platform' => $tmpPlatform,
'gkey' => $tmpGkey,
'skey' => $tmpSkey,
'time' => $tmpTime,
'sign' => $tmpSign2,
);
$tmpSignUrl2 = http_build_query($params2);
$tmpRoleData = $this->_getRemoteFile('http://s'.$tmpSkey.'.'.'gate.xxx.xxx.com/checkuser.html?'.$tmpSignUrl2);<pre name="code" class="php"> //$this->_getRemoteFile这个其实就是curl请求返回值
$tmpRoleData = json_decode($tmpRoleData,true); if($tmpRoleData['errno'] === 0){ $tmpReturn['tmpPlayerId'] = 1; $tmpReturn['tmpPlayerName'] = $tmpRoleData['data']['nickname']; } return $tmpReturn;