更新日期:2024年 05月 13日海外版服务器接入文档
<h3>
<span style="font-size:16px;line-height:3;">一、简要说明</span>
</h3>
<p>
<span style="font-size:14px;line-height:3;">本文档的阅读对象为接入并使用SDK用户和支付系统的游戏服务器开发者。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">通信时SDK均采用UTF8编码。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">双发通信时,若有sign字段则一定要验证签名。</span>
</p>
<p>
<br />
</p>
<h3>
<span style="font-size:16px;line-height:3;">二、接口列表</span>
</h3>
<h4>
<span style="font-size:14px;line-height:3;">2.1.验证用户信息接口</span>
</h4>
<p>
<span style="font-size:14px;line-height:3;">2.1.1.接口目的</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">游戏客户端从SDK登录回调中获取到uid后,为防止用户篡改客户端而伪造用户uid标示从而登录他人账号,游戏客户端应将此信息传入给游戏服务器。游戏服务器调用此接口向SDK验证uid的真实性。若uid通过验证则允许此用户登录,若无法通过验证应拒绝此用户的登录授权。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">2.1.2.接口地址</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">http://xxx.com/webapi/checkUserInfo (xxx.com为域名,请联系贵方运营获取,获取之后替换即可)<br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">2.1.3.请求方式</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">GET/POST</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">2.1.4.参数列表</span>
</p>
<p>
<table border="1" cellpadding="0" cellspacing="0" style="width:75%;" class="" bordercolor="#000000">
<tbody>
<tr>
<td height="20" class="xl66" width="122">
<span style="font-size:14px;line-height:3;">参数</span>
</td>
<td class="xl66" width="99">
<span style="font-size:14px;line-height:3;">必要性</span>
</td>
<td class="xl66" width="183">
<span style="font-size:14px;line-height:3;">说明</span>
</td>
</tr>
<tr>
<td height="44" class="xl65" width="122">
<span style="font-size:14px;line-height:3;">uid</span>
</td>
<td class="xl65" width="99">
<span style="font-size:14px;line-height:3;">必传</span>
</td>
<td class="xl65" width="183">
<span style="font-size:14px;line-height:3;">从客户端登录回调中获取的uid</span>
</td>
</tr>
<tr>
<td height="66" class="xl65" width="122">
<span style="font-size:14px;line-height:3;">tok</span><span style="font-size:14px;line-height:3;">en</span>
</td>
<td class="xl65" width="99">
<span style="font-size:14px;line-height:3;">必传</span>
</td>
<td class="xl65" width="183">
<span style="font-size:14px;line-height:3;">从客户端登录回调中获取的token,请注意token的长度不要被截断</span>
</td>
</tr>
</tbody>
</table>
</p>
<p>
<span style="font-size:14px;line-height:3;">2.1.5.返回字段</span>
</p>
<p>
<span style="font-size:14px;"><span style="line-height:3;">接</span><span style="font-size:14px;line-height:3;">口会返回JSON格式字符串,如:</span></span>
</p>
<p>
<span style="font-size:14px;line-height:3;">例1 {"status":false,"message":"tokenUidError"}</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">例2 {"status":true,"message":""}</span>
</p>
<p>
<table border="1" cellpadding="0" cellspacing="0" style="width:75%;height:30%;" class="" bordercolor="#000000">
<tbody>
<tr>
<td height="20" class="xl66" width="75">
<span style="font-size:14px;line-height:3;">参</span><span style="font-size:14px;line-height:3;">数</span>
</td>
<td class="xl66" width="52">
<span style="font-size:14px;line-height:3;">类型</span>
</td>
<td class="xl66" width="63">
<span style="font-size:14px;line-height:3;">必要性</span>
</td>
<td class="xl66" width="442">
<span style="font-size:14px;line-height:3;">说明</span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="75">
<span style="font-size:14px;line-height:3;">status</span>
</td>
<td class="xl65" width="52">
<span style="font-size:14px;line-height:3;">bool</span>
</td>
<td class="xl65" width="63">
<span style="font-size:14px;line-height:3;">必传</span>
</td>
<td class="xl65" width="442">
<span style="font-size:14px;line-height:3;">接口验证状态,若通过验证为true,否则为false</span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="75">
<span style="font-size:14px;line-height:3;">message</span>
</td>
<td class="xl65" width="52">
<span style="font-size:14px;line-height:3;">string</span>
</td>
<td class="xl65" width="63">
<span style="font-size:14px;line-height:3;">必传</span>
</td>
<td class="xl65" width="442">
<span style="font-size:14px;line-height:3;">Status为false时,message有值,为错误提示语</span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="75">
<span style="font-size:14px;line-height:3;">data</span>
</td>
<td class="xl65" width="52">
<span style="font-size:14px;line-height:3;">array</span>
</td>
<td class="xl65" width="63">
<span style="font-size:14px;line-height:3;">可为空</span>
</td>
<td class="xl65" width="442">
<span style="font-size:14px;line-height:3;"><span style="font-size:14px;"></span><span style="font-size:14px;">如果status为true时,data数组包含了用户账号绑定信息。</span></span>
</td>
</tr>
<tr>
<td>
<span lang="EN-US" style="white-space:normal;font-size:14px;font-family:微软雅黑, sans-serif;">uid</span><span style="font-size:14px;"></span><br />
</td>
<td>
<span lang="EN-US" style="white-space:normal;font-size:14px;font-family:微软雅黑, sans-serif;">string</span><span style="font-size:14px;"></span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;font-family:微软雅黑, sans-serif;">可为空</span><span style="font-size:14px;"></span><br />
</td>
<td>
<span style="white-space:normal;font-size:7.5pt;font-family:微软雅黑, sans-serif;"><span style="font-size:14px;">如果</span><span lang="EN-US" style="font-size:14px;">status</span><span style="font-size:14px;">为</span><span lang="EN-US" style="font-size:14px;">true</span><span style="font-size:14px;">时,并且验证的用户存在,则返回用户</span><span lang="EN-US" style="font-size:14px;">uid</span></span><span style="font-size:14px;"></span><br />
</td>
</tr>
</tbody>
</table>
</p>
<p>
<span style="font-size:14px;"><br />
</span>
</p>
<p>
<span style="font-size:14px;">2.1.6.请求示例</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">http://xxx.com/webapi/checkUserInfo?token=@171@174@188@127@182@163@148@179@166@168@132@179@165@222@169@116@109@166@96@212@152@156@116@121@106@139@170@154@203@134@124@118@108@164@205@126@173@151@172@169@169@140@158@215@138@153@164@136@160@162@154@197@114@212@159@143@126@125@154@179@168@151@135@155@121@148@215@146@181@100@158@219@161@112@106@184@108@189@121@129@120@158@141@186@129@177@169@140@105@136@128@176@205@124@124@166@163@179@213@151@175@124@185@140@155@124@171@160&uid=523</span>
</p>
<p>
<span style="font-size:14px;line-height:3;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:3;">2.2.发放道具接口</span>
</h4>
<p>
<span style="font-size:14px;">2.2.1.接口目的</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">玩家在完成充值后,SDK会按照此接口协议向游戏提供的发货地址POST数据(简称为发送通知),游戏在收到SDK POST的数据后应验证相关信息并向玩家发送道具。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">游戏应按照第三章中的算法验证签名数据,确定请求是否合法。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">游戏发货的金额应当<span style="color:#E53333;">以通知中的金额为准</span>发放道具。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">游戏应判断是否重复发放道具,若已发放则不能再次发放。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">处理成功后返回<span style="color:#E53333;">SUCCESS</span>这7个字母SDK将不再通知,否则SDK将在一段内持续通知</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">2.2.2.接口地址</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">发放道具地址由游戏提供,SDK会主动向此地址发起POST请求</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">2.2.3.请求方式</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">POST</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">2.2.4.POST参数列表</span>
</p>
<p>
<table border="1" cellpadding="0" cellspacing="0" style="width:75%;height:40%;" class="" bordercolor="#000000">
<tbody>
<tr>
<td height="20" class="xl66" width="126">
<span style="font-size:14px;line-height:3;">参数</span>
</td>
<td class="xl66" width="72">
<span style="font-size:14px;line-height:3;">必要性</span>
</td>
<td class="xl66" width="661">
<span style="font-size:14px;line-height:3;">说明</span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">uid</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;">购买道具的用户uid</span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">username</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;">购买道具的用户username</span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">cpOrderNo</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">可为空</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;">游戏下单时传递的游戏订单号,原样返回</span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">orderNo</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;">SDK唯一订单号</span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">payTime</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;"><span style="font-size:14px;"></span><span style="font-size:14px;">用户支付时间,如2017-02-06
14:22:32</span></span>
</td>
</tr>
<tr>
<td>
<span style="white-space:normal;font-size:14px;">payType</span><span style="font-size:14px;"></span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;">必有</span><span style="font-size:14px;"></span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;"><span style="font-size:14px;">订单支付方式,</span><span style="white-space:normal;font-size:14px;font-family:微软雅黑, sans-serif;">具体值对应支付渠道详见</span><span style="font-size:14px;"></span></span><a href="https://www.quicksdk.com/doc-515.html" target="_blank"><span style="white-space:normal;font-size:14px;">对照表</span><span style="font-size:14px;"></span></a><br />
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;color:#E53333;"><strong>payAmount</strong></span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;color:#E53333;"><strong>必有</strong></span>
</td>
<td class="xl65" width="661">
<p>
<span style="font-size:14px;line-height:3;color:#E53333;"><strong>用户支付金额(单位:元)</strong></span>
</p>
<p>
<span style="font-size:14px;color:#E53333;"><strong>注意:如果游戏商品有多个数量,那么金额就是单价*数量</strong></span><span style="font-size:14px;"></span>
</p>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">payCurrency</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;">用户支付的币种,如RMB,USD等</span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">usdAmount</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<p>
<span style="font-size:14px;line-height:3;"><span style="font-size:14px;">用户支付的游戏道具以美元计价的金额</span><span style="font-size:14px;white-space:normal;">(单位:元</span></span><span style="font-size:14px;">)</span>
</p>
<p>
<span style="font-size:14px;"><span style="white-space:normal;font-size:14px;">注意:如果游戏商品有多个数量,那么金额就是单价*数量</span><span style="white-space:normal;font-size:14px;"></span><br />
</span>
</p>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">payStatus</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;">支付状态,为0表示成功,为1时游戏不做处理</span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">actRate</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;"><span style="white-space:normal;font-size:7.5pt;font-family:微软雅黑, sans-serif;"><span style="font-size:14px;">充值折扣,取值范围</span><span lang="EN-US" style="font-size:14px;">0~1(</span><span style="font-size:14px;">不包含</span><span lang="EN-US" style="font-size:14px;">0</span><span style="font-size:14px;">),默认为</span><span lang="EN-US" style="font-size:14px;">1</span><span style="font-size:14px;">表示不折扣;如值为</span><span lang="EN-US" style="font-size:14px;">0.2</span><span style="font-size:14px;">表示多发</span><span lang="EN-US" style="font-size:14px;">20%</span><span style="font-size:14px;">的元宝</span></span></span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">extrasParams</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">可为空</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;">游戏下单时传递的扩展参数,将原样返回。</span>
</td>
</tr>
<tr>
<td>
<span lang="EN-US" style="white-space:normal;font-size:14px;font-family:微软雅黑, sans-serif;">subscriptionStatus</span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;font-family:微软雅黑, sans-serif;">非必有</span><br />
</td>
<td>
<p style="font-size:medium;white-space:normal;">
<span style="font-size:14px;"><span style="color:#E53333;"><span style="font-size:14px;"></span><span style="font-size:14px;">内购订阅型商品订单使用,如果有此字段表示订单订阅状态。cp监测到有此字段时不需要发货</span></span><span style="font-size:14px;">。字段取值为:</span></span><span style="font-size:14px;"></span><span style="font-size:14px;">2:订阅取消</span>
</p>
</td>
</tr>
<tr>
<td>
<span lang="EN-US" style="white-space:normal;font-size:14px;font-family:微软雅黑, sans-serif;">subReason</span><span style="font-size:14px;"></span><br />
</td>
<td>
<span style="white-space:normal;font-size:14px;font-family:微软雅黑, sans-serif;">非必有</span><span style="font-size:14px;"></span><br />
</td>
<td>
<span style="white-space:normal;font-size:7.5pt;font-family:微软雅黑, sans-serif;"><span style="font-size:14px;">内购订阅型商品订单取消订阅原因。当有</span><span lang="EN-US" style="font-size:14px;">subscriptionStatus</span><span style="font-size:14px;">字段时此字段必有</span></span><span style="font-size:14px;"></span><br />
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">sign</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;">签名值,游戏应根据签名约定,本地计算后与此值进行比对</span>
</td>
</tr>
</tbody>
</table>
</p>
<p>
<span style="font-size:14px;line-height:3;color:#E53333;">注:如果是官网充值方式时,CP可以获取extrasParams参数的值来定位到角色信息。这里的值CP可与第三方官网约定一个规则,让第三方官网按照规则传值。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;color:#E53333;">目前规则为:区服ID|@|角色ID|@|商品ID</span>
</p>
<p>
<span style="font-size:14px;line-height:3;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">2.2.5.请求示例</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">假设游戏在SDK后台配置的发货地址为http://xxx.com/notify</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">SDK会在玩家充值后向此地址POST如下参数:</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">uid=543&username=554230339%40qq.com&cpOrderNo=orderNo_xxx&orderNo=0020170210162721805701&payTime=2017-02-10+16%3A27%3A55&payAmount=6.00&payStatus=0&payCurrency=RMB&usdAmount=0.99&extrasParams=&sign=22abf0b204d19316d177baeec6a90fcd</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">CP接受到数据后应按第三章约定算法计算签名。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">a)假设本地计算的签名与POST中传递的签名一致,则通过</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">b)若签名不一致,则返回FAILED,中断处理。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">CP应判断是否已发送道具。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">CP其他判断逻辑。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">处理完成后。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">a)希望SDK继续通知则返回任何非SUCCESS的字符。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">b)处理完毕,订单结束则返回<span style="color:#E53333;">SUCCESS</span>,SDK不会再通知。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:3;">2.3.Facebook活动礼包发放(选接)</span>
</h4>
<p>
<span style="font-size:14px;line-height:3;">2.3.1.接口目的</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">玩家在领取礼包之后,SDK会按照此接口协议向游戏提供的发货地址POST数据,游戏在收到SDK POST的数据后应验证相关信息并向玩家发送礼包。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">游戏应按照第三章中的算法验证签名数据,确定请求是否合法。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">游戏应判断是否重复发放礼包,若已发放则不能再次发放。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">处理成功后返回<span style="color:#E53333;">SUCCESS</span>这7个字母表示领取成功,否则判定领取失败。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">2.3.2.接口地址</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">礼包发放地址由游戏提供,SDK会主动向此地址发起POST请求</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">2.3.3.请求方式</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">POST</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">2.3.4.POST参数列表</span>
</p>
<p>
<br />
</p>
<p>
<table border="1" cellpadding="0" cellspacing="0" style="width:75%;" class="" bordercolor="#000000">
<tbody>
<tr>
<td height="20" class="xl66" width="126">
<span style="font-size:14px;line-height:3;">参</span><span style="font-size:14px;line-height:3;">数</span>
</td>
<td class="xl66" width="72">
<span style="font-size:14px;line-height:3;">必要性</span>
</td>
<td class="xl66" width="661">
<span style="font-size:14px;line-height:3;">说明</span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">uid</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;">领取礼包的用户uid</span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">giftNo</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;">游戏礼包活动唯一值,表示用户要领取的哪个活动礼包</span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">serverInfo</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;">游戏跳转活动页面是传递的游戏serverId,原样返回</span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">roleInfo</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;">游戏跳转活动页面是传递的游戏roleId,原样返回</span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">sign</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;">签名值,游戏应根据签名约定,本地计算后与此值进行比对</span>
</td>
</tr>
</tbody>
</table>
</p>
<p>
<br />
</p>
<p>
<span style="font-size:14px;line-height:3;">2.3.5.请求示例</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">假设游戏在SDK活动配置的礼包地址为http://xxx.com/notify</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">SDK会在玩家点击领取礼包时同步向此地址POST如下参数:</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">uid=543&giftNo=dwqu18921hud9&sign=22abf0b204d19316d177baeec6a90fcd</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">CP接受到数据后应按第三章约定算法计算签名。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">a)假设本地计算的签名与POST中传递的签名一致,则通过</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">b)若签名不一致,则返回FAILED,中断处理。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">CP应判断是否已发送礼包。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">CP其他判断逻辑。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">处理完成后,返回<span style="color:#E53333;">SUCCESS</span>表示用户领取成功,否则为失败。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;"><br />
</span>
</p>
<h4>
<span style="font-size:14px;line-height:3;">2.4. 获取玩家游戏角色列表(选接)</span>
</h4>
<p>
<span style="font-size:14px;">2.4.1.接口目的</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">在网页充值平台玩家登录账号选择游戏时获取游戏角色列表。玩家选择角色后向该角色充值。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">2.4.2.接口地址</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">地址由游戏提供,SDK会主动向此地址发起POST请求</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">2.4.3.请求方式</span>
</p>
<p style="white-space:normal;">
<span style="font-size:14px;line-height:3;">POST</span>
</p>
<p style="white-space:normal;">
<span style="font-size:14px;line-height:3;"><span style="font-size:14px;line-height:3;">2.4.4.</span><span style="font-size:14px;white-space:normal;line-height:3;">POST参数列表</span></span>
</p>
<table border="1" cellpadding="0" cellspacing="0" class="" bordercolor="#000000" style="width:1414px;">
<tbody>
<tr>
<td height="20" class="xl66" width="126">
<span style="font-size:14px;line-height:3;"><span style="font-size:14px;"></span><span style="font-size:14px;">参</span></span><span style="font-size:14px;line-height:3;">数</span>
</td>
<td class="xl66" width="72">
<span style="font-size:14px;line-height:3;">必要性</span>
</td>
<td class="xl66" width="661">
<span style="font-size:14px;line-height:3;">说明</span>
</td>
</tr>
<tr>
<td>
<span style="font-size:14px;"></span><span style="font-size:14px;">frType</span><span style="font-size:14px;"></span><br />
</td>
<td>
<span style="font-size:14px;">非必有</span><span style="font-size:14px;"></span><br />
</td>
<td>
<p>
<span style="font-size:14px;">获取角色方式,取枚举值,如果没有此字段默认以第1种方式获取角色列表</span><span style="font-size:14px;"></span>
</p>
<p>
<span style="font-size:14px;">1. 通过SDK账号UID获取,默认为此方式</span><br />
<span style="font-size:14px;">2. 通过角色ID获取</span><span style="font-size:14px;"></span>
</p>
</td>
</tr>
<tr>
<td>
<span style="font-size:14px;">roleId</span><span style="font-size:14px;"></span><br />
</td>
<td>
<span style="font-size:14px;">非必有</span><span style="font-size:14px;"></span><br />
</td>
<td>
<span style="font-size:14px;">用户角色ID,如果frType为2时,角色ID字段必有。游戏此时应该根据角色ID查询当前游戏的角色信息</span><span style="font-size:14px;"></span><br />
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">uid</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;"><span style="white-space:normal;font-size:14px;font-family:微软雅黑, sans-serif;">非必有</span></span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;"><span style="line-height:3;"><span style="white-space:normal;font-size:7.5pt;font-family:微软雅黑, sans-serif;"><span style="font-size:14px;">用户</span><span lang="EN-US" style="font-size:14px;">SDK</span><span style="font-size:14px;">账号</span><span lang="EN-US" style="font-size:14px;">uid</span><span style="font-size:14px;">,如果</span><span lang="EN-US" style="font-size:14px;">frType</span><span style="font-size:14px;">为</span><span lang="EN-US" style="font-size:14px;">1</span><span style="font-size:14px;">时,</span><span lang="EN-US" style="font-size:14px;">uid</span><span style="font-size:14px;">字段必有。游戏此时应该根据</span><span lang="EN-US" style="font-size:14px;">SDK</span><span style="font-size:14px;">账号</span><span lang="EN-US" style="font-size:14px;">ID</span><span style="font-size:14px;">查询当前游戏的所有角色列表</span></span></span><span lang="EN-US" style="line-height:3;"></span></span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">username</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;"><span style="white-space:normal;font-size:14px;font-family:微软雅黑, sans-serif;">非必有</span></span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;"><span style="line-height:3;"><span style="white-space:normal;font-size:7.5pt;font-family:微软雅黑, sans-serif;"><span style="font-size:14px;">用户</span><span lang="EN-US" style="font-size:14px;">SDK</span><span style="font-size:14px;">账号名,如果</span><span lang="EN-US" style="font-size:14px;">frType</span><span style="font-size:14px;">为</span><span lang="EN-US" style="font-size:14px;">1</span><span style="font-size:14px;">时,</span><span lang="EN-US" style="font-size:14px;">username</span><span style="font-size:14px;">字段必有。游戏此时应该根据</span><span lang="EN-US" style="font-size:14px;">SDK</span><span style="font-size:14px;">账号</span><span lang="EN-US" style="font-size:14px;">ID</span><span style="font-size:14px;">查询当前游戏的所有角色列表</span></span></span><span style="line-height:3;"></span></span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">productCode</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;"><span style="line-height:3;font-size:14px;">SDK产品</span><span lang="EN-US" style="line-height:3;font-size:14px;">ProductCode</span></span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">sign</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;"><span style="font-size:14px;">签名值,游戏应根据签名约定,本地计算</span>后与此值进行比对</span>
</td>
</tr>
</tbody>
</table>
<span style="font-size:14px;"><br />
</span>
<p>
<span style="font-size:14px;line-height:3;">2.4.5.返回字段说明</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">游戏地址在接收到SDK请求之后返回玩家的角色信息列表,数据格式为json,返回字段如下</span>
</p>
<p>
<table border="1" cellpadding="0" cellspacing="0" class="" bordercolor="#000000" style="width:1414px;">
<tbody>
<tr>
<td height="20" class="xl66" width="126">
<span style="font-size:14px;line-height:3;">参</span><span style="font-size:14px;line-height:3;">数</span>
</td>
<td class="xl66" width="72">
<span style="font-size:14px;line-height:3;">必要性</span>
</td>
<td class="xl66" width="661">
<span style="font-size:14px;line-height:3;">说明</span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">code</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;"><span style="line-height:3;">200:请求成功;其余值均为失败</span><span lang="EN-US"></span></span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">data</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;"><span style="font-size:14px;">玩家角色列表集合,每个子集包含如下字段:</span><br />
<span style="font-size:14px;">serverId:区服ID</span><br />
<span style="font-size:14px;">serverName:区服名</span><br />
<span style="font-size:14px;">roleId:角色ID</span><br />
<span style="font-size:14px;">roleName:角色名</span><br />
</span>
<p>
<span style="font-size:14px;line-height:3;">roleLevel:角色等级</span>
</p>
<p>
<span style="font-size:14px;line-height:3;"><span style="font-size:14px;">sdkUid:当获取方式frType=2时,游戏应必须返回SDK的uid,否则可能会无法调起支付</span><span style="font-size:14px;"></span></span>
</p>
</td>
</tr>
</tbody>
</table>
<span style="font-size:14px;line-height:3;"><br />
</span>
</p>
<p>
<span style="line-height:3;"><br />
</span>
</p>
<h4>
<span style="line-height:3;">2.5. 消</span><span style="font-size:14px;line-height:3;">息推送(选接)</span>
</h4>
<p>
<span style="font-size:14px;line-height:3;"><br />
</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">2.5.1.接口目的</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">开发者可通过该接口对玩家进行消息推送。接收推送的设备为玩家最后登录设备。</span><br />
<span style="font-size:14px;line-height:3;">a.SDK海外后台->平台管理->开放平台生成开发者秘钥,获取openId和openKey。</span><br />
<span style="font-size:14px;line-height:3;">b.其中openKey为用于生成签名KEY。</span><br />
<span style="font-size:14px;line-height:3;">c.玩家设备可能是Android或IOS,开发者需在SDK后台推送配置配置 FireBase(Android) 和 推送证书(IOS)。</span><br />
<span style="font-size:14px;line-height:3;">d.接口最终使用的推送参数,取决于玩家最后登录设备对应平台以及产品的配置,同一玩家也可能每次使用不同设备登录不同游戏!</span>
</p>
<span style="font-size:14px;line-height:3;">2.5.2.接口地址</span>
<p>
<span style="font-size:14px;line-height:3;">http://xxx.com/pushApi/send (xxx.com为域名,请联系贵方运营获取,获取之后替换即可)</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">2.5.3.请求方式</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">POST</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">2.5.4.</span><span style="font-size:14px;white-space:normal;line-height:3;">POST参数列表</span>
</p>
<p>
<span style="font-size:14px;white-space:normal;">
<table border="1" cellpadding="0" cellspacing="0" class="" bordercolor="#000000" style="width:1414px;">
<tbody>
<tr>
<td height="20" class="xl66" width="126">
<span style="font-size:14px;line-height:3;">参</span><span style="font-size:14px;line-height:3;">数</span>
</td>
<td class="xl66" width="72">
<span style="font-size:14px;line-height:3;">必要性</span>
</td>
<td class="xl66" width="661">
<span style="font-size:14px;line-height:3;">说明</span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">openid</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;"><span style="font-size:14px;line-height:3;">SDK后台获取</span><span lang="EN-US"></span></span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">users</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;"><span style="font-size:14px;line-height:3;">玩家</span><span lang="EN-US" style="font-size:14px;line-height:3;">ID</span><span style="font-size:14px;line-height:3;">集合,</span><span lang="EN-US" style="font-size:14px;line-height:3;">JSON</span><span style="font-size:14px;line-height:3;">串,如</span><span lang="EN-US" style="font-size:14px;line-height:3;"> ["123","124"]</span></span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">title</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;"><span style="font-size:14px;line-height:3;">消息标题</span><span lang="EN-US"></span></span>
</td>
</tr>
<tr>
<td height="22" class="xl65" width="126">
<span style="font-size:14px;line-height:3;">message</span>
</td>
<td class="xl65" width="72">
<span style="font-size:14px;line-height:3;">必有</span>
</td>
<td class="xl65" width="661">
<span style="font-size:14px;line-height:3;">消息内容</span>
</td>
</tr>
<tr>
<td>
<span style="line-height:3;font-size:14px;">andDebug</span><br />
</td>
<td>
<p>
<span style="line-height:3;font-size:14px;">可选</span>
</p>
</td>
<td>
<span style="line-height:3;font-size:14px;"></span><span style="line-height:3;font-size:14px;">Google推送环境,可选值:1沙盒模式,0正式环境;默认0,请注意对应环境参数。</span><span style="line-height:3;font-size:14px;"></span><br />
</td>
</tr>
<tr>
<td>
<span style="line-height:3;font-size:14px;">iosDebug</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">可选</span>
</td>
<td>
<span style="line-height:3;font-size:14px;">Apple推送环境,可选值:1沙盒模式,0正式环境;默认0,请注意对应环境参数。</span><span style="line-height:3;font-size:14px;"></span><br />
</td>
</tr>
<tr>
<td>
<span style="line-height:3;font-size:14px;">sign</span><br />
</td>
<td>
<span style="font-size:14px;white-space:normal;line-height:3;">必有</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">参数签名,参考本接口所述签名算法</span><span style="line-height:3;font-size:14px;"></span><br />
</td>
</tr>
</tbody>
</table>
<span style="font-size:14px;line-height:3;"><br />
</span></span>
</p>
<p>
<span style="font-size:14px;white-space:normal;"><span style="font-size:14px;line-height:3;">2.5.5.请求示例</span></span>
</p>
<p>
<span style="font-size:14px;line-height:3;">POST</span>
</p>
<p>
<span style="font-size:14px;white-space:normal;"><span style="font-size:14px;line-height:3;">openId=0lEAhY&title=New%20message&message=The%20test%20message&users=%5B%22123%22%2C%22124%22%5D&sign=a2fd31d0d525857fb386298a509a3755</span><span style="font-size:14px;line-height:3;"></span><br />
</span>
</p>
<p>
<span style="font-size:14px;white-space:normal;line-height:3;"><br />
</span>
</p>
<p>
<span style="font-size:14px;white-space:normal;line-height:3;">2.5.6.接口响应</span>
</p>
<p>
<span style="font-size:14px;white-space:normal;line-height:3;">失败</span>
</p>
<p>
<span style="font-size:14px;white-space:normal;line-height:3;"> </span>
</p>
<pre class="brush:js;toolbar:false">{
"status": false,
"data": [],
"message": "SIGN ERROR"
}</pre>
<p>
<br />
</p>
<p>
<span style="font-size:14px;white-space:normal;"><span style="font-size:14px;line-height:3;"></span><span style="font-size:14px;line-height:3;">成功,返回推送成功数。</span><span style="font-size:14px;line-height:3;"></span><br />
</span>
</p>
<p>
<span style="font-size:14px;white-space:normal;"><span style="font-size:14px;line-height:3;"> </span></span>
</p>
<pre class="brush:js;toolbar:false">{
"data": {
"success": 2
},
"status": true,
"message": ""
}</pre>
<p>
<br />
</p>
<p>
<span style="font-size:14px;white-space:normal;"><span style="font-size:14px;line-height:3;">2.5.7.</span><span style="font-size:14px;line-height:3;">签名算法</span></span>
</p>
<p>
<span style="font-size:14px;white-space:normal;"><span style="font-size:14px;line-height:3;">请求参数中除sign外的所有参数(可选参数可不传),按键首字母升序排序,键值对按照 key=val 封装,并使用 & 进行拼接,最后再拼接上openKey(注意openKey 前面也应该有个 &)得到待签名串。</span><br />
<span style="font-size:14px;line-height:3;">待签名串示例:</span></span>
</p>
<p>
<span style="font-size:14px;white-space:normal;"> </span>
</p>
<pre class="brush:js;toolbar:false">message=The test message&openId=0lEAhY&title=You have a new message&users=["57524269","57524270"]&bkajTWxAT2TyU5vXuStD59smApTrMGso</pre>
<span style="font-size:14px;line-height:3;"></span><span style="font-size:14px;line-height:3;">将上一步得到的待签名串进行MD5,即得到32位签名sign。</span><span style="font-size:14px;line-height:3;"></span><br />
<p>
<br />
</p>
<p>
<span style="font-size:14px;white-space:normal;"><br />
</span>
</p>
<h3>
<span style="font-size:14px;line-height:3;">三、签名算法描述</span>
</h3>
<p>
<span style="font-size:14px;line-height:3;">通信时,发起方会在请求中附带sign字段。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">接收方收到消息后将收到的键值对POST参数,移除sign后,按首字母</span><span style="font-size:14px;">升序排序。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">将所有键值对按 key1=val1&key2=val2&key3=val3& 格式进行拼接。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">在第3步拼接的字符后拼接SDK约定的callbackKey则此时格式为:key1=val1&key2=val2&key3=val3&callbackKey</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">将第4步处理的字符串进行md5编码,得到32位md5值。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">将第5步获取的md5值与第1步中发起方传递的sign值进行对比,一致则通过。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;">代码片段参见第四章。</span>
</p>
<p>
<span style="font-size:14px;line-height:3;"><br />
</span>
</p>
<h3>
<span style="font-size:14px;line-height:3;">四、代码片段</span>
</h3>
<pre class="brush:js;toolbar:false">/**
* 本地计算MD5签名PHP示例代码
* @params $callbackey SDK后台分配的通信密钥
* @return本地计算的md5签名值
*/
public function getMd5Sign($callbackkey){
$params = $_POST;
unset($params['sign']);
ksort($params);$signKey = '';
foreach($params as $key => $val){
$signKey .= $key.'='.$val.'&';
}
$signKey .= $callbackkey;
return md5($signKey);
}</pre>
<span style="line-height:3;"></span>
<p>
<br />
</p>