易帅捷付

易帅捷付安全发


签名说明和公共参数说明

<h2><strong>Java代码示例</strong></h2> <pre><code>/** base64 * 加密 * @param str * @return * @throws UnsupportedEncodingException */ public String Base64Encode(String str) throws UnsupportedEncodingException { return new String((new Base64()).encode(str.getBytes()), &amp;quot;UTF-8&amp;quot;); } /** base64 * 解密 */ public String Base64Decode(String str) throws UnsupportedEncodingException, IOException { return new String((new Base64()).decode(str), &amp;quot;UTF-8&amp;quot;); } /** * 生成签名 * 构建待签名字符串: * 将所有签名参数按照一定规则(如字典序)进行排序。 * 将排序后的参数按照“key=value”的格式拼接成一个字符串,参数之间用“&amp;amp;”符号连接。 * 例如:appid=xxx&amp;amp;appkey=yyy&amp;amp;timestamp=zzz&amp;amp;param1=value1&amp;amp;param2=value2。 * 生成签名: * 使用哈希算法(如SHA-256对待签名字符串进行加密处理。 * 将加密后的结果作为签名。 */ @SuppressWarnings(&amp;quot;all&amp;quot;) public String generateSignature(String appKey,Map&amp;lt;String, Object&amp;gt; params) throws NoSuchAlgorithmException { // 构建待签名字符串 StringBuilder sb = new StringBuilder(); TreeMap&amp;lt;String, Object&amp;gt; sortedParams = new TreeMap&amp;lt;&amp;gt;(params); sortedParams.put(&amp;quot;appKey&amp;quot;, appKey); System.out.println(JSONUtil.parseObj(sortedParams)); for (Map.Entry&amp;lt;String, Object&amp;gt; entry : sortedParams.entrySet()) { sb.append(entry.getKey()).append(&amp;quot;=&amp;quot;).append(entry.getValue()).append(&amp;quot;&amp;amp;&amp;quot;); } // 去除最后一个&amp;#039;&amp;amp;&amp;#039;字符 String unsignedString = sb.toString().substring(0, sb.length() - 1); // 使用SHA-256算法生成签名 MessageDigest digest = MessageDigest.getInstance(&amp;quot;SHA-256&amp;quot;); byte[] hashBytes = digest.digest(unsignedString.getBytes()); // 将字节数组转换为十六进制字符串 StringBuilder hashString = new StringBuilder(); for (byte b : hashBytes) { hashString.append(String.format(&amp;quot;%02x&amp;quot;, b)); } return hashString.toString(); } /** * 请求手续费余额示例 * @throws NoSuchAlgorithmException * @throws IOException */ @Test public void t1() throws NoSuchAlgorithmException, IOException { // 示例参数 Map&amp;lt;String, Object&amp;gt; params = new TreeMap&amp;lt;&amp;gt;(); params.put(&amp;quot;appId&amp;quot;, &amp;quot;202412061144571005&amp;quot;); //appId params.put(&amp;quot;clientTransId&amp;quot;, &amp;quot;12313131&amp;quot;); //外部请求号 String timestamp = String.valueOf(System.currentTimeMillis()); // 获取当前时间戳 params.put(&amp;quot;timestamp&amp;quot;, timestamp);//时间戳误差不能在三分钟之外 //业务参数 JSONObject params1=new JSONObject(); params1.put(&amp;quot;clientTransId&amp;quot;,&amp;quot;12313131&amp;quot;); String s = this.Base64Encode(params1.toString()); params.put(&amp;quot;data&amp;quot;,s); // 生成签名 生成签名需要加appKey 外部不用传此参数 String signature = generateSignature(&amp;quot;2a920199b90f4cecb71d4ef6c7179b57&amp;quot;,params); params.put(&amp;quot;sign&amp;quot;,signature); JSONObject entries = JSONUtil.parseObj(params); System.out.println(entries); //发送请求 String post = HttpUtil.post(&amp;quot;http://127.0.0.1:8081/zfb-apiV2/commission&amp;quot;, entries.toString()); System.out.println(post); JSONObject entries1 = JSONUtil.parseObj(post); String data = entries1.getStr(&amp;quot;data&amp;quot;); String s1 = this.Base64Decode(data); System.out.println(s1); System.out.println(post); // 输出签名 System.out.println(&amp;quot;Generated Signature: &amp;quot; + signature); }</code></pre> <h3>PHP代码示例</h3> <p>```&lt;?php</p> <p>/**</p> <ul> <li>Base64编码</li> <li>@param string $str</li> <li>@return string */ function base64Encode($str) { return base64_encode($str); }</li> </ul> <p>/**</p> <ul> <li>Base64解码</li> <li>@param string $str</li> <li>@return string */ function base64Decode($str) { return base64_decode($str); }</li> </ul> <p>/**</p> <ul> <li>生成签名</li> <li>@param string $appKey</li> <li>@param array $params</li> <li>@return string</li> <li> <p>@throws Exception */ function generateSignature($appKey, $params) { // 构建待签名字符串 ksort($params); $params[&#039;appKey&#039;] = $appKey;</p> <p>$unsignedString = &#039;&#039;; foreach ($params as $key =&gt; $value) { $unsignedString .= $key . &#039;=&#039; . urlencode($value) . &#039;&amp;&#039;; } // 去除最后一个&#039;&amp;&#039;字符 $unsignedString = rtrim($unsignedString, &#039;&amp;&#039;);</p> <p>// 使用SHA-256算法生成签名 $hashBytes = hash(&#039;sha256&#039;, $unsignedString, true); // 将字节数组转换为十六进制字符串 $hashString = &#039;&#039;; foreach ($hashBytes as $b) { $hashString .= sprintf(&#039;%02x&#039;, $b); } return $hashString; }</p> </li> </ul> <p>/**</p> <ul> <li>请求手续费余额示例</li> <li> <p>@throws Exception */ function t1() { // 示例参数 $params = []; $params[&#039;appId&#039;] = &#039;202412061144571005&#039;; // appId $params[&#039;clientTransId&#039;] = &#039;12313131&#039;; // 外部请求号 $timestamp = time(); // 获取当前时间戳(秒级) $params[&#039;timestamp&#039;] = $timestamp; // 时间戳误差不能在三分钟之外(这里用的是秒级时间戳,根据需求可能需要转换为毫秒级)</p> <p>// 业务参数 $params1 = [&#039;clientTransId&#039; =&gt; &#039;12313131&#039;]; $params[&#039;data&#039;] = base64Encode(json_encode($params1));</p> <p>// 生成签名(生成签名需要加appKey,外部不用传此参数) $signature = generateSignature(&#039;2a920199b90f4cecb71d4ef6c7179b57&#039;, $params); $params[&#039;sign&#039;] = $signature;</p> <p>// 将参数转换为JSON字符串(注意:这里是为了演示,实际发送HTTP请求时可能需要以其他方式格式化参数) $entries = json_encode($params); echo &quot;Params: \n&quot; . $entries . &quot;\n&quot;;</p> <p>// 发送请求(这里使用cURL作为示例) $url = &#039;<a href="http://127.0.0.1:8081/zfb-apiV2/commission&#039">http://127.0.0.1:8081/zfb-apiV2/commission&#039</a>;; $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $entries); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch);</p> <p>echo &quot;Response: \n&quot; . $response . &quot;\n&quot;;</p> <p>// 解析响应中的data字段(假设它是Base64编码的) $jsonObject = json_decode($response, true); if (isset($jsonObject[&#039;data&#039;])) { $decodedData = base64Decode($jsonObject[&#039;data&#039;]); echo &quot;Decoded Data: \n&quot; . $decodedData . &quot;\n&quot;; }</p> <p>// 输出签名 echo &quot;Generated Signature: &quot; . $signature . &quot;\n&quot;; }</p> </li> </ul> <p>// 执行示例函数 t1();</p> <p>?&gt;</p> <pre><code> ### 公共参数说明 :::highlight orange 💡 appId 系统分配的appId &amp;lt;br&amp;gt; clientTransId 外部请求号 &amp;lt;br&amp;gt; timestamp 当前时间戳 误差不能超过3分钟 &amp;lt;br&amp;gt; sign 签名 将所有签名参数按照一定规则(如字典序)进行排序。将排序后的参数按照“key=value”的格式拼接成一个字符串,参数之间用“&amp;amp;”符号连接。使用哈希算法(如SHA-256对待签名字符串进行加密处理。 ::: ### data参数说明 :::highlight green 💡 所有的业务参数和clientTransId 先使用json格式包装然后在加密成base64 具体业务参数看接口文档。 ::: ### 公共返回参数 </code></pre> <p>{&quot;msg&quot;:&quot;操作成功&quot;,&quot;code&quot;:200,&quot;data&quot;:&quot;eyJiYWxhbmNlIjo5OS4yNCwiY2xpZW50VHJhbnNJZCI6IjEyMzEzMTMxIiwidGltZXN0YW1wIjoiMTczMzkxNjAzMzc0OCJ9&quot;} code=200代表成功 使用base64 解密data数据获得具体返回信息 </p> <pre><code></code></pre>

页面列表

ITEM_HTML