综合开放平台

open platform


1. 开发前必读 - 如何进行签名

<p>[TOC]</p> <h1>如何进行签名</h1> <h2>签名算法逻辑</h2> <h3>第一步</h3> <pre><code> 设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用以下格式拼接成字符串</code></pre> <pre><code> key1value1key2value2...</code></pre> <p>特别注意以下重要规则:</p> <pre><code> 参数名ASCII码从小到大排序(字典序); 如果参数的值为空不参与签名; 参数名区分大小写; 传送的sign参数不参与签名;</code></pre> <h3>第二步</h3> <pre><code> 在字符串最后拼接上secret密钥得到stringSignTemp字符串</code></pre> <h3>第三步</h3> <pre><code> 对stringSignTemp进行MD5加密得到signValue</code></pre> <h2>前端生成签名</h2> <pre><code>// npm install crypto-js import MD5 from 'crypto-js/md5'; function genSign(params) { // 密钥 const secret = 'xxxxxxxxxxxxxxxxxxxxxxx' // 1O位时间戳 const timestampStr = parseInt(new Date().getTime() / 1000).toString() params.timestamp = timestampStr // 取 key const sortedKeys = [] for (const key in params) { // 注意这里,要剔除掉 sign 参数本身 if (key !== 'sign') { sortedKeys.push(key) } } // 参数名 ASCII 码从小到大排序(字典序) sortedKeys.sort() // 1 拼接参数 let str = '' sortedKeys.forEach(key =&amp;gt; { str += key + params[key] }) // 2 拼接密钥 str += secret // 3 MD5加密 params.sign = MD5(str).toString().toUpperCase() } export default genSign</code></pre> <h2>后端生成签名</h2> <pre><code>import org.apache.commons.codec.binary.Hex; import java.security.MessageDigest; @Slf4j public class SignUtil { private static final String SECRET = &amp;quot;xxxxxxxxxxxxxxxxxxxxxxxxxx&amp;quot;; private static final String SIGN = &amp;quot;sign&amp;quot;; private static final String TIMESTAMP = &amp;quot;timestamp&amp;quot;; //签名 public static String genSign(TreeMap&amp;lt;String, Object&amp;gt; params) { params.remove(SIGN); StringBuilder str = new StringBuilder(); for (String key : params.keySet()) { Object val = params.get(key); if (ObjectUtil.isNotNull(val)) { // 1 拼接参数 str.append(key).append(val); } } // 2 拼接秘钥 str.append(SECRET); // 3 MD5加密 return md5(str.toString()); } public static String md5(String source) { String md5Result = null; try { byte[] hash = org.apache.commons.codec.binary.StringUtils.getBytesUtf8(source); MessageDigest messageDigest = MessageDigest.getInstance(&amp;quot;MD5&amp;quot;); messageDigest.update(hash); hash = messageDigest.digest(); md5Result = Hex.encodeHexString(hash); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return md5Result; } } </code></pre>

页面列表

ITEM_HTML