海心下游对接接口文档


获卡接口

<h5>简要描述</h5> <ul> <li>下游在收到回调通知,或者主动查询code为200时,调此接口获取卡券信息。卡券信息采用的是AES(ECB/PKCS5Padding)对称加密算法&lt;font color=LightCoral &gt;(解密的key为提单时签名用的key的前16位字符)&lt;/font&gt;</li> </ul> <h5>请求URL</h5> <ul> <li><code>http://ip:port/cardOrder/getCardInfos</code></li> </ul> <h5>请求方式</h5> <ul> <li>POST </li> <li>application/json;charset=UTF-8 </li> </ul> <h5>请求参数说明</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;">requestId</td> <td style="text-align: left;">是</td> <td style="text-align: left;">string</td> <td>商户订单id</td> </tr> <tr> <td style="text-align: left;">userId</td> <td style="text-align: left;">是</td> <td style="text-align: left;">Long</td> <td>商户id</td> </tr> <tr> <td style="text-align: left;">lastIdIndex</td> <td style="text-align: left;">是</td> <td style="text-align: left;">int</td> <td>上一批获取的卡券最大卡券编号(结果不包含此id),如果是第一批则传0</td> </tr> <tr> <td style="text-align: left;">size</td> <td style="text-align: left;">是</td> <td style="text-align: left;">int</td> <td>获取的数量,最大500</td> </tr> <tr> <td style="text-align: left;">sign</td> <td style="text-align: left;">是</td> <td style="text-align: left;">String</td> <td>签名,MD5(userId + key + requestId + lastIdIndex + size)</td> </tr> </tbody> </table> <ul> <li>备注:假设卡券有1000个,size传500,需要分两批传,第一批lastIdIndex传0,获取卡券后,取得当前批最大卡券的卡券编号cardProductDetailId作为lastIdIndex再次请求接口即可完成分批取卡。 <h5>请求示例</h5></li> </ul> <pre><code>{     &amp;quot;requestId&amp;quot;:&amp;quot;1689289555338989568&amp;quot;,     &amp;quot;size&amp;quot;:100,     &amp;quot;lastIdIndex&amp;quot;: 619,     &amp;quot;sign&amp;quot;:&amp;quot;d590e84633a92f8a856d35a51bc10cfe&amp;quot;      }</code></pre> <h5>返回参数说明</h5> <table> <thead> <tr> <th style="text-align: left;">参数名</th> <th style="text-align: left;">类型</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">code</td> <td style="text-align: left;">Integer</td> <td>返回结果码,200表述请求成功</td> </tr> <tr> <td style="text-align: left;">msg</td> <td style="text-align: left;">String</td> <td>返回结果信息</td> </tr> <tr> <td style="text-align: left;">data</td> <td style="text-align: left;">Map</td> <td>数据集合,提单成功返回</td> </tr> <tr> <td style="text-align: left;">data. cardProductDetailId</td> <td style="text-align: left;">Long</td> <td>卡券编号</td> </tr> <tr> <td style="text-align: left;">data. batchId</td> <td style="text-align: left;">String</td> <td>批次号</td> </tr> <tr> <td style="text-align: left;">data. productId</td> <td style="text-align: left;">Long</td> <td>平台商品id</td> </tr> <tr> <td style="text-align: left;">data. productOperatorName</td> <td style="text-align: left;">String</td> <td>产品运营商</td> </tr> <tr> <td style="text-align: left;">data. faceValue</td> <td style="text-align: left;">String</td> <td>面值</td> </tr> <tr> <td style="text-align: left;">data. account</td> <td style="text-align: left;">String</td> <td>卡号(密文) ,可能为空</td> </tr> <tr> <td style="text-align: left;">data. accountKey</td> <td style="text-align: left;">String</td> <td>卡密(密文),可能为空</td> </tr> <tr> <td style="text-align: left;">data. link</td> <td style="text-align: left;">String</td> <td>链接(密文) ,可能为空</td> </tr> <tr> <td style="text-align: left;">data. validCode</td> <td style="text-align: left;">String</td> <td>验证码/激活码 (密文),可能为空</td> </tr> <tr> <td style="text-align: left;">data. enableEndTime</td> <td style="text-align: left;">String</td> <td>有效期,yyyy-MM-dd HH:mm:ss</td> </tr> </tbody> </table> <ul> <li>备注:卡号,卡密,链接,验证码只要返回不为空,即为组合关系。例如卡号和卡密不为空,其他为空则组合关系是卡号+卡密;链接和验证码不为空,其他为空则组合关系是链接+验证码,以次类推。&lt;font color=LightCoral &gt;当code返回200并且data为空时表示卡券已经获取完毕,可停止获取&lt;/font&gt; <h5>返回示例</h5></li> </ul> <pre><code>{     &amp;quot;code&amp;quot;: 200,     &amp;quot;msg&amp;quot;: &amp;quot;操作成功&amp;quot;,     &amp;quot;data&amp;quot;: [         {             &amp;quot;cardProductDetailId&amp;quot;: &amp;quot;620&amp;quot;,             &amp;quot;productOperatorName&amp;quot;: &amp;quot;网易云&amp;quot;,             &amp;quot;faceValue&amp;quot;: &amp;quot;10&amp;quot;,             &amp;quot;account&amp;quot;: &amp;quot;5tyobBaEWgYmAg2FUgXUkg==&amp;quot;,             &amp;quot;accountKey&amp;quot;: &amp;quot;EIPw+GjjeBwIg4jUYdslIA==&amp;quot;,             &amp;quot;batchId&amp;quot;: &amp;quot;1689289502985687040&amp;quot;         }     ],     &amp;quot;success&amp;quot;: true }</code></pre> <h5>数据加密与解密</h5> <p>卡券信息采用的是AES(ECB/PKCS5Padding)对称加密算法&lt;font color=LightCoral &gt;(解密的key为提单时签名用的key的前16位字符)&lt;/font&gt;,加密/解密代码段(JAVA版)如下:</p> <pre><code class="language-java"> /** * AES加密 * @param data * @return * @throws Exception */ public static String encrypt(String data, String keyStr) throws Exception { Cipher cipher = Cipher.getInstance(&amp;quot;AES/ECB/PKCS5Padding&amp;quot;); SecretKeySpec key = new SecretKeySpec(keyStr.getBytes(&amp;quot;UTF-8&amp;quot;), &amp;quot;AES&amp;quot;); cipher.init(1, key); return (new BASE64Encoder()).encode(cipher.doFinal(data.getBytes(&amp;quot;UTF-8&amp;quot;))); } /** * AES解密 * @param data * @return * @throws Exception */ public static String decrypt(String base64Data, String keyStr) throws Exception { Cipher cipher = Cipher.getInstance(&amp;quot;AES/ECB/PKCS5Padding&amp;quot;); SecretKeySpec key = new SecretKeySpec(keyStr.getBytes(&amp;quot;UTF-8&amp;quot;), &amp;quot;AES&amp;quot;); cipher.init(2, key); return new String(cipher.doFinal((new BASE64Decoder()).decodeBuffer(base64Data))); }</code></pre> <ul> <li>错误码</li> </ul> <table> <thead> <tr> <th style="text-align: left;">错误码</th> <th style="text-align: left;">注释</th> </tr> </thead> <tbody> <tr> <td style="text-align: left;">200</td> <td style="text-align: left;">请求成功</td> </tr> <tr> <td style="text-align: left;">400</td> <td style="text-align: left;">参数错误</td> </tr> <tr> <td style="text-align: left;">412</td> <td style="text-align: left;">白名单校验失败</td> </tr> <tr> <td style="text-align: left;">420</td> <td style="text-align: left;">订单不存在</td> </tr> <tr> <td style="text-align: left;">422</td> <td style="text-align: left;">验签失败(请检查加签参数与顺序是否正确)</td> </tr> <tr> <td style="text-align: left;">424</td> <td style="text-align: left;">订单当前状态不可取卡</td> </tr> <tr> <td style="text-align: left;">500</td> <td style="text-align: left;">服务异常(请检查请求方式,参数格式,类型是否正确)</td> </tr> </tbody> </table> <ul> <li>备注:无</li> </ul>

页面列表

ITEM_HTML