import com.huifu.bspay.sdk.opps.client.BasePayClient; import com.huifu.bspay.sdk.opps.core.request.V2TradeCheckFilequeryRequest; import com.huifu.bspay.sdk.opps.core.utils.DateTools; import com.huifu.bspay.sdk.opps.core.utils.SequenceTools; import com.alibaba.fastjson.JSON; import java.util.Map; import java.util.HashMap; import java.util.Set; public class TestReconciliationDetail { public static void main(String[] args) { try { String privateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCcxAwrhZF+izz1gxQKOr4jnC05obIBHbl0DzHOcd4CaaDV7Kv1NRJKi33JhdDsW4JGgu16e5Rtzq1VzU5VWz5EKgGL46maOFwCkngJUTP/LC3JVf/wtJmYCm8xNE8C7GNNIqKzYEvUOEfXqagpVvVrGsQ9FpzFp2rP9hBmHY3yizVyPX/uT9S+af5TRxiaItj3SSJGgloaEMrnKOpb/EH7JwPSS0liAyT/NxPfOyyZHc22AvaAIOE5y+0PMUCKPuIdfpOrej3LVpO1Arc2hSgmdB+YIPSiBVYPXa6AuAmil9mpbtSikQJ7Uu7lX4JyTW4QxQ06rPFKnFWVKkzivAElAgMBAAECggEAJd0AJ37iTlMpDQ90xqe7hvRQxAu256gbQ9nrqLY97g0/KIw6WEZSPakFX6gvdvb/NzKmUyAIEKGLoh6tXdZk6qfOqc/6BeK47nIcBfwT9/zerjNUVvn34w4aHyNINieMMHQ+Id8PUZmqWH+Euz9ilVTosuyEPwUZulLvUQqwXzU5VnwVghURbUhDd+ecBJACWgemRun6d5241PQXNYAdH1k7cETd8GfIi3qclhhJrxi7tu5tq4YGCXQIoz7HCLim7GIvT0M+FRgSw2EOrHnAQNFeQ/vQbP71ttLoTxehL6Se9dfWrV5OI+Y/T7vR2F84Qt0iNbaxyJGir7siKDFIwQKBgQDXDzinx3/TasplM78pR/0CtuuKr1Ch02LOPrTosJ1qf1OohxQThowhOTxMsBlgYSKu9s1QRffUUXEqYXxd2B6lzDKfggwO6U2XxIcxWeNow0xoFfqcXYSg7Ga2sCr9uhdwxIdFQNF7SNBpT8ht4fJrRX6mWY1nHybpyTDQ4xoQNQKBgQC6m+yiOoi5JD3zVSSJq/iq5DJPA5B4aoP+t5u9lp2Q7iVO0QI5ilBlEKGE4VOU0glnXlDTfuqEYooMY85ekl4WGb3AOT0PhLL2i+gO2nlWBzf4HPzB/hibjfyPyniRM03cHkG3HXucL7Sne6FwERcfjEqjUd2cdP1l89PNrq4rMQKBgQCMmjABSWYh8/y1I5rEQ4OAJdVjC3GdC1Xa35ZpVybjvLEWSpHunhW5lvD8dllw8LC7UTI0XDpGPqTM/4VO2YBYB2PFc0Gs8g0/v0ZgFpOeJ6kpl80MM/wFNemFYTIKRoMSv/psZY9PmfBgGcBBTuquBXZjDcNr+yr2yAm5V/DvTQKBgHqRi94KoF8q5N39IKCkqhJlDH5FkxDktYoKw2rFkPzuzuZz9gghRyj6wXxsG9/2DWMt2dzw0czehFoa/CO188KEadPmRKr6uCmkP2nyKhxNZX+8WnB5G2Sg4DD6BjMpBYz8+qDx5ozx8LDJTYI0V4HLPgMD9JGdbgsXGhlREOkhAoGALr6IQOXnviWNAhCdc7rrsaMLMPbLZ1wqzWtQUG1JxDobbpzEP4CW/mvW5pMn58mSBg5qbXhyDI4fFP0CPb98QIz2tGnIzYyFzdKmF5Z1N7X1OF9O+tsSqASoBZzTqB4fr/o4mz0s9JCeriBR2LWjsbsDU13DTLsfQpWbtOnIy70="; String huifuPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuqolFneAH66z3/3gaIYIaRZOIk/UYzdsXIm0RyawYBYAOu/NJ7ul8CRIrRlt5vd98HodW2yPrXA4+VHF3AS9UE4WTDpo9qV5brhqQSr/lAuZtEwMZwUWwgdnGFMkUFd9RvyGXAqY0bsQrcQgQ6zGjZHzlMljogDR3iblG0ak5ssD2TSC2W+1cxu+id+FP6onZXlXizuClTyIRh17m7CbS6rl0P3M96MlTdCzTeBw/Y54CiegBJI2wOrm2Qa6Dg6KRc+YkaJWjuRJVJkwjk8JhSyALno9oEzuDKaAXlsQlxeIhmAy4esRrZGrMV8SG0gwUZIP8lduPjQE95lCqqJ0gQIDAQAB"; String sysId = "6666000207581039"; String productId = "XLSISV"; String huifuId = "6666000207581039"; String skillSource = "hfps/1.3.0"; com.huifu.bspay.sdk.opps.core.config.MerConfig merConfig = new com.huifu.bspay.sdk.opps.core.config.MerConfig(); merConfig.setSysId(sysId); merConfig.setProductId(productId); merConfig.setRsaPrivateKey(privateKey); merConfig.setRsaPublicKey(huifuPublicKey); merConfig.setSkillSource(skillSource); com.huifu.bspay.sdk.opps.core.BasePay.prodMode = com.huifu.bspay.sdk.opps.core.BasePay.MODE_PROD; com.huifu.bspay.sdk.opps.core.BasePay.initWithMerConfig(merConfig); System.out.println("========== 斗拱对账单查询 - 详细响应分析 =========="); System.out.println(); String yesterday = java.time.LocalDate.now().minusDays(1).format(java.time.format.DateTimeFormatter.ofPattern("yyyyMMdd")); System.out.println("测试日期: " + yesterday); System.out.println(); String[] billTypes = {"TRADE_BILL", "MERGE_BILL", "FEE_BILL", "REFUND_BILL"}; for (String billType : billTypes) { System.out.println("--------------------------------------------------"); System.out.println("账单类型: " + billType); System.out.println("--------------------------------------------------"); try { V2TradeCheckFilequeryRequest request = new V2TradeCheckFilequeryRequest(); request.setReqDate(DateTools.getCurrentDateYYYYMMDD()); request.setReqSeqId(SequenceTools.getReqSeqId32()); request.setHuifuId(huifuId); request.setFileDate(yesterday); Map extendInfoMap = new HashMap<>(); extendInfoMap.put("bill_type", billType); request.setExtendInfo(extendInfoMap); Map response = BasePayClient.request(request, false); String respCode = String.valueOf(response.getOrDefault("resp_code", "")); String respDesc = String.valueOf(response.getOrDefault("resp_desc", "")); System.out.println("resp_code: " + respCode); System.out.println("resp_desc: " + respDesc); System.out.println(); System.out.println("所有响应字段:"); Set keys = response.keySet(); for (String key : keys) { Object value = response.get(key); String valueStr = value != null ? value.toString() : "null"; if (valueStr.length() > 100) { valueStr = valueStr.substring(0, 100) + "..."; } System.out.println(" " + key + " = " + valueStr); } System.out.println(); if ("00000000".equals(respCode)) { Object fileDetails = response.get("file_details"); if (fileDetails != null) { System.out.println("*** 找到 file_details! ***"); System.out.println("file_details 类型: " + fileDetails.getClass().getName()); System.out.println("file_details 内容: " + JSON.toJSONString(fileDetails, true)); return; } Object taskDetails = response.get("task_details"); if (taskDetails != null) { System.out.println("*** 找到 task_details! ***"); System.out.println("task_details 内容: " + JSON.toJSONString(taskDetails, true)); } } } catch (Exception e) { System.out.println("调用失败: " + e.getMessage()); } System.out.println(); } System.out.println("========== 测试结束 =========="); } catch (Exception e) { e.printStackTrace(); } } }