package com.nova.sankuai.infra.utils.rongbei; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.crypto.symmetric.AES; import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONObject; import com.alibaba.fastjson.JSON; import com.nova.sankuai.domain.api.rongbei.RbResponse; import com.nova.sankuai.domain.api.syh.SyhResponse; import com.nova.sankuai.domain.dto.rongbei.CheckDto; import com.nova.sankuai.security.HttpClientUtil; import lombok.RequiredArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.util.TreeMap; /** * 融呗对接接口 */ @Component @RequiredArgsConstructor public class RongBeiUtil { private static final Logger log = LoggerFactory.getLogger("capitalLogger"); // 融呗的公钥 String publicKey = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvCfuR1Uza+ZvXL8wiAqSw+oIY/91VN5aQGvXBj2rp+jKkxkdkfmmPkIPlgC1/q1Bv8yAJEuv5IkiQmdCKPzTgqdl2Xmv5ywtL+Uob8oiHU0kzhhNsRjX9qJP78qWOKGDgGsZJgfavOaol3xfu5+00SU1BEnF0dgNJ7by/PzVvRic27+6sy6JF4ztyegFLfbimRLeVp2e9+1sVyxZscMcXcATisqVHZvOpMasdCUM81wVGWNqZiij9hbf/tH5G8/E9QsPrHGAwyfgmaM5CTS5shiYrllNmqTbPk9cx+t1qQc+xTNtnWugB1HLE3RZvr4T08kJoBpZb/uHVlxS8uGwOma36xSihVnWcaGDAk1imT95zZeyBYeOKKdwABPdCgN6H0jED/o1Etw8IlNI+3jOp0M7O6WkmUp+zHajaCPnOPMEXsLVqFZR5ppO//F0zfPZZBJx7QPRhHbG8DCK62q8gCGGxIZVLEEvWh39HB5HIfcW3A7U7G4SnZ8uKfDWGXhYflICtLr0ROsDAyFzGjgGDrtDgnMlc2Ht7/5A8xgifrdO6IjTwPu2GDBg80wQXW/kI1v6O/zxJJelMtddS7nk5fFVlmPhHOPtxlboXqCBXhEwjmSrBWW5LsVyNSu36MMRk6n0xTlLIyB22E/qm3eqVXIlwJfZF7MR0GGV4lG/gmECAwEAAQ=="; // 融呗的私钥 String privateKey = "MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQC8J+5HVTNr5m9cvzCICpLD6ghj/3VU3lpAa9cGPaun6MqTGR2R+aY+Qg+WALX+rUG/zIAkS6/kiSJCZ0Io/NOCp2XZea/nLC0v5ShvyiIdTSTOGE2xGNf2ok/vypY4oYOAaxkmB9q85qiXfF+7n7TRJTUEScXR2A0ntvL8/NW9GJzbv7qzLokXjO3J6AUt9uKZEt5WnZ737WxXLFmxwxxdwBOKypUdm86kxqx0JQzzXBUZY2pmKKP2Ft/+0fkbz8T1Cw+scYDDJ+CZozkJNLmyGJiuWU2apNs+T1zH63WpBz7FM22da6AHUcsTdFm+vhPTyQmgGllv+4dWXFLy4bA6ZrfrFKKFWdZxoYMCTWKZP3nNl7IFh44op3AAE90KA3ofSMQP+jUS3DwiU0j7eM6nQzs7paSZSn7MdqNoI+c48wRewtWoVlHmmk7/8XTN89lkEnHtA9GEdsbwMIrraryAIYbEhlUsQS9aHf0cHkch9xbcDtTsbhKdny4p8NYZeFh+UgK0uvRE6wMDIXMaOAYOu0OCcyVzYe3v/kDzGCJ+t07oiNPA+7YYMGDzTBBdb+QjW/o7/PEkl6Uy111LueTl8VWWY+Ec4+3GVuheoIFeETCOZKsFZbkuxXI1K7fowxGTqfTFOUsjIHbYT+qbd6pVciXAl9kXsxHQYZXiUb+CYQIDAQABAoICAQCew0bAs/iurAL9jGmj8OAEJb6sugpD8VbQEu6d2n20Ma50znVwDeojkFRcav8mBQV8lE7v0Vl6ief5he2Cbkr+bMd46L/vXQxH5KHpKfL9LHHI4SL1MxRPjIfMuvFkmYw/WJ8gwvHkAPDy2cRhqZHGBBInKySbOyVmhG2l4KVtaI46sh4UQUj2MTkX7Aoqza5IIW6wQVG4u4J2T/rjDtIpnQAgVW3bTPPhf65WVkkGM4WuJX/K8bHf3U9mUcBTok37wjiYdjGC+mv+14Yx6WZjC3QRcVMVENPaUNbl7h0a4f0qIon0kbK3WmHzaXKsivBp/LF9gZ5D6kY5La/kN2Edg4OsxvyPYJHyCyU2j8tC5RFHy9i7RjoPNgFos8DM9WBX90vRxuJt36BEq5a4TdinGRwarPgHOWOWoBrCTv3hsARnb8wg6ji7c+QvrbXAXDNPYtDMwQUs6dKiQEp+A4vohHzCQ8KkC0B3VbkbKoerjecpk6pwh6M2ZwMlJ0FKHdvswEw8VW+ZAKebuOxbMxtpXlA4zVdYcvMS0q+RbCd6tpy9ntJJ6O39HoP3A/mbpy8z9EEcfoWI3K/1Jii2mQAOTPjA6t4U32QO8QwOkETUWuw88E2CumQTJAFXIdTT8n8XeceS0XVq2b65Kg/yfHcgsvUDs2haXJwe0e6CeOVBEQKCAQEA5SSyST5hWHDvlx4Hvl4AFNa3TtRMzO4KpNYNf6dm3RScfOKZpI3b5CxZf4zMDlR2k5pYN52PwZ/Bg4MguS+OeIHB8loKWZlpDfpcIGF6dXqBIW7Lylm2iy76TW4j/C0J/XGw6A7EV8cMDtIgneWRI5ra98OEBI4VsfYKSO2UNCe1NbeVc/ORg4FRXTJNFeDLoKrVPQfCmxJBar7mmxA2bLXjXOwJ64TxUBHVkpSnDUI/zfOpigPiMoVuuW3ay/k9Vut2V919MeDn5HMzCL+u7GpVotJ2/8P/7obBJz8GDn60LAKso+TrD18Tqjfj+JYZzGmQH0XrmeA5c2ddehSdZQKCAQEA0jVvFbR8iE8ag22pAeuCLh9Gf7/jqqvLjSayJ+AHDRh3m97T6gmmezAqZYMt9t0IRJ6UTwowX4qBcKi/GyDXnr5x9sPlnt3EhwzYSVvQCIzD+sZUW1dq5Ky9zqWp6P+hi06THRL6osGSDNBrHORTpp4l+SE2Lt1ayzWTpKNM5fuGwbEjCbXIEsWz7kJ+vfHH/wCoEyZMKka4Bp/8iXlWbKnJZ1QI1xf9r7DgemezjGY4XhVh8tmrsZ7q11VTW7U2CjH9ZwS7P1R4UWF7vC7vQc6YzhfahQRkhE03PNEKCilXglt1OgAZHl4Dx3Idq2Sq7ZIMuJI4PJ/u9mD6LnJPTQKCAQBwmfjWj0Xs3QqPmx05Ch5GH0FTBnZ7Gdq3J8zYVx3wNCm2IPBZcbCFztloGXtI626dl/IT2mSDRIsmojBZcCo1w6XX/zEo2H9MdCQDcYNo6Xs9P6H7XNycRsiPdjlOuZ84IT9Kub74V4LwYYfPr7kD4xwJNtXQGzZEDmD9d2oluwGMVRunMCDom4qtHoPM5XuLB4fkBsU1yOHGn+rYdj4Ya8U/q2owh1LCAxGNh2kT1eNexIcioEfuha1kh7xGEcN3zBuKj/fuo9Owan/Ao9lEqfhNG9mIU/uXbjbKn2jNhKvrGKFXpK1yD0mtkut/A9vHnHRLOePN6OaydC/2Rt0VAoIBAF2TN84buEwdmpnjGRcntZ2+gm2gCEMTkttU3H3vtnPX7nbOrNtETH4OJPFngfCg2GtjhHXi/UGqsJBsLhZvekzKToUhE3izFCdiSm3tlyAXOa7K1waKVaVSWHRDPu3fzhPreIW6yyPks5VMukH0SmCjihfq9unJ0/8d7ImfwD2oyIY0ynoqF9RzefOYWj9IAFW9/xP3OnSfYpBga9Tu1NAujN+Ygw7tORsay/LxcvYPEwyezCmFSG8bZUNSUndCpbnIIxvW+VvpyF3B3YkaA5vx0gf8imQoXm6eyPYjwCph2PjIqdiV7picFWaVoCuJ9qUnHM6VGL+0GnZHGVfPvwkCggEAN9FJmHbc5ML0cqR8h/vnG001Mf08mg3niwu/QlQ3AoJbmlYBfEsC6w9bw4Mw8KkLO3rn66gbItNuDmhuFqiRovGeFjGYsdVnvtSzf+/g+IWOB7rSvRrAPR+2LCJYMeDTs3yPSV0uQyefpPxMLw59C4tMhSFSRqOKmrsYVcSLr4pHA7AhS6gV7WTK6EEuBJjENwg+K+yFPrPhx4+zOYwnQAxIz/EyQ285YvjgEIvZi97l6yFso5h1u/IORTe0+HGiVO4UHK7L0i0K8sec5Hi5WP8/T9x0HmbVuraY/Hr4j2OQfGGaIxngmTnLh/pVTr8YsUSmHOvh8AdYszSyLhsaAw=="; String encryptKey = "OZqKairb9biGp9xWg4q8re1g"; /** * 准入接口 * @return */ public RbResponse check(CheckDto body) { String logNumber = IdUtil.randomUUID(); String result = null; try { // 从数据库中读取出 result = HttpClientUtil.getInstance().postJsonData("", getPostData(body.toString())); } catch (Exception e) { RbResponse resp = getRbResponse("500", e.getMessage(), body.toString()); log.error("日志编号:{} 检测用户是否满足产品方借款申请的条件,传入参数:{} 错误原因:{}", logNumber, body, e); return resp; } try { SyhResponse res = JSON.parseObject(result, SyhResponse.class); RbResponse resp = getRbResponse("200", "成功", ""); return resp; } catch (Exception ex) { log.error("日志编号:" + logNumber + " 手机号为:{},【随易花】推送原始返回参数转换失败,jsonData:{} ex:{}", "customer.getPhone()", "jsonData" , ex); RbResponse resp = getRbResponse("500", ex.getMessage(), body.toString()); return resp; } } /** * 准入接口 * @return */ public RbResponse apply(CheckDto body) { String logNumber = IdUtil.randomUUID(); String result = null; try { // 从数据库中读取出 result = HttpClientUtil.getInstance().postJsonData("", getPostData(body.toString())); } catch (Exception e) { RbResponse resp = getRbResponse("500", e.getMessage(), body.toString()); log.error("日志编号:{} 检测用户是否满足产品方借款申请的条件,传入参数:{} 错误原因:{}", logNumber, body, e); return resp; } try { SyhResponse res = JSON.parseObject(result, SyhResponse.class); RbResponse resp = getRbResponse("200", "成功", ""); return resp; } catch (Exception ex) { log.error("日志编号:" + logNumber + " 手机号为:{},【随易花】推送原始返回参数转换失败,jsonData:{} ex:{}", "customer.getPhone()", "jsonData" , ex); RbResponse resp = getRbResponse("500", ex.getMessage(), body.toString()); return resp; } } /** * 准入接口 * @return */ public RbResponse orderStatus(CheckDto body) { String logNumber = IdUtil.randomUUID(); String result = null; try { // 从数据库中读取出 result = HttpClientUtil.getInstance().postJsonData("", getPostData(body.toString())); } catch (Exception e) { RbResponse resp = getRbResponse("500", e.getMessage(), body.toString()); log.error("日志编号:{} 检测用户是否满足产品方借款申请的条件,传入参数:{} 错误原因:{}", logNumber, body, e); return resp; } try { SyhResponse res = JSON.parseObject(result, SyhResponse.class); RbResponse resp = getRbResponse("200", "成功", ""); return resp; } catch (Exception ex) { log.error("日志编号:" + logNumber + " 手机号为:{},【随易花】推送原始返回参数转换失败,jsonData:{} ex:{}", "customer.getPhone()", "jsonData" , ex); RbResponse resp = getRbResponse("500", ex.getMessage(), body.toString()); return resp; } } /** * 准入接口 * @return */ public RbResponse conclusion(CheckDto body) { String logNumber = IdUtil.randomUUID(); String result = null; try { // 从数据库中读取出 result = HttpClientUtil.getInstance().postJsonData("", getPostData(body.toString())); } catch (Exception e) { RbResponse resp = getRbResponse("500", e.getMessage(), body.toString()); log.error("日志编号:{} 检测用户是否满足产品方借款申请的条件,传入参数:{} 错误原因:{}", logNumber, body, e); return resp; } try { SyhResponse res = JSON.parseObject(result, SyhResponse.class); RbResponse resp = getRbResponse("200", "成功", ""); return resp; } catch (Exception ex) { log.error("日志编号:" + logNumber + " 手机号为:{},【随易花】推送原始返回参数转换失败,jsonData:{} ex:{}", "customer.getPhone()", "jsonData" , ex); RbResponse resp = getRbResponse("500", ex.getMessage(), body.toString()); return resp; } } /** * 准入接口 * @return */ public RbResponse repayInfo(CheckDto body) { String logNumber = IdUtil.randomUUID(); String result = null; try { // 从数据库中读取出 result = HttpClientUtil.getInstance().postJsonData("", getPostData(body.toString())); } catch (Exception e) { RbResponse resp = getRbResponse("500", e.getMessage(), body.toString()); log.error("日志编号:{} 检测用户是否满足产品方借款申请的条件,传入参数:{} 错误原因:{}", logNumber, body, e); return resp; } try { SyhResponse res = JSON.parseObject(result, SyhResponse.class); RbResponse resp = getRbResponse("200", "成功", ""); return resp; } catch (Exception ex) { log.error("日志编号:" + logNumber + " 手机号为:{},【随易花】推送原始返回参数转换失败,jsonData:{} ex:{}", "customer.getPhone()", "jsonData" , ex); RbResponse resp = getRbResponse("500", ex.getMessage(), body.toString()); return resp; } } /** * 准入接口 * @return */ public RbResponse h5Url(CheckDto body) { String logNumber = IdUtil.randomUUID(); String result = null; try { // 从数据库中读取出 result = HttpClientUtil.getInstance().postJsonData("", getPostData(body.toString())); } catch (Exception e) { RbResponse resp = getRbResponse("500", e.getMessage(), body.toString()); log.error("日志编号:{} 检测用户是否满足产品方借款申请的条件,传入参数:{} 错误原因:{}", logNumber, body, e); return resp; } try { SyhResponse res = JSON.parseObject(result, SyhResponse.class); RbResponse resp = getRbResponse("200", "成功", ""); return resp; } catch (Exception ex) { log.error("日志编号:" + logNumber + " 手机号为:{},【随易花】推送原始返回参数转换失败,jsonData:{} ex:{}", "customer.getPhone()", "jsonData" , ex); RbResponse resp = getRbResponse("500", ex.getMessage(), body.toString()); return resp; } } private String getPostData(String oriData){ RsaSupport rsaSupport = new RsaSupport("RSA", "SHA256WithRSA", "RSA/ECB/PKCS1Padding", "utf-8", publicKey, privateKey); AES aes = new AES("ECB", "PKCS5Padding", encryptKey.getBytes()); JSONObject fullData = new JSONObject(); fullData.put("partner_id", "test"); fullData.put("timestamp", System.currentTimeMillis()); //加密oriData fullData.put("biz_data", aes.encryptBase64(oriData)); //fullData排序 TreeMap treeMap = JSONUtil.toBean(fullData, TreeMap.class); String oriSignData = MapUtil.sortJoin(treeMap, "&", "=", true); fullData.put("sign", rsaSupport.signByPrivateKey(oriData)); return fullData.toString(); } private RbResponse getRbResponse(String code, String msg, String data) { RbResponse resp = new RbResponse(); resp.setCode(code); resp.setMsg(msg); resp.setData(data); return resp; } }