一导通开放接口文档


【X】一导通签名说明

<p>[TOC]</p> <h1>一导通签名说明</h1> <h2>必传参数</h2> <ul> <li> <p>requestData: 入参数据内容(URl编码:UTF8)</p> </li> <li> <p>eBusinessID: 用户ID</p> </li> <li> <p>requestType: 请求指令类型</p> </li> <li> <p>dataSign: 数据内容签名(请求内容(未编码)+ApiKey)进行MD5 加密,然后Base64 编码,最后进行URL(utf-8)编码</p> </li> <li>dataType: 2(返回数据类型为json)</li> </ul> <p>注册后会生成对应会生成对应的用户ID 和APIKey,用户ID 相当于用户名,APIKey 相当于密码。</p> <h2>举例</h2> <ol> <li>假设</li> </ol> <p>RequestData (JSON)内容为: <code>{'OrderCode':'','ShipperCode':'SF','LogisticCode':'118954907573'}</code> 经过URL(UTF-8)编码的内容为: <code>%7B%27OrderCode%27%3A%27%27%2C%27ShipperCode%27%3A%27SF%27%2C%27LogisticCode%27%3A%27118954907573%27%7D</code> EBusinessID=1237100【示例ID,不可用来实际使用】 APIKey=56da2cf8-c8a2-44b2-b6fa-476cd7d1ba17【示例Key,不可用来实际使用】</p> <ol> <li>DataSign签名内容</li> </ol> <pre><code>{'OrderCode':'','ShipperCode':'SF','LogisticCode':'118954907573'}56da2cf8-c8a2-44b2-b6 fa-476cd7d1ba17</code></pre> <p>经过md5 和base64 后的内容就为: <code>OWFhM2I5N2ViM2U2MGRkMjc4YzU2NmVlZWI3ZDk0MmE=</code>, 在经过URL(UTF-8)编码的内容为: <code>OWFhM2I5N2ViM2U2MGRkMjc4YzU2NmVlZWI3ZDk0MmE%3D</code> 最终要发送的数据为: <code>RequestType=1002&amp;EBusinessID=1237100&amp;RequestData =%7b%27OrderCode%27%3a%27%27%2c%27ShipperCode%27%3a%27SF%27%2c% 27LogisticCode%27%3a%27118954907573%27%7d&amp;DataSign =OWFhM2I5N2ViM2U2MGRkMjc4YzU2NmVlZWI3ZDk0MmE%3d&amp;DataType=2</code></p> <ol> <li>接收方收到数据后,获得EBusinessID 和RequestData 和DataSign 等这几个数据。</li> <li>接收方对EBusinessID 得到APIKey,RequestData+APIKey 的数据进行md5 和base64 后的内容就为OWFhM2I5N2ViM2U2MGRkMjc4YzU2NmVlZWI3ZDk0MmE=</li> <li>接收方判断签名后的数据跟传递过来的DataSign 是否一致,如果一致进行业务操作,如果不一致返回错误。</li> </ol> <h3>签名示例代码</h3> <pre><code class="language-java">import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.security.MessageDigest; import java.util.HashMap; import java.util.Map; /** * @author: chenjunqin * @date: 2022/5/10 16:02 */ public class YiDaoTongSignDemo { public static void main(String[] args) throws Exception { // 组装应用级参数 String requestData = "{" + "'OrderCode':''," + "'ShipperCode':'SF'," + "'LogisticCode':'118954907573'" + "}"; String eBusinessID = "1237100"; String apiKey = "56da2cf8-c8a2-44b2-b6fa-476cd7d1ba17"; String requestType = "1002"; // 组装系统级参数 Map&lt;String, String&gt; params = new HashMap&lt;&gt;(); params.put("requestData", urlEncoder(requestData, "UTF-8")); // RequestData: %7B%27OrderCode%27%3A%27%27%2C%27ShipperCode%27%3A%27SF%27%2C%27LogisticCode%27%3A%27118954907573%27%7D params.put("eBusinessID", eBusinessID); params.put("requestType", requestType); String dataSign = encrypt(requestData, apiKey, "UTF-8"); // dataSign: OWFhM2I5N2ViM2U2MGRkMjc4YzU2NmVlZWI3ZDk0MmE= params.put("dataSign", urlEncoder(dataSign, "UTF-8")); // DataSign: OWFhM2I5N2ViM2U2MGRkMjc4YzU2NmVlZWI3ZDk0MmE%3D params.put("dataType", "2"); System.out.println(params); } private static String urlEncoder(String str, String charset) throws UnsupportedEncodingException { return URLEncoder.encode(str, charset); } private static String encrypt(String content, String keyValue, String charset) throws Exception { return base64(MD5(content + keyValue, charset), charset); } /** * MD5加密 * str 内容 * charset 编码方式 * * @throws Exception */ @SuppressWarnings("unused") private static String MD5(String str, String charset) throws Exception { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(str.getBytes(charset)); byte[] result = md.digest(); StringBuffer sb = new StringBuffer(32); for (int i = 0; i &lt; result.length; i++) { int val = result[i] &amp; 0xff; if (val &lt;= 0xf) { sb.append("0"); } sb.append(Integer.toHexString(val)); } return sb.toString().toLowerCase(); } /** * base64编码 * str 内容 * charset 编码方式 * * @throws UnsupportedEncodingException */ private static String base64(String str, String charset) throws UnsupportedEncodingException { return Base64.encode(str.getBytes(charset)); } }</code></pre>

页面列表

ITEM_HTML