| | |
| | | import com.ruoyi.order.domain.vo.PaymentDelaytransHFTXVo; |
| | | import com.ruoyi.order.domain.vo.WeixinPaymentNotifyVo; |
| | | import com.ruoyi.order.domain.vo.WeixinPaymentRefundVo; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.security.KeyFactory; |
| | | import java.security.PrivateKey; |
| | |
| | | * @Date 2023/10/12 0:02 |
| | | */ |
| | | public class HuiFuTianXiaUtil { |
| | | private static Logger logger = LoggerFactory.getLogger(HuiFuTianXiaUtil.class); |
| | | //私钥(Base64编码) |
| | | private static String privateKeyBase64 = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCs658vv/6VdoSGyxr7gVNxlsFGKC2RE4I3S3C78f7t29t6oSm7tdRUr+B/I1VtV1Ps2SQMqG+gUpLiVbHEj+U8PjrvSht6cBNpqhnUjBASEhO0zeCJXNj3zqEDj7CnzDbUzuZWZDyLEaSLRaVb/DSW34D0GDsGWpIMLui/lnubXCYMNsUJBgRmV/tSv7vApVok3aKDoYkZMDhfnKrbxTtWkDfwNLDCInB300YbGeN7hhECRestktymHw0I78x3g+pdzOKOSofqdHyBCemVgOBt2h+oulVU65jc5ok0vwhx7sk2+i3Dw/S/hx3fpnOAToLhpFSTCqArG5wOhiOTX5RRAgMBAAECggEAT+uu7VDdh5L5eZtR40BIos08kwJq3QyZOJlDh3o3ixP8gtcOBNXrRyDqr5hTGXAtN+C8SqVmwkCn5rgYq3KeTpOshYBI5vP55PJbceMyYke8l+o3hwVEunPj81NsIIHALedaij9VxCjpVf1gif0tCTZP0YGJdkxSCBN+O15/zrOred2xkbAGXCNM2j+uIOZ5LTQ064jUAm9KWO4JvVnlNCQPiJCfe652i4RE9adgTlT7d9XffQ/oZDZcDkD1OVUO4ErsSgvjsjPW9Qk8zAVm/C+ycs27GUbVf6yh3zMoL4JDshzoMYAVDqP3VkpYGiW71PzcOZqktcjbtCom4/gpqQKBgQDgHrsQVzMwr18gRAWl8PsgHyMvhyivzk7uPvm6nK9mvEGg7wnrCMKHkpEOCi4mHWnW6H9ptrkeAQbHN7H8Qd6JZm/H0VN8N8fg4IFarlrLWXET6s7or9btCf4aq8DGrU9C+7fcngSfuqlrSxy9e+9InmzUFGKVLBtYIJbG1r00qwKBgQDFhHhhc4WC1MrWLSGhpaNp+swPstfzUBeX2MtZOIv6yXTYPvJ77AAZoLnW482eUZucltCAUucEtTsop25dKdhbdhbVJ/YRRnaklBL2rai4HX+fjoV29tepJhrOrq3Ey+vqvDEsqrBz2C6YyJ6d9aaPPwCFsnDRO+g7tK9S4ZfC8wKBgGlhKbXqOnCW1RSXx0waPgoBegrb816OlABj7go3qCWXOQiRvMkdilIysS+3y7EyPVTGZzpupyYbd3Nulaq10gwq9T4wB6Atnjb3ePsJZjmdKZUi3/z6yQUVoLwrq+3/CXjGYNJEHop4Ozbuz2ms/3rWuvcRSrU3UvgiAqMlzzsXAoGAJY7xDSbYZm5sO5nNYV2L22UzVHDfm4bJVbiFwmt8Qq34J/6gQWw5AKaNcA1VVhuSiY4sC5q4Dy8fFrXvyItidtHXuaSlp9dMTDNT/9A52vjRAdgqDNsXWzTBuDeDF37nV3V9rE6wyvZ6tdbAQq0phOeoA8RQq5jGqkPLauk24H0CgYEAn92Ru9UuloMmTrJbpeeLmMkwCzKff4SpYSY3WzidjdlfHpyNqBUMYb5Ym3OplrSONT9o2H5mEQipjatiu0teILBT7j+f9ZJYQ3vUurAXbmKtthHuEV4lueylNUgmkv+dm295n2x79w1mk/0emJ/Qr9tz43dpSV/kRCxc+lX+OFk="; |
| | | //公钥(Base64编码) |
| | |
| | | headers.put("Content-type","application/json; charset=utf-8"); |
| | | headers.put("Accept", "application/json"); |
| | | post.addHeaders(headers); |
| | | System.err.println(JSON.toJSONString(body)); |
| | | logger.info(JSON.toJSONString(body)); |
| | | post.body(body.toJSONString()); |
| | | HttpResponse execute = post.execute(); |
| | | String result1 = execute.body(); |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 查询支付数据 |
| | | * @param org_req_seq_id 请求流水号 |
| | | * @param org_req_date 请求日期 |
| | | * @return |
| | | */ |
| | | public static R<WeixinPaymentNotifyVo> queryPayment(String org_req_seq_id, String org_req_date){ |
| | | String url = "https://api.huifu.com/v2/trade/payment/scanpay/query"; |
| | | JSONObject data = new JSONObject(); |
| | | data.put("huifu_id", huifu_id); |
| | | data.put("org_req_seq_id", org_req_seq_id); |
| | | data.put("org_req_date", org_req_date); |
| | | |
| | | JSONObject body = new JSONObject(); |
| | | body.put("sys_id", huifu_id); |
| | | body.put("product_id", product_id); |
| | | body.put("sign", sign(data.toJSONString())); |
| | | body.put("data", data); |
| | | HttpRequest post = HttpUtil.createPost(url); |
| | | Map<String, String> headers = new HashMap<>(); |
| | | headers.put("Content-type","application/json; charset=utf-8"); |
| | | headers.put("Accept", "application/json"); |
| | | post.addHeaders(headers); |
| | | logger.info(JSON.toJSONString(body)); |
| | | post.body(body.toJSONString()); |
| | | HttpResponse execute = post.execute(); |
| | | String result1 = execute.body(); |
| | | execute.close(); |
| | | if(StringUtils.hasLength(result1)){ |
| | | JSONObject result = JSONObject.parseObject(result1); |
| | | JSONObject resultData = result.getJSONObject("data"); |
| | | String resp_code = resultData.getString("resp_code"); |
| | | String resp_desc = resultData.getString("resp_desc"); |
| | | //交易受理成功;注:交易状态以trans_stat为准; |
| | | String success1 = "00000000"; |
| | | if(success1.equals(resp_code)){ |
| | | WeixinPaymentNotifyVo vo = new WeixinPaymentNotifyVo(); |
| | | vo.setReqSeqId(resultData.getString("org_req_seq_id")); |
| | | vo.setReqDate(resultData.getString("org_req_date")); |
| | | vo.setTransAmt(resultData.getString("trans_amt")); |
| | | vo.setPayAmt(resultData.getString("pay_amt")); |
| | | vo.setEndTime(resultData.getString("end_time")); |
| | | vo.setTransStat(resultData.getString("trans_stat")); |
| | | String fee_type = resultData.getString("fee_type"); |
| | | vo.setFeeFlag("INNER".equals(fee_type) ? 2 : 1); |
| | | vo.setFeeAmount(resultData.getString("fee_amt")); |
| | | return R.ok(vo); |
| | | } |
| | | return R.fail(resp_desc); |
| | | } |
| | | return R.fail("请求异常"); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | |
| | | headers.put("Accept", "application/json"); |
| | | post.addHeaders(headers); |
| | | post.body(body.toJSONString()); |
| | | System.err.println(JSON.toJSONString(body)); |
| | | logger.info(JSON.toJSONString(body)); |
| | | HttpResponse execute = post.execute(); |
| | | String result1 = execute.body(); |
| | | execute.close(); |
| | |
| | | headers.put("Accept", "application/json"); |
| | | post.addHeaders(headers); |
| | | post.body(body.toJSONString()); |
| | | System.err.println(JSON.toJSONString(body)); |
| | | logger.info(JSON.toJSONString(body)); |
| | | HttpResponse execute = post.execute(); |
| | | String result = execute.body(); |
| | | execute.close(); |
| | |
| | | |
| | | |
| | | public static void main(String[] args) { |
| | | //174.91 |
| | | //分账对象 |
| | | JSONArray acctInfos = new JSONArray(); |
| | | com.alibaba.fastjson2.JSONObject jsonObject = new com.alibaba.fastjson2.JSONObject(); |
| | | jsonObject.put("div_amt", String.format("%.2f", 0.07D)); |
| | | jsonObject.put("huifu_id", "6666000141251275"); |
| | | jsonObject.put("div_amt", String.format("%.2f", 173.35)); |
| | | jsonObject.put("huifu_id", "6666000141286934"); |
| | | acctInfos.add(jsonObject); |
| | | HuiFuTianXiaUtil.paymentDelaytrans(IdUtils.simpleUUID(), "20231020", "0479854e057547698be8b083f2fa550a", acctInfos); |
| | | //平台商户 |
| | | com.alibaba.fastjson2.JSONObject jsonObject1 = new com.alibaba.fastjson2.JSONObject(); |
| | | jsonObject1.put("div_amt", String.format("%.2f", 1.56)); |
| | | jsonObject1.put("huifu_id", "6666000141216769"); |
| | | acctInfos.add(jsonObject1); |
| | | R<PaymentDelaytransHFTXVo> paymentDelaytransHFTXVoR = HuiFuTianXiaUtil.paymentDelaytrans(IdUtils.simpleUUID(), "20231111", "57dbe646b14542ce8bce166490d3e46e", acctInfos); |
| | | System.err.println(JSON.toJSONString(paymentDelaytransHFTXVoR)); |
| | | } |
| | | } |