易帅捷付

易帅捷付安全发


回调说明

<hr /> <h4>为保证回调来源真实可靠 请您对 服务器ip 8.154.42.61 进行加白 除此之外全部拦截。我们系统会进行五次回调 如果五次都请求不同 将拉黑对应回调地址。 收到通知后记得返回 success 如果不返回会继续通知</h4> <hr /> <h3>记账本安全发银行卡转账回调</h3> <pre><code>//失败回调内容 { &amp;quot;biz_scene&amp;quot;: &amp;quot;ENTRUST_TRANSFER&amp;quot;, &amp;quot;action_type&amp;quot;: &amp;quot;FINISH&amp;quot;, &amp;quot;error_code&amp;quot;: &amp;quot;Ali_Err_111034&amp;quot;, &amp;quot;origin_interface&amp;quot;: &amp;quot;alipay.fund.trans.uni.transfer&amp;quot;, &amp;quot;out_biz_no&amp;quot;: &amp;quot;zfbe99caef3fc2f42ae828e7acb878247b1&amp;quot;, //转账接口成功后的订单号 &amp;quot;trans_amount&amp;quot;: &amp;quot;2000.00&amp;quot;, //金额 &amp;quot;product_code&amp;quot;: &amp;quot;SINGLE_TRANSFER_NO_PWD&amp;quot;, &amp;quot;fail_reason&amp;quot;: &amp;quot;该银行账户不存在&amp;quot;, //失败说明 只有失败才会有失败原因 &amp;quot;order_id&amp;quot;: &amp;quot;20240903110070xxxxxx43991537&amp;quot;, //支付宝订单号 &amp;quot;timestamp&amp;quot;: &amp;quot;1735442319605&amp;quot;, //时间戳 &amp;quot;sign&amp;quot;:&amp;quot;f6cf4f05605defea8589c828a85657a1be447d0709081a26b1f0629638caffae&amp;quot; ,//签名 &amp;quot;status&amp;quot;: &amp;quot;FAIL&amp;quot; //状态代表失败 } //成功回调内容 { &amp;quot;pay_date&amp;quot;: &amp;quot;2024-09-03 18:08:10&amp;quot;, //转账时间 &amp;quot;biz_scene&amp;quot;: &amp;quot;ENTRUST_TRANSFER&amp;quot;, &amp;quot;action_type&amp;quot;: &amp;quot;FINISH&amp;quot;, &amp;quot;pay_fund_order_id&amp;quot;: &amp;quot;20240903xxxxxxx067988330&amp;quot;,//支付宝交易号 &amp;quot;origin_interface&amp;quot;: &amp;quot;alipay.fund.trans.uni.transfer&amp;quot;, &amp;quot;out_biz_no&amp;quot;: &amp;quot;zfb8a32xxxxxxxeb7f6edee6&amp;quot;, //转账接口成功后的订单号 &amp;quot;trans_amount&amp;quot;: &amp;quot;100.00&amp;quot;, //转账金额 &amp;quot;product_code&amp;quot;: &amp;quot;SINGLE_TRANSFER_NO_PWD&amp;quot;, &amp;quot;order_id&amp;quot;: &amp;quot;2024xxxxxxxx60043754024&amp;quot;, //支付宝订单号 &amp;quot;timestamp&amp;quot;: &amp;quot;1735442319605&amp;quot;, //时间戳 &amp;quot;sign&amp;quot;:&amp;quot;f6cf4f05605defea8589c828a85657a1be447d0709081a26b1f0629638caffae&amp;quot;,//签名 &amp;quot;status&amp;quot;: &amp;quot;SUCCESS&amp;quot; //SUCCESS状态代表成功 DEALING 处理中(表示银行还在处理中) 处理中的订单也会回调 } ------</code></pre> <h3>记账本安全发支付宝转账回调</h3> <pre><code class="language-json"> { &amp;quot;code&amp;quot;: &amp;quot;10000&amp;quot;, &amp;quot;msg&amp;quot;: &amp;quot;Success&amp;quot;, &amp;quot;order_id&amp;quot;: &amp;quot;2024111112159884&amp;quot;, //支付宝订单号 &amp;quot;out_biz_no&amp;quot;: &amp;quot;n113131327536&amp;quot;, //第三方单号 &amp;quot;pay_fund_order_id&amp;quot;: &amp;quot;20241111112159884&amp;quot;, //支付宝交易号 &amp;quot;status&amp;quot;: &amp;quot;SUCCESS&amp;quot;, //状态 只有成功的会返回 失败的在结果直接通知了 &amp;quot;timestamp&amp;quot;: &amp;quot;1735442319605&amp;quot;, //时间戳 &amp;quot;sign&amp;quot;:&amp;quot;f6cf4f05605defea8589c828a85657a1be447d0709081a26b1f0629638caffae&amp;quot;,//签名 &amp;quot;trans_date&amp;quot;: &amp;quot;2024-12-29 20:26:25&amp;quot; //支付时间 }</code></pre> <h3>回调校验签名示例</h3> <pre><code class="language-java">//校验回调签名 @SuppressWarnings(&amp;quot;all&amp;quot;) @Test public void t1() throws NoSuchAlgorithmException, IOException { //回调的数据 JSONObject entries = JSONUtil.parseObj(callbackContent); String apiSign=entries.getStr(&amp;quot;sign&amp;quot;); entries.remove(&amp;quot;sign&amp;quot;); //移除签名 Map&amp;lt;String, Object&amp;gt; params = new TreeMap&amp;lt;&amp;gt;(); String sign = this.generateSignature( &amp;quot;您的appid&amp;quot;, &amp;quot;您的appkey&amp;quot; ,entries.getstr(&amp;quot;timestamp&amp;quot;) // 回调的时间戳 , entries.getstr(&amp;quot;out_biz_no&amp;quot;), // 回调的第三方单号 entries.toString(), params); if (sign.equals(apiSign)){ //业务逻辑处理 return &amp;quot;success&amp;quot;; //返回succes 不会在通知 返回其他的任何还会通知4次 } } /\*\* \* 生成签名 \* 构建待签名字符串: \* 将所有签名参数按照一定规则(如字典序)进行排序。 \* 将排序后的参数按照“key=value”的格式拼接成一个字符串,参数之间用“&amp;amp;”符号连接。 \* 例如:appid=xxx&amp;amp;appkey=yyy×tamp=zzz¶m1=value1¶m2=value2。 \* 生成签名: \* 使用哈希算法(如SHA-256对待签名字符串进行加密处理。 \* 将加密后的结果作为签名。 \*/ @SuppressWarnings(&amp;quot;all&amp;quot;) public static String generateSignature(String appId, String appKey, String timestamp, String clientTransId, String data, Map&amp;lt;String, Object&amp;gt; params) throws NoSuchAlgorithmException{ //转换为json JSONObject entries = JSONUtil.parseObj(data); //排序data数据 TreeMap&amp;lt;String, Object&amp;gt; sortedParams1 = new TreeMap&amp;lt;&amp;gt;(entries); //排序后转成json 并且转换成string JSONObject entries1 = JSONUtil.parseObj(sortedParams1); System.out.println(&amp;quot;sortedParams1:&amp;quot;+entries1); // 构建待签名字符串 StringBuilder sb = new StringBuilder(); TreeMap&amp;lt;String, Object&amp;gt; sortedParams = new TreeMap&amp;lt;&amp;gt;(params); sortedParams.put(&amp;quot;appId&amp;quot;, appId); sortedParams.put(&amp;quot;appKey&amp;quot;, appKey); sortedParams.put(&amp;quot;timestamp&amp;quot;, timestamp); sortedParams.put(&amp;quot;data&amp;quot;, entries1.toString()); sortedParams.put(&amp;quot;clientTransId&amp;quot;, clientTransId); 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(); }</code></pre>

页面列表

ITEM_HTML