珠江桥自研商城API接口文档


接口调用说明

<h1>API调用说明</h1> <pre><code>&amp;quot;请求地址&amp;quot;: https://prb.ecit.cc/web/index.php &amp;quot;签名密钥&amp;quot;: fd21dee2da528ee0577469e1c6b1536a &amp;quot;DES密钥&amp;quot;: 4MTU1KBG &amp;quot;应用ID&amp;quot;: 4</code></pre> <hr /> <h2>请求方式</h2> <p>采用HTTP标准的POST协议</p> <pre><code>一个完整的json格式请求/响应报文包含body节点(body采用DES加密详看下述 DES加密)。</code></pre> <h2>编码格式</h2> <p>UTF-8</p> <h2>公共参数说明</h2> <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;">r</td> <td style="text-align: left;">api/user/login</td> <td style="text-align: left;">请求接口地址</td> </tr> <tr> <td style="text-align: left;">_mall_id</td> <td style="text-align: left;">4</td> <td style="text-align: left;">应用ID</td> </tr> <tr> <td style="text-align: left;">timestamp</td> <td style="text-align: left;">2024-06-28 10:00:00</td> <td style="text-align: left;">请求时间</td> </tr> <tr> <td style="text-align: left;">sign</td> <td style="text-align: left;">374d95774f17c3e354e73f7aaf21b5ec</td> <td style="text-align: left;">签名</td> </tr> </tbody> </table> <h2>签名算法</h2> <p>验证签名步骤:</p> <ol> <li>获取json报文中的body部分</li> <li>对参数(timestamp+version+body+signkey)进行拼接</li> <li>拼接的参数进行MD5编码并转小写后进行签名比对验证</li> </ol> <p>Java签名组装示例代码:</p> <pre><code class="language-java">JSONObject json = JSONObject.fromObject(body); String mybody = json.getString(&amp;quot;body&amp;quot;); String sign = md5(timestamp+version+body+signkey).toLowerCase(); return sign;</code></pre> <h2>DES加密</h2> <pre><code>请求、响应报文的body部分采用DES加密后进行传输。</code></pre> <p>加密后示例:</p> <pre><code class="language-json">{ &amp;quot;timestamp&amp;quot;:&amp;quot;2024-06-28 10:00:00&amp;quot;, &amp;quot;version&amp;quot;:&amp;quot;1.0&amp;quot;, &amp;quot;sign&amp;quot;:&amp;quot;374d95774f17c3e354e73f7aaf21b5ec&amp;quot;, &amp;quot;body&amp;quot;:&amp;quot;RRRJJNGHELTYYYTTEWRKJJJKRKEWR==&amp;quot; }</code></pre> <p>DES加密代码实例 java版本</p> <pre><code class="language-java">package com.afreon.util; import java.io.IOException; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * Description 根据键值进行加密 * @param data * @param key 加密键byte数组 * @return * @throws Exception */ public static String encrypt(String data, String key) throws Exception { byte[] bt = encrypt(data.getBytes(&amp;quot;UTF-8&amp;quot;), key.getBytes(&amp;quot;UTF-8&amp;quot;)); String strs = new BASE64Encoder().encode(bt); return strs; } /** * Description 根据键值进行解密 * @param data * @param key 加密键byte数组 * @return * @throws IOException * @throws Exception */ public static String decrypt(String data, String key) throws Exception, Exception { if (data == null) return null; BASE64Decoder decoder = new BASE64Decoder(); byte[] buf = decoder.decodeBuffer(data); byte[] bt = decrypt(buf,key.getBytes(&amp;quot;UTF-8&amp;quot;)); return new String(bt, &amp;quot;UTF-8&amp;quot;); } /** * Description 根据键值进行加密 * @param data * @param key 加密键byte数组 * @return * @throws Exception */ private static byte[] encrypt(byte[] data, byte[] key) throws Exception { // 生成一个可信任的随机数源 SecureRandom sr = new SecureRandom(); // 从原始密钥数据创建DESKeySpec对象 DESKeySpec dks = new DESKeySpec(key); // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(&amp;quot;DES&amp;quot;); SecretKey securekey = keyFactory.generateSecret(dks); // Cipher对象实际完成加密操作 Cipher cipher = Cipher.getInstance(&amp;quot;DES&amp;quot;); // 用密钥初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE, securekey, sr); return cipher.doFinal(data); } /** * Description 根据键值进行解密 * @param data * @param key 加密键byte数组 * @return * @throws Exception */ private static byte[] decrypt(byte[] data, byte[] key) throws Exception { // 生成一个可信任的随机数源 SecureRandom sr = new SecureRandom(); // 从原始密钥数据创建DESKeySpec对象 DESKeySpec dks = new DESKeySpec(key); // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(&amp;quot;DES&amp;quot;); SecretKey securekey = keyFactory.generateSecret(dks); // Cipher对象实际完成解密操作 Cipher cipher = Cipher.getInstance(&amp;quot;DES&amp;quot;); // 用密钥初始化Cipher对象 cipher.init(Cipher.DECRYPT_MODE, securekey, sr); return cipher.doFinal(data); }</code></pre> <h2>接口返回码</h2> <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;">成功</td> <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;">系统相关</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;"></td> <td style="text-align: left;">1001</td> <td style="text-align: left;">报文解析失败</td> <td style="text-align: left;"></td> </tr> <tr> <td style="text-align: left;"></td> <td style="text-align: left;">1002</td> <td style="text-align: left;">签名错误</td> <td style="text-align: left;"></td> </tr> </tbody> </table>

页面列表

ITEM_HTML