支付回调接口
<p>[TOC]</p>
<h5>简要描述</h5>
<ul>
<li>支付回调接口
请求方为SDK 服务器,响应方为CP服务器。
用户在游戏中提交购买请求后,游戏平台会异步执行充值购买,在购买操作完成后,游戏平台通过该接口将充值结果发送给“游戏服务器”。
此处定义本接口的规范,游戏合作商需根据此规范在“游戏服务器”实现本接口。</li>
</ul>
<h5>请求地址</h5>
<ul>
<li><code>即充值结果通知地址,由CP提供。游戏接入时,录入到的游戏平台中。</code></li>
</ul>
<h5>请求方</h5>
<ul>
<li><code>SDK 服务器</code></li>
</ul>
<h5>响应方</h5>
<ul>
<li><code>游戏服务器</code></li>
</ul>
<h5>请求方式</h5>
<ul>
<li><code>http post</code> </li>
</ul>
<h5>请求参数(json utf-8格式)</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">order_id</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>订单号</td>
</tr>
<tr>
<td style="text-align: left;">mem_id</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>玩家ID</td>
</tr>
<tr>
<td style="text-align: left;">app_id</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>游戏ID</td>
</tr>
<tr>
<td style="text-align: left;">money</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>充值金额 (单位:元)</td>
</tr>
<tr>
<td style="text-align: left;">order_status</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>1 未支付 2成功支付 3支付失败</td>
</tr>
<tr>
<td style="text-align: left;">paytime</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>时间戳, Unix timestamp</td>
</tr>
<tr>
<td style="text-align: left;">attach</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>CP扩展参数,建议为英文与数字,CP用于校验此订单合法性</td>
</tr>
<tr>
<td style="text-align: left;">sign</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>使用APP_KEY 对所有的参数md5加密串,用于与接口生成的验证串做比较,保证计费通知的合法性。</td>
</tr>
</tbody>
</table>
<h5>请求示例</h5>
<pre><code> {
&quot;order_id&quot;:&quot;1465718712348234627&quot;,
&quot;mem_id&quot;:&quot;24627&quot;,
&quot;app_id&quot;: &quot;1&quot;,
&quot;money&quot;: &quot;1.00&quot;,
&quot;order_status&quot;: &quot;1&quot;,
&quot;paytime&quot;:&quot;1465718712&quot;,
&quot;attach&quot;:&quot; attach &quot;,
&quot;sign&quot;:&quot;51295343ac734a32e1ef0196c2e82870&quot;
}</code></pre>
<pre><code>假定apiKey=901f6984e638c2f96ef48675b6a32a73
sign 的签名规则:
md5(order_id=...&amp;mem_id=...&amp;app_id=...&amp;money=...&amp;order_status=...&amp;paytime=...&amp;attach=...&amp;app_key=901f6984e638c2f96ef48675b6a32a73s)
(替换...为实际值)
签名原文:
order_id=1465718712348234627&amp;mem_id=24627&amp;app_id=1&amp;money=1.00&amp;order_status=1&amp;paytime=1465718712&amp;attach=attach
MD5 加密:
echo -n 'order_id=1465718712348234627&amp;mem_id=24627&amp;app_id=1&amp;money=1.00&amp;order_status=1&amp;paytime=1465718712&amp;attach=attach&amp;app_key=901f6984e638c2f96ef48675b6a32a73'|md5sum
加密结果:51295343ac734a32e1ef0196c2e82870</code></pre>
<h5>返回参数说明</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">响应内容</th>
<th>响应内容描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">SUCCESS</td>
<td>成功,表示游戏服务器成功接收了该次充值结果通知,校验签名,订单,金额等都没问题。</td>
</tr>
<tr>
<td style="text-align: left;">FAILURE</td>
<td>失败,表示游戏服务器无法接收或识别该次充值结果通知,如:签名检验不正确、游戏服务器接收失败</td>
</tr>
</tbody>
</table>
<h5>备注</h5>
<ol>
<li>通知机制<br />
充值操作完成后,“SDK 服务器”会将充值结果通过“充值结果回调接口”发送到“游戏服务器”。“游戏服务器”收到“SDK 服务器”的充值通知后,根据处理结果返回字符串SUCCESS 或FAILURE。如果返回SUCCESS,则“SDK服务器”结束通知任务;如果返回FAILURE 或由于网络延时导致“SDK 服务器”没有收到任何返回,SDK 服务器将会在周期内进行重复通知;“游戏服务器”应判断订单是否已发货,已发货订单应不再发货</li>
</ol>
<h5>注意</h5>
<p>1.平台方只对充值成功的订单进行通知。
2.平台方可能对某个订单重复通知,请勿重复处理;对已经成功处理的订单返回 ”SUCCESS” 避免重复通知。
3.CP在接收到运营方的通知后,在验证签名的基础上还需要对money参数进行确认,支付金额是否对应订单的实际金额,防止以较少金额购买游戏货币;
4.已经给用户发放过的游戏币订单也请返回成功,但是不要重复给用户发放游戏币。(平台会对成功的订单校验是否成功,可能出现重复回调情况)</p>