更新日期:2025年 07月 28日服务器接入文档
<h3 style="white-space:normal;">
<span style="font-size:16px;line-height:3;">1.验证用户信息接口</span>
</h3>
<h4 style="white-space:normal;">
<span style="font-size:14px;line-height:3;">1.1接口说明</span>
</h4>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">· 该接口为游戏服务器对SDK服务器发起的接口</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">· 该接口的功能主要为:游戏服务器通过token向SDK服务器验证用户信息</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">· token值会由SDK客户端告知给游戏客户端</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">· 成功返回1</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;"><span style="font-size:14px;">· </span><span style="color:#E53333;font-size:14px;"><strong>同渠道UID绝对唯一,不同渠道UID可能重复,游戏服务器必须使用渠道ID + 渠道UID 方能确保游戏角色唯一</strong></span></span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;"><br />
</span>
</p>
<h4 style="white-space:normal;">
<span style="font-size:14px;line-height:3;">1.2 API地址</span>
</h4>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">http://checkuser.quickapi.net/v2/checkUserInfo</span>
</p>
<p style="white-space:normal;">
<br />
</p>
<p style="white-space:normal;">
<span style="font-size:14px;">备注:</span>
</p>
<p style="white-space:normal;">
<span style="font-size:14px;">a.此域名支持智能线路,国内/海外游戏均使用此域名</span>
</p>
<p style="white-space:normal;">
<span style="font-size:14px;">b.这个接口需放在服务器上请求,不能在前端请求</span>
</p>
<p style="white-space:normal;">
<br />
</p>
<h4 style="white-space:normal;">
<span style="font-size:14px;line-height:3;">1.3 请求方式</span>
</h4>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">GET/POST</span>
</p>
<p style="white-space:normal;">
<br />
</p>
<h4 style="white-space:normal;">
<span style="font-size:14px;line-height:3;">1.4 参数列表</span>
</h4>
<table cellpadding="2" cellspacing="0" border="1" bordercolor="#000000" style="width:1002px;">
<tbody>
<tr>
<td>
<span style="line-height:3;font-size:14px;">参数名称</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">重要性</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">说明</span><br />
</td>
</tr>
<tr>
<td>
<span style="line-height:3;font-size:14px;">token</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">必须</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">游戏客户端从SDK客户端中获取的token值,原样传递无需解密,此值长度范围小于512,CP需预留足够长度</span><br />
</td>
</tr>
<tr>
<td>
<span style="line-height:3;font-size:14px;">uid</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">必须</span><br />
</td>
<td>
<span style="font-size:14px;">从客户端接口获取到的渠道原始uid,无需任何加工如拼接渠道ID等(</span><span style="color:#E53333;font-size:14px;"><strong>注意:一定要传客户端返回的原始uid!!!</strong></span><span style="font-size:14px;">)</span><br />
</td>
</tr>
<tr>
<td style="width:10%;">
<span style="font-size:14px;">product_code </span><br />
</td>
<td>
<span style="font-size:14px;">选传</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">Quick后台查看游戏信息里可获取此值</span><br />
</td>
</tr>
<tr>
<td>
<span style="line-height:3;font-size:14px;">channel_code </span>
</td>
<td>
<span style="line-height:3;font-size:14px;">选传</span>
</td>
<td>
<span style="line-height:3;font-size:14px;">传入此值将校验uid和token是否与channel_code一致,若游戏运营过程有发生玩家渠道间帐号转移,应确保此值正确 (该接口为客户端文档中的渠道类型接口)</span><br />
</td>
</tr>
</tbody>
</table>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">备注:游戏从QuickSDK接口中获取的uid为渠道原始的UID,相同渠道UID唯一,不同渠道可能存在相同的UID(如Baidu有UID为1的用户,UC也有UID为1的用户).故游戏确定用户唯一身份时,需组合渠道ID和渠道UID两项参数.如: 渠道ID@渠道UID、渠道ID|渠道UID、渠道ID_渠道UID等组合方式</span>
</p>
<p style="white-space:normal;">
<br />
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;"><br />
</span>
</p>
<h4 style="white-space:normal;">
<span style="font-size:14px;">1.5 返回结果</span>
</h4>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">返回结果为纯字符串</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">示例: 1</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">1为成功,其他值为失败</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;"><br />
</span>
</p>
<h4 style="white-space:normal;">
<span style="font-size:14px;">1.6 请求示例</span>
</h4>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">http://checkuser.quickapi.net/v2/checkUserInfo?token=@178@83@173@158@157@88@108@86@118@98@117@107@105@106@108@99@104@120@108@103@112@123@125@106@96@101@104@110@104@115@105@101@169@187@175@156@163@183@152@164@101@155@134@217@160@158@157@87@115@103@102@105@101@99@105@99@99@110@105@92@85@154@157@152@165@163@158@163@121@151@90@112@90@100@102@87@157@151@219@196@217@215@134@165@121@163@225&uid=D2A864635A709FD302080B508FF98D49&product_code=64345624204336603757759703868145</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;"><br />
</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;"><br />
</span>
</p>
<h3 style="white-space:normal;">
<span style="font-size:16px;line-height:3;">2.充值同步接口</span>
</h3>
<h4 style="white-space:normal;">
<span style="font-size:14px;line-height:3;color:#E53333;">支付解密流程:(CallbackKey 用来解码通知的密文;Md5Key 用来验证签名)</span>
</h4>
<p style="white-space:normal;">
<span style="font-size:14px;line-height:3;color:#E53333;"><strong><strong><span style="font-size:14px;">游戏最终发放道具金额应以</span></strong><strong><span style="font-size:14px;">amount</span></strong><strong><span style="font-size:14px;">为准</span></strong></strong><br />
</span>
</p>
<p style="white-space:normal;">
<span style="font-size:14px;line-height:3;"><span style="font-size:14px;">1.收到回调参数(nt_data, sign, md5Sign)</span><br />
<span style="font-size:14px;">2.计算md5(nt_data+sign+md5key)得到签名(md5key在quick后台获取),与收到的md5Sign一致,则签名通过.</span><br />
<span style="font-size:14px;">3.用callbackkey解密nt_data</span><br />
<span style="font-size:14px;">4.解密成功后,游戏按照通知XML中的amount金额进行发放道具</span><br />
<span style="font-size:14px;">计算签名是 nt_data和值 拼接 sign的值 再拼接 md5key 计算md5,算出的结果和 POST中的md5Sign 进行对比</span><br />
</span>
</p>
<p style="white-space:normal;">
<span style="font-size:14px;line-height:3;"><span style="font-size:14px;"><br />
</span></span>
</p>
<h4 style="white-space:normal;">
<span style="font-size:14px;line-height:3;">2.1 接口说明</span>
</h4>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">· 游戏将自身发放道具url填写至QuickSDK后台->参数配置->Callback_Url</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">· QuickSDK采用http post方式把需要回传参数以xml形式回传</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">· 游戏方Http获取参数的方式读取并解析回写自身数据库</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">· 所有参数值分别以第三章中的算法进行加/解密</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">· 同步通知中会告知游戏方.该笔充值来源的渠道(如360游戏、91助手)等</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;"><span style="font-size:14px;">· 同步成功游戏方需要对该订单进行排重处理,检查是否处理过,处理过不再处理。处理成功回写大写的</span><span style="color:#E53333;font-size:14px;"><strong>SUCCESS</strong></span><span style="font-size:14px;">给QuickSDK(只能返回这7个纯字符串不能带其他字符)</span></span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;"><span style="font-size:14px;">· 发放道具接口的响应速度应在5秒以内,发放接口响应越慢,QuickSDK向此接口补发通知的频率也将变低</span><br />
</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;"><strong><span style="color:#E53333;font-size:14px;">注:</span></strong><strong><span style="color:#E53333;"><span style="font-size:14px;">母包支付过程中,客户端点击后弹出的【</span><strong><span style="font-size:14px;">支付成功</span></strong><span style="font-size:14px;">】和【</span><strong><span style="font-size:14px;">支付失败</span></strong><span style="font-size:14px;">】选项仅用于发出客户端通知,服务器发送通知则是以是否使用此处创建的测试帐号且帐号余额足够为判断依据</span></span></strong><br />
</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;"><strong><span style="color:#E53333;"><span style="font-size:14px;"><br />
</span></span></strong></span>
</p>
<h4 style="white-space:normal;">
<span style="font-size:14px;line-height:3;">2.2 请求时参数</span>
</h4>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">QuickSDK服务器以POST请求游戏合作方时会使用如下参数:</span>
</p>
<table cellpadding="2" cellspacing="0" border="1" bordercolor="#000000" style="width:1002px;">
<tbody>
<tr>
<td>
<span style="line-height:3;font-size:14px;">参数名称</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">数据类</span><span style="line-height:3;font-size:14px;">型</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">说明</span><br />
</td>
</tr>
<tr>
<td>
<span style="line-height:3;font-size:14px;">nt_data</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">string</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">通知数据解码后为xml格式 ,具体见2.1.1</span>
</td>
</tr>
<tr>
<td>
<span style="line-height:3;font-size:14px;">sign</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">string</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">签名串,具体见第三章</span><br />
</td>
</tr>
<tr>
<td>
<span style="line-height:3;font-size:14px;">md5Sign</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">string</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">计算方法为MD5(nt_data+sign+md5key),三个值直接拼接即可</span><br />
</td>
</tr>
</tbody>
</table>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">参数都会被第四章中的加解密方式进行传递.游戏方需要对参数解密后方可获取到2.2.1中的明文XML</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;"><br />
</span>
</p>
<h4 style="white-space:normal;">
<span style="font-size:14px;line-height:3;">2.2.1 nt_data参数的XML格式</span>
</h4>
<p style="white-space:normal;">
<br />
</p>
<pre class="brush:xml;toolbar:false"><quicksdk_message>
<message>
<is_test></is_test>
<channel></channel>
<channel_uid></channel_uid>
<game_order></game_order>
<order_no></order_no>
<pay_time></pay_time>
<amount></amount>
<status></status>
<extras_params></extras_params>
</message>
</quicksdk_message></pre>
<p style="white-space:normal;">
<br />
</p>
<h4 style="white-space:normal;">
<span style="font-size:14px;line-height:3;">2.2.2 XML字段说明</span>
</h4>
<table cellpadding="2" cellspacing="0" border="1" bordercolor="#000000" style="width:1002px;">
<tbody>
<tr>
<td>
<span style="line-height:3;font-size:14px;">参数名称</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">数据类型</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">重要性</span><br />
</td>
<td style="height:36px;">
<span style="line-height:3;font-size:14px;">说明</span><br />
</td>
</tr>
<tr>
<td>
<span style="line-height:3;font-size:14px;">is_test</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">string</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">必有</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">是否为测试订单 1为测试 0为线上正式订单,游戏应根据情况确定上线后是否向测试订单发放道具。</span><br />
</td>
</tr>
<tr>
<td>
<span style="line-height:3;font-size:14px;">channel</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">string</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">必有</span><br />
</td>
<td>
<span style="line-height:3;"><span style="font-size:14px;">渠道标示ID </span><span style="color:#E53333;font-size:14px;"><strong>注意:游戏可根据实情,确定发放道具时是否校验充值来源渠道是否与该角色注册渠道相符</strong></span></span><br />
</td>
</tr>
<tr>
<td>
<span style="line-height:3;font-size:14px;">channel_uid</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">string</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">必有</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">渠道用户唯一标示,该值从客户端GetUserId()中可获取 <strong style="white-space:normal;color:#E53333;font-size:14px;">游戏可根据实情,确定发放道具时是否校验充值来源uid与该角色注册uid相符</strong></span><br />
</td>
</tr>
<tr>
<td>
<span style="line-height:3;font-size:14px;">game_order</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">string</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">必有</span><br />
</td>
<td>
<p>
<span style="line-height:3;font-size:14px;">游戏在调用Quic</span><span style="font-size:14px;">kSDK发起支付时传递的游戏方订单,这里会原样传回</span>
</p>
</td>
</tr>
<tr>
<td>
<span style="line-height:3;font-size:14px;">order_no</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">string</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">必有</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">QuickSDK唯一订单号</span><br />
</td>
</tr>
<tr>
<td>
<span style="line-height:3;font-size:14px;">pay_time</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">string</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">必有</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">支付时间 2015-01-01 23:00:00</span><br />
</td>
</tr>
<tr>
<td>
<span style="line-height:3;color:#E53333;font-size:14px;"><strong>amount</strong></span><br />
</td>
<td>
<span style="line-height:3;color:#E53333;font-size:14px;"><strong>string</strong></span><br />
</td>
<td>
<span style="line-height:3;color:#E53333;font-size:14px;"><strong>必有</strong></span><br />
</td>
<td>
<span style="line-height:3;color:#E53333;font-size:14px;"><strong>成交金额,单位元,游戏最终发放道具金额应以此为准</strong></span><br />
</td>
</tr>
<tr>
<td>
<span style="line-height:3;font-size:14px;">status</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">string</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">必有</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">充值状态:0成功, 1失败(为1时 应返回FAILED失败)</span><br />
</td>
</tr>
<tr>
<td>
<span style="line-height:3;font-size:14px;">extras_params</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">string</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">必有</span><br />
</td>
<td>
<span style="line-height:3;font-size:14px;">可为空,充值状态游戏客户端调用SDK发起支付时填写的透传参数,没有则为空 <span style="color:#E53333;"><strong>建议对此值做签名或加密处理,避免下单时被篡改</strong></span><span style="color:#E53333;"><strong></strong></span></span><br />
</td>
</tr>
<tr>
<td>
<p>
<span style="font-size:14px;">original_currency</span>
</p>
</td>
<td>
<span style="font-size:14px;">string</span><br />
</td>
<td>
<span style="font-size:14px;">可选</span><br />
</td>
<td style="height:46px;">
<p>
<span style="line-height:3;font-size:14px;">海外游戏返回此字段,玩家支付的原始币种</span>
</p>
</td>
</tr>
<tr>
<td>
<span style="font-size:14px;">original_amount</span><br />
</td>
<td>
<span style="font-size:14px;">string</span><br />
</td>
<td>
<span style="font-size:14px;">可选</span><br />
</td>
<td style="height:46px;">
<p>
<span style="line-height:3;font-size:14px;">海外游戏返回此字段,玩家支付的原始币种金额</span>
</p>
</td>
</tr>
</tbody>
</table>
<p style="white-space:normal;">
<span style="font-size:16px;"><br />
</span>
</p>
<p style="white-space:normal;">
<span style="color:#E53333;font-size:14px;"><strong>注意:</strong></span>
</p>
<p style="white-space:normal;">
<span style="font-size:16px;"><span style="font-size:14px;color:#E53333;"><strong>国内游戏 amount 为人民币元 ,游戏发货需时需验证下单金额与此金额,最终发货应以此金额为准</strong></span><br />
<span style="font-size:14px;color:#E53333;"><strong>海外游戏 amount 为美元,此金额通常经过汇率换算,换算汇率以渠道汇率或QuickSDK配置汇率为准</strong></span></span>
</p>
<p style="white-space:normal;">
<span style="font-size:16px;"><span style="font-size:14px;color:#E53333;"><strong><br />
</strong></span></span>
</p>
<p style="white-space:normal;">
<span style="font-size:16px;"><span style="font-size:14px;color:#E53333;"><strong>另游戏可根据自身情况验证: <br />
1. 角色创建时的渠道UID是否与通知中的channe_uid一致<br />
2. 游戏角色创建的渠道ID是否与通知的channel一致<br />
上述验证可防止渠道间拉人、创建多账号刷渠道优惠券等行为<br />
<br />
</strong></span></span>
</p>
<p style="white-space:normal;">
<span style="font-size:16px;line-height:3;"><br />
</span>
</p>
<h3 style="white-space:normal;">
<span style="font-size:16px;line-height:3;">3.MD5签名(同步接口)</span>
</h3>
<p style="white-space:normal;">
<br />
</p>
<h4 style="white-space:normal;">
<span style="font-size:14px;line-height:3;">3.1 签名说明</span>
</h4>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">· 签名的字段名为md5Sign</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">· 签名是对接收到的密文原文进行计算的</span>
</p>
<h4 style="white-space:normal;">
<span style="font-size:14px;line-height:3;">3.2 算法描述</span>
</h4>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">· 回调接口会接受到nt_data、sign、md5Sign 这3项参数</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">· 游戏采用md5(nt_data+sign+md5key)计算得到一个当前的md5SignLocal</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">· 游戏对比本地计算的md5SignLocal是否与接收到的md5Sign一致.一致则签名通过,不一致则签名验证失败</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">· md5Key由QuickSDK分配,可从QuickSDK后台获取</span>
</p>
<p style="white-space:normal;">
<br />
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;"><br />
</span>
</p>
<h3 style="white-space:normal;">
<span style="font-size:16px;line-height:3;">4.接口加解密(同步接口)</span>
</h3>
<h4 style="white-space:normal;">
<span style="font-size:14px;line-height:3;">4.1 加密</span>
</h4>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;"><strong>4.1.1 加密算法描述</strong></span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">详情参见 附录1</span>
</p>
<p style="white-space:normal;">
<br />
</p>
<h4 style="white-space:normal;">
<span style="font-size:14px;line-height:3;">4.2解密</span>
</h4>
<p style="white-space:normal;">
<strong><span style="line-height:3;font-size:14px;">4.2.1解密算法描述</span></strong>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">详情参见 附录1</span>
</p>
<p style="white-space:normal;">
<br />
</p>
<h4 style="white-space:normal;">
<span style="font-size:14px;line-height:3;">4.3示例</span>
</h4>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">假设游戏收到QuickSDK回调参数如下:</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">nt_data=@116@119@168@161@165@88@170@153@167@170@161@163@166@113@87@99@94@102@83@85@153@166@154@164@155@157@166@152@114@90@140@135@126@101@104@86@89@171@168@149@163@155@153@160@167@162@154@111@82@164@160@87@115@118@115@168@162@173@165@160@164@166@170@146@165@157@163@167@154@159@153@114@113@164@157@167@171@149@156@151@110@114@154@168@147@172@156@168@171@114@104@109@100@161@170@146@172@157@163@168@119@116@151@156@150@165@166@153@164@114@109@106@104@110@109@100@151@160@152@163@165@153@164@111@113@155@159@148@166@166@149@160@152@173@157@152@115@105@107@101@112@104@106@110@95@153@153@150@162@166@156@161@150@169@161@149@115@116@158@148@165@157@143@163@171@156@153@166@115@104@106@103@108@105@107@105@104@111@109@100@155@153@164@154@150@163@170@149@154@170@117@111@167@170@148@153@171@151@162@163@115@104@106@105@106@100@102@104@96@108@98@103@101@105@107@103@105@100@108@101@102@105@109@107@108@107@99@112@104@167@166@152@154@169@151@162@167@114@113@162@145@175@144@169@157@165@156@115@105@100@105@103@98@104@109@96@105@106@80@101@106@114@104@102@111@105@104@112@103@164@150@171@143@170@154@162@153@118@115@150@164@163@173@159@169@118@104@97@104@104@108@99@154@165@163@169@163@171@118@112@171@168@150@166@165@169@111@101@112@103@170@169@152@168@173@164@115@116@156@171@172@170@145@167@152@168@149@166@150@164@171@114@179@101@178@145@171@104@174@113@99@157@175@169@169@149@171@144@165@153@169@148@165@171@110@112@104@165@153@167@168@152@159@153@118@112@100@165@155@175@158@164@163@166@170@148@164@153@171@164@150@159@156@113&sign=@106@154@147@150@154@155@153@150@151@157@106@103@153@101@110@107@150@104@103@150@104@155@152@154@109@109@158@101@109@111@156@99&md5Sign=c644c134144555807c228bd439f8264d</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">1.游戏收到3项数据后应校验签名是否正确:</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">计算md5(nt_data+sign+md5key)得到c644c134144555807c228bd439f8264d,与收到的md5Sign一致,则签名通过.</span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">2.按照附录1解密nt_data得到如下xml:</span>
</p>
<pre class="brush:xml;toolbar:false"><quicksdk_message>
<message>
<is_test>0</is_test>
<channel>8888</channel>
<channel_uid>231845</channel_uid>
<game_order>123456789</game_order>
<order_no>12520160612114220441168433</order_no>
<pay_time>2016-06-12 11:42:20</pay_time>
<amount>1.00</amount>
<status>0</status>
<extras_params>{1}_{2}</extras_params>
</message>
</quicksdk_message></pre>
<p style="white-space:normal;">
<br />
</p>
<p style="white-space:normal;">
<span style="line-height:3;"><strong><span style="color:#E53333;font-size:14px;">3.解密成功后,游戏按</span></strong><strong><span style="color:#E53333;font-size:14px;">照通知XML中的amount金额进行发放道具</span></strong></span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;"><strong><span style="color:#E53333;font-size:14px;"><br />
</span></strong></span>
</p>
<h3 style="white-space:normal;">
<span style="line-height:3;font-size:16px;">5.补单机制</span>
</h3>
<p style="white-space:normal;">
<span style="line-height:3;"><span style="font-size:14px;">游戏在接受到QuickSDK服务器通知后,应返回大写的SUCCESS,出于网络或某些原因,当QuickSDK不能正确收到发放道具接口响应时(返回不为SUCCESS)时,会以一定的机制再次补发请求。补发请求会在一段时间内持续进行.为了便于运营检查订单,游戏在返回失败时(非SUCCESS时),可以给出简明的错误提示.如:SignError、AmountError。</span><span style="color:#E53333;font-size:14px;"><strong>需要注意的是,当游戏积累大量错误返回,系统将降低此游戏的补单频率,游戏开发者需正确开发发放道具接口</strong></span><span style="font-size:14px;">。</span></span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;"><span style="font-size:14px;"><br />
</span></span>
</p>
<h3 style="white-space:normal;">
<span style="font-size:16px;line-height:3;">6.附录1</span>
</h3>
<h4 style="white-space:normal;">
<span style="font-size:14px;line-height:3;">6.1 加密算法伪码描述:</span>
</h4>
<p style="white-space:normal;">
<br />
</p>
<pre class="brush:cpp;toolbar:false">public static String encode(String src,String key) {
try {
byte[] data = src.getBytes(charset);
byte[] keys = key.getBytes();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < data.length; i++) { int n <span style="font-size:14px;"></span>= (0xff & data[i]) + (0xff & keys[i % keys.length]); sb.append("@" + n); } return sb.toString(); }catch (UnsupportedEncodingException e){ e.printStackTrace(); } return src; }</pre>
<p style="white-space:normal;">
<br />
</p>
<h4 style="white-space:normal;">
<span style="font-size:14px;line-height:3;">6.2 解码算法伪码描述:</span>
</h4>
<p style="white-space:normal;">
<br />
</p>
<pre class="brush:cpp;toolbar:false">public static String decode(String src,String key) {
if(src == null || src.length() == 0){
return src;
}
Matcher m = pattern.matcher(src);
List list = new ArrayList();
while (m.find()) {
try {
String group <span style="font-size:14px;"></span>= m.group();
list.add(Integer.valueOf(group));
} catch (Exception e) {
e.printStackTrace();
return src;
}
}
if (list.size() > 0) {
try {
byte[] data = new byte[list.size()];
byte[] keys = key.getBytes();
for (int i = 0; i < data.length; i++) { data[i] = (byte) (list.get(i) - (0xff & keys[i % keys.length])); } return new String(data, charset); } catch (UnsupportedEncodingException e){ e.printStackTrace(); } return src; } else { return src; } }</pre>
<p style="white-space:normal;">
<br />
</p>
<h4 style="white-space:normal;">
<span style="font-size:14px;line-height:3;">6.3 key说明</span>
</h4>
<p style="white-space:normal;">
<span style="line-height:3;font-size:14px;">加密解密所需的key,为接入游戏时,QuickSDK与游戏双方约定好的callbackkey。这个值通过QuickSDK控制台获取,【登录www.quicksdk.com】→选择【对应产品】→点击【参数配置】获取。</span>
</p>
<p style="white-space:normal;">
<br />
</p>
<h4 style="white-space:normal;">
<span style="font-size:14px;line-height:3;">6.4 服务端资源下载说明</span>
</h4>
<p style="white-space:normal;">
<span style="line-height:3;"><span style="font-size:14px;">在官网的<a href="https://www.quicksdk.com/download.html" target="_blank"><u>下载中心</u></a>可获取</span><span style="color:#000000;font-size:14px;">服务端解密示例【QuickSDK For 服务器类库】</span><span style="font-size:14px;">,其中包含C#、C++、Java、PHP等示例Demo</span></span>
</p>
<p style="white-space:normal;">
<span style="line-height:3;"><span style="font-size:14px;"><br />
</span></span>
</p>
<h3 style="white-space:normal;">
<span style="line-height:3;"><span style="font-size:14px;">7. FQA</span></span>
</h3>
<p style="white-space:normal;">
<span style="line-height:3;"><span style="font-size:14px;">Q:通知游戏显示“请求超时”要怎么处理?<br />
A:<br />
1.检查配置的游戏支付回调地址是否正确,前后是否有空格,能不能正常访问<br />
2.回调地址如没有问题,就是游戏响应不及时,需要在5S内进行返回<br />
3.如果游戏返回是及时的,则检査下游戏回调接口是否支持100-continue应答<br />
由于QuicksDK采用了ibcur封装接口来对游戏回调地址进行htp清求,另外我们的回调业务数据较多且是采用了对称加密算法,于是出现了请求body超过了1024字节,此时则会触发一<br />
个HTTP/1.1协议里的"Expect:100-continue",具体流程如下:<br />
a. 发送一个请求,包含一个"Expect:100-continue" 头域,询问Server是否愿意接收数据<br />
b. 接收到Server返回的100-continue 应答以后,才把数据POST给Server<br />
由于部分CP在实现回调服务Websener的时候采用了node或者C++或者Soin9等框架,它们默认是不支持100-contiue应答的,所以通常会表现为请求超时,CP自己模拟请求又能收<br />
到数据,要解决此问题需要游戏回调接口支持下100-continue应答<br />
<br />
</span></span>
</p>
<p style="white-space:normal;">
<br />
</p>