充值回调
<h6>支付完成,SDK以GET形式将以下参数传递至游戏发货地址:</h6>
<table>
<thead>
<tr>
<th style="text-align: left;">字段名</th>
<th style="text-align: left;">字段类型</th>
<th style="text-align: left;">字段内容</th>
<th style="text-align: left;">字段详细说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">uid</td>
<td style="text-align: left;">字符串</td>
<td style="text-align: left;">用户身份标识</td>
<td style="text-align: left;">一般由渠道给出的唯一身份标识,该字段CP需要映射至角色标识上。</td>
</tr>
<tr>
<td style="text-align: left;">appid</td>
<td style="text-align: left;">字符串</td>
<td style="text-align: left;">APPID</td>
<td style="text-align: left;">该ID由独角兽在游戏接入前分配,是游戏的唯一标识</td>
</tr>
<tr>
<td style="text-align: left;">rmb</td>
<td style="text-align: left;">数字</td>
<td style="text-align: left;">付费金额</td>
<td style="text-align: left;">用户真实的付费金额,单位为人名币(元)。</td>
</tr>
<tr>
<td style="text-align: left;">channel</td>
<td style="text-align: left;">字符串</td>
<td style="text-align: left;">渠道标识</td>
<td style="text-align: left;">用户所在渠道的标示,需要对渠道区分统计和订单统计时可供调用。【渠道标识与渠道名称对应详见】</td>
</tr>
<tr>
<td style="text-align: left;">wareid</td>
<td style="text-align: left;">数字</td>
<td style="text-align: left;">商品ID</td>
<td style="text-align: left;">游戏商品ID</td>
</tr>
<tr>
<td style="text-align: left;">trans_id</td>
<td style="text-align: left;">字符串</td>
<td style="text-align: left;">渠道支付订单号</td>
<td style="text-align: left;">支付平台提供的订单号。</td>
</tr>
<tr>
<td style="text-align: left;">notify_id</td>
<td style="text-align: left;">字符串</td>
<td style="text-align: left;">通知ID</td>
<td style="text-align: left;">渠道通知id,CP通过notify_id查询订单是否付费成功</td>
</tr>
<tr>
<td style="text-align: left;">userdata</td>
<td style="text-align: left;">字符串</td>
<td style="text-align: left;">用户信息</td>
<td style="text-align: left;">透传参数, CP在支付接口调用时自定义传递的用户信息</td>
</tr>
<tr>
<td style="text-align: left;">txid</td>
<td style="text-align: left;">字符串</td>
<td style="text-align: left;">商品订单号</td>
<td style="text-align: left;">CP在支付接口调用时自定义传递的商品订单号。</td>
</tr>
<tr>
<td style="text-align: left;">sign</td>
<td style="text-align: left;">字符串</td>
<td style="text-align: left;">数字签名</td>
<td style="text-align: left;">签名值sign是将请求源串以及密钥根据一定签名方法生成的签名值,用来提高传输过程参数的防篡改性。CP收到请求后可以匹配根据算法算出来的sign,比对参数中的sign,作为安全保证。(签名方法见附录)</td>
</tr>
</tbody>
</table>
<h6>1. 支付完成,SDK以GET形式将以下参数传递至游戏发货地址:</h6>
<h6>2. 发货成功请直接返回:“SUCCESS”(不包含引号,并且全部为大写字母)。</h6>
<h6>3. 如果该笔订单为重复发货也请返回“SUCCESS”。</h6>
<h1>一、通用返回值</h1>
<h3>接口返回字段约定:</h3>
<table>
<thead>
<tr>
<th style="text-align: left;">返回值类型</th>
<th style="text-align: left;">字段类型</th>
<th style="text-align: left;">返回值说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">小于 -10000</td>
<td style="text-align: left;">自定义系统错误</td>
<td style="text-align: left;">给予接口自定义系统错误的返回码区间。</td>
</tr>
<tr>
<td style="text-align: left;">-1</td>
<td style="text-align: left;">未知的系统错误</td>
<td style="text-align: left;">无法确定的问题出现时统一返回码。</td>
</tr>
<tr>
<td style="text-align: left;">0</td>
<td style="text-align: left;">成功</td>
<td style="text-align: left;">接口获取、调用成功时的返回码。</td>
</tr>
<tr>
<td style="text-align: left;">1</td>
<td style="text-align: left;">时间戳过期</td>
<td style="text-align: left;">提交的timestamp已经过期。(5分钟)</td>
</tr>
<tr>
<td style="text-align: left;">2</td>
<td style="text-align: left;">无效签名</td>
<td style="text-align: left;">Sign传值错误</td>
</tr>
<tr>
<td style="text-align: left;">3</td>
<td style="text-align: left;">验证安全秘钥错误</td>
<td style="text-align: left;">Pkey传值错误</td>
</tr>
<tr>
<td style="text-align: left;">4</td>
<td style="text-align: left;">参数传递错误</td>
<td style="text-align: left;">传参中有类型错误或者没有传参</td>
</tr>
<tr>
<td style="text-align: left;">大于10000</td>
<td style="text-align: left;">自定义逻辑错误</td>
<td style="text-align: left;">给予接口自定义逻辑错误的返回码区间。</td>
</tr>
<tr>
<td style="text-align: left;">10001</td>
<td style="text-align: left;">登录错误</td>
<td style="text-align: left;">未登录或者登录超时</td>
</tr>
</tbody>
</table>
<h3>二、充值回调sign生成规则</h3>
<h4>在请求url参数列表中,除去sign参数外,其他需要使用到的参数皆是要签名的参数。举例对于如下的参数数组:(该业务Appid为:LQ3CxWkVVcQIC)</h4>
<ul>
<li><code>http://test.game.com/interface?cmd=10021&timestamp=1478856861&sign=8AA8DF01BD786AB1E1D051B3DFA50AD5&pkey=20d7982dbd1aabc55abf9a762b812c49&openid=FA3049638D0745D0C5C14BF551550746</code></li>
</ul>
<h6>即:</h6>
<pre><code> parameters = {
"cmd"=10021,
"timestamp"=1478856861
"pkey"="20d7982dbd1aabc55abf9a762b812c49",
"openid"="FA3049638D0745D0C5C14BF551550746"
};</code></pre>
<h5>对数组里的每一个值从a到z的顺序排序,若遇到相同首字母,则看第二个字母,以此类推。 排序完成之后,再把所有数组值以“&”字符连接起来,如面这个参数数组生成请求如下 :</h5>
<ul>
<li><code>cmd=10021&openid=FA3049638D0745D0C5C14BF551550746&pkey=20d7982dbd1aabc55abf9a762b812c49&timestamp=1478856861</code></li>
</ul>
<h5>以上这串字符串便是待签名字符串。当拿到请求时的待签名字符串后,需要把“key=业务秘钥”这个参数拼接到待签名字符串后面,形成新的字符串,示例如下:(该业务secretKey为:0BvUCyWW3gbWIitR)</h5>
<ul>
<li><code>cmd=10021&openid=FA3049638D0745D0C5C14BF551550746&pkey=20d7982dbd1aabc55abf9a762b812c49&timestamp=1478856861&key=0BvUCyWW3gbWIitR</code></li>
</ul>
<h5>利用MD5的签名函数对这个新的字符串进行签名运算,再转成大写字母,从而得到32位签名结果字符串(该字符串赋值于参数sign)。</h5>
<ul>
<li><code>strtoupper(md5("cmd=10021&openid=FA3049638D0745D0C5C14BF551550746&pkey=20d7982dbd1aabc55abf9a762b812c49&timestamp=1478856861&key=0BvUCyWW3gbWIitR")</code></li>
</ul>
<h5>以上的例子得出的结果是:</h5>
<ul>
<li><code>8AA8DF01BD786AB1E1D051B3DFA50AD5</code></li>
</ul>