import java.nio.file.*; import java.time.*; import java.time.format.*; import java.util.*; import com.alibaba.fastjson.JSON; import com.huifu.bspay.sdk.opps.client.BasePayClient; import com.huifu.bspay.sdk.opps.core.BasePay; import com.huifu.bspay.sdk.opps.core.config.MerConfig; import org.yaml.snakeyaml.Yaml; public class QueryHuifu { public static void main(String[] args) throws Exception { Map root = new Yaml().load(Files.readString(Path.of("talent-card-server/src/main/resources/application.yml"))); Map config = find(root); BasePay.debug=false; BasePay.prodMode=BasePay.MODE_PROD; String identity = args.length > 3 ? args[3] : ""+config.get("system-id"); if (!Set.of("6666000226048687","6666000241335656","6666000220591054").contains(identity)) throw new IllegalArgumentException("Unexpected query identity"); MerConfig c=new MerConfig(); c.setSysId(identity); c.setProductId(""+config.get("product-id")); c.setRsaPrivateKey(""+config.get("private-key")); c.setRsaPublicKey(""+config.get("platform-public-key")); BasePay.initWithMerConfig(c); if(!Set.of("v2.merchant.basicdata.query","v2.user.apply.query","v2.merchant.busi.config.query","v2.merchant.busi.realname.query").contains(args[0])) throw new IllegalArgumentException("Read only query required"); Map request=JSON.parseObject(args[1],Map.class); Map response; try { response=BasePayClient.request(request,args[0],false); } catch (com.huifu.bspay.sdk.opps.core.exception.BasePayException exception) { String body=JSON.toJSONString(request); String signature=com.huifu.bspay.sdk.opps.core.utils.RsaUtils.sign(com.huifu.bspay.sdk.opps.core.sign.JsonUtils.sort4JsonString(body,0),c.getRsaPrivateKey()); String envelope=JSON.toJSONString(Map.of("sys_id",identity,"product_id",c.getProductId(),"data",request,"sign",signature)); var http=java.net.http.HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(15)).build(); var req=java.net.http.HttpRequest.newBuilder(java.net.URI.create("https://api.huifu.com/"+args[0].replace('.','/'))).timeout(Duration.ofSeconds(20)).header("Content-Type","application/json").POST(java.net.http.HttpRequest.BodyPublishers.ofString(envelope)).build(); var res=http.send(req,java.net.http.HttpResponse.BodyHandlers.ofString()); System.out.println("HTTP status="+res.statusCode()); Map raw=JSON.parseObject(res.body(),Map.class); System.out.println(raw==null ? "Empty HTTP response body; outcome unconfirmed" : "Gateway diagnostic (not capability evidence): code="+raw.get("resp_code")+", message="+raw.get("resp_desc")); return; } Map data=response.get("data") instanceof Map ? (Map)response.get("data") : response.get("data") instanceof String s ? JSON.parseObject(s,Map.class) : response; if(data==null) { System.out.println("Empty data; code="+response.get("resp_code")+"; message="+response.get("resp_desc")); return; } for(String key: args[2].split(",")) if(data.containsKey(key)) System.out.println(key+"="+JSON.toJSONString(data.get(key))); } static Map find(Map root) { if(root.containsKey("system-id") && root.containsKey("private-key")) return root; for(Object v:root.values()) if(v instanceof Map m) {Map r=find(m); if(r!=null)return r;} return null; } }