无关风月
2024-11-15 353cf91d3679e68d9b8c07652e4f7791d606dbd4
xinquan-modules/xinquan-order/src/main/java/com/xinquan/order/utils/JuHeFuUtil.java
@@ -35,6 +35,7 @@
    private static Logger logger = LoggerFactory.getLogger(JuHeFuUtil.class);
    // 商户RSA私钥 TODO
    private static final String MERCHANT_PRIVATE_KEY = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMQPsMj4OYgjHFWS8wDIQOoMeAx9Ad1wKfIks7Oz5Kw8EVnmZ9o1ZY14goMMr1vJo/XxLLYXDvwj+EhV4MqT6ji2QDVqlhA4f6WFFmKOsvxgNnu0zAysfDpVpYihWC5uOf4ece9fWVci8DYFeXcawYGNB6GrJuo186sqMYwkE90/AgMBAAECgYAnMvfmhnKCPHraxSGeo2sPIGUUIh4wVs+cIShoomvy36OcdMuIvipKqbB2YR/iWyNT9d85nMybLtniJIFoH0CxshmLH/yg31vYhyLfVyih1RVFBRYuDMnIjvmNTBgXM/9vaAwkzonIQnoFoLVjxK2+JIFY+86Iak1Cv/vEi1vaSQJBAPRwebK51NBfrnO+2HY9nuDvbZbSx9I8uR+Yw/ebDUmbow/Dacibl0Hha+fw6cy5I3Rlm2kk5fKXIDIkwyLVq80CQQDNVXuQ8kXrDR0WjPcYPnwKNPEd0EHOKFiT7OqwoMFUUROyajO2nWs80eiZYZ+6M6+LEvYT6KcSiyiIwREnh1k7AkBV3BwjNzsVZkZ0yZhnEAX6pJ8t1yPxKPstqg9Lrd7g+BYyt0U0/dIHhhLNCcZV7sIRZI9OQ3Ox3nukoV0Zo0wRAkBT1eEbry+I5tPHj0qb5Xczm6YOrCcSCzsPOp4f+6Kz0F6ga+gtWVyden7jkQ5sMgosWFOMkWMVmSe1nk5ou0RdAkEAzfJJavQgu+BGQwqS1EojlXKe0GmpbQu+HwuDKcHmju0P2qGQ2yPfvURg1dMp7tmBM8AlVJhgzkNuyUAN1J841w==";
//    private static final String MERCHANT_PRIVATE_KEY = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKOuwQkWiVCNY5SIw6fXcIHj/e8UuQ5Gro1v4yguVnNhCdC6HsWbF6jf1ios8CQKxIQViI2I8GfVPsjBBpfp7TK5zup0BHHYg7JUk0tC6ojL8WgbtVpKX7GJFQOdjNbZmYBlDQuBiCfvxWuLki8juL8NlY4aj7FgSDboSHq7A+ZjAgMBAAECgYAEhei5qpDC1BVjXmAhvDdUr4st1yHB/jwGloftbVJgP9c4mFwPU9jUhtLxOWqtZErH55xtZNJX3DGu9H6NJh6y09UCLdQJJY2/BQBrTlDsVFQl5h2PwDOO+qwUkZPTVd+822Sv0lukVS4c5sCwcdYwShmiIQCuudpygHDCBxJ6AQJBANAmfr6j8PxnCKlSUfaO1PqcnT6BGOJEBbnT0CGiKwNwXKecEKh5O8Ev4Ak9FhGad4eFkKZDNvHLE+yfCPy8nwECQQDJT10Hwi9+1KFdTacQrC94fZzipuqBOeVzgTPQrQ0iM38uKx5Sj5o4Ii9cyfkw2EoG/gFSim57U/OApLab22ljAkBoL0xzWZWOkHfaYHTcB0P9KJTgKzfsUQXYrHdZzlTfRMdrsYb4/K13FeJ6XVQFfZ5ke+sZ/TysK+yOHFAgSL0BAkAXLdYuYIOLfPwffCNyXgERRJVd245A1uO+iu/mZSaP+5H3ROu24eYF9Jmze2X/48eSSojochwKgz4UX+LOy1K1AkBQycFQjRWCjPi8biMhdLzzX47CNFkwigVp0At6VcZmb86cS9ohoTHCbeG0+hlX7p9eNMiFKLVnnCdjY6j1xqtv";
    // 平台RSA公钥 TODO
    private static final String PLAT_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOKBBFXirWIJth+SNJCY4mhbATbL60sKV66bRixHMVz8vpBqONio9X6A+Pm9LNutBe+hLpI1BMmFJk3Mb1/QEcklWptRGgHqIrBxR4b19qc/2/pSxyqlpaifYJFZhOg2+OcQ/fqpAmhNXN5uc1pcYvbvWTam0j+6+nBNQeAAku5QIDAQAB";
    // 应用的app_id TODO
@@ -45,8 +46,11 @@
    private static final String AES_KEY = "cb0a181ac97395c6942be19315fc0727";
    // 创建用户接口
    private static final String CREATE_USER_INTERFACE = "/api/member/create_user_a";
    private static final String BALANCE_PAY = "/api/account/balance_pay";
    // 创建支付订单
    private static final String CREATE_PAYMENT_INTERFACE = "/api/payment/create_payment";
    private static final String CREATE_PAYMENT_INTERFACE_CODE = "/api/payment/create_payment_qrcode";
    private static final String CREATE_PAYMENT_INTERFACE_THIRD = "/api/payment/create_payment_third";
    // 退款接口
    private static final String PAYMENT_REFUND_INTERFACE = "/api/payment/payment_refund";
    private static final String MERCHANT_PAY_INTERFACE = "/api/account/merchant_pay";
@@ -56,52 +60,96 @@
    private static final String PAY_CHANNEL_ALIPAY = "alipay_qr";
    // 微信支付渠道
    private static final String PAY_CHANNEL_WECHAT = "wx_lite";
    private static final String PAY_CHANNEL_WECHAT_THiRD = "wx";
    // 微信小程序id TODO
    private static final String WX_APP_ID = "";
    public static void main(String[] args) throws Exception {
//        createPaymentCode("CZ1928183312398", 1, "0.01",
//                "充值", "充值",
//                "127.0.0.1", "openId",
////                "https://v7ro848ar5jx.ngrok.xiaomiqiu123.top/order/client/order/order/base/callback")
//        "https://xq.xqzhihui.com/api/order/client/order/order/base/callback");
//        String orderNo = OrderUtil.getOrderNoForPrefix("User");
        createUser("test129837182731");
//          balancePay("12345678912", "0.01", "http://www.baidu.com");
    }
    /**
     * 创建用户
     *
     * @param memberId 用户id
     * @param memberP  用户信息
     * @return boolean
     * @throws Exception
     */
    public static boolean createUser(String memberId, Map<String, Object> memberP)
    public static boolean createUser(String memberId)
            throws Exception {
        JSONObject memberP = new JSONObject();
        memberP.put("user_name","周帅");
        memberP.put("cert_type","00");
        memberP.put("cert_id","513902200006257079");
        memberP.put("tel_no","19983174515");
        memberP.put("card_id","6228480469852935177");
        JSONObject data = new JSONObject();
        data.put("app_id", APP_ID);
//        data.put("app_id", APP_ID);
        data.put("app_id", "app_e7301b75-19f1-40e5-96ac-0fee847d4da0");
        data.put("member_id", memberId);
        data.put("member_type", "01");
        data.put("member_p", memberP);
        String jsonString = JSON.toJSONString(memberP);
        jsonString = JSON.toJSONString(JSONObject.parseObject(jsonString, TreeMap.class));
        data.put("member_p", jsonString);
        System.err.println(data);
        JSONObject body = new JSONObject();
//        body.put("merId", MER_ID);
        body.put("merId", "1120241105365033");
        body.put("sign", sign(JSONObject.toJSONString(data)));
//        body.put("reqCipher",
//                EncryptUtils.aes256ECBPkcs7PaddingEncrypt(JSONObject.toJSONString(data), AES_KEY));
        body.put("reqCipher",
                EncryptUtils.aes256ECBPkcs7PaddingEncrypt(JSONObject.toJSONString(data), "6d548eb01bad44bbbb4a23743e733103"));
        body.put("reqTime", DateUtils.dateTimeNow("yyyyMMddHHmmsssss"));
//        String result = sendPost(BASE_URL + CREATE_USER_INTERFACE, body);
        String result = sendPost("https://payapi.juhefu.com/" + CREATE_USER_INTERFACE, body);
        JSONObject resJsonObject = JSONObject.parseObject(result);
        System.err.println(resJsonObject);
        return false;
    }
//    public static void main(String[] args) throws Exception {
////        createPaymentCode("CZ1928183312398", 1, "0.01",
////                "充值", "充值",
////                "127.0.0.1", "openId",
//////                "https://v7ro848ar5jx.ngrok.xiaomiqiu123.top/order/client/order/order/base/callback")
////        "https://xq.xqzhihui.com/api/order/client/order/order/base/callback");
////        String orderNo = OrderUtil.getOrderNoForPrefix("User");
//        createUser("testuser12937812893718297391");
////          balancePay("12345678912", "0.01", "http://www.baidu.com");
//    }
    public static JSONObject balancePay(String orderNo,  String payAmt, String notifyUrl) throws Exception {
        JSONObject data = new JSONObject();
        data.put("order_no", orderNo);
        data.put("app_id", APP_ID);
        data.put("pay_amt", payAmt);
        data.put("member_id", "21233333");
        data.put("notify_url", notifyUrl);
        JSONObject body = new JSONObject();
        body.put("merId", MER_ID);
        body.put("sign", sign(JSONObject.toJSONString(data)));
        body.put("reqCipher",
                EncryptUtils.aes256ECBPkcs7PaddingEncrypt(JSONObject.toJSONString(data), AES_KEY));
        body.put("reqTime", DateUtils.dateTimeNow("yyyyMMddHHmmssfff"));
        // 发送Post请求
        logger.info("桔禾付创建用户请求体====================>{}", body.toJSONString());
        String result = sendPost(BASE_URL + CREATE_USER_INTERFACE, body);
        logger.info("桔禾付创建用户请求结果====================>{}", result);
        if (StringUtils.isBlank(result)) {
            throw new ServiceException("请求第三方支付平台异常");
        }
        body.put("reqTime", DateUtils.dateTimeNow("yyyyMMddHHmmsssss"));
        String result = sendPost(BASE_URL + BALANCE_PAY, body);
        JSONObject resJsonObject = JSONObject.parseObject(result);
        if (resJsonObject.getString("status").equals("succeeded")) {
            return true;
        } else if (resJsonObject.getString("status").equals("failed")) {
            throw new ServiceException(resJsonObject.getString("error_msg"));
        }
        return false;
        System.err.println(resJsonObject);
        String string = resJsonObject.getString("resCipher");
        String decrypt = decrypt(string);
        System.err.println(decrypt);
        JSONObject jsonObject = JSONObject.parseObject(decrypt);
        System.err.println(jsonObject);
        return null;
    }
    public static void main(String[] args) throws Exception {
        createPayment("MX123aaa9999911",1, "0.01",
                "测试商品", "测试商品描述",
                "221.182.45.100", "oG50n6Vf0JNid5DOg0brcAnZ0T4s", "https://v7ro848ar5jx.ngrok.xiaomiqiu123.top/order/client/order/order/testCallback");
    }
    /**
     * 创建支付订单
     *
@@ -124,12 +172,14 @@
        data.put("order_no", orderNo);
        data.put("app_id", APP_ID);
        if (payChannel == 1) {
            data.put("pay_channel", PAY_CHANNEL_ALIPAY);
        } else {
            data.put("pay_channel", PAY_CHANNEL_WECHAT);
            expand.put("open_id", openId);
            expand.put("wx_app_id", WX_APP_ID);
            data.put("expand", expand);
        } else {
            data.put("pay_channel", PAY_CHANNEL_ALIPAY);
        }
        data.put("pay_amt", payAmt);
        data.put("goods_title", goodsTitle);
@@ -158,7 +208,103 @@
//        if (resJsonObject.getString("status").equals("succeeded")) {
//            return resJsonObject.getJSONObject("expand");
//        }
        return jsonObject;
    }
    public static JSONObject createPaymentCode(String orderNo, Integer payChannel, String payAmt,
            String goodsTitle, String goodsDesc, String deviceIp, String openId,
            String notifyUrl) throws Exception {
        JSONObject data = new JSONObject();
        JSONObject expand = new JSONObject();
        data.put("order_no", orderNo);
        data.put("app_id", APP_ID);
        if (payChannel == 1) {
            data.put("pay_channel", PAY_CHANNEL_ALIPAY);
        } else {
            data.put("pay_channel", PAY_CHANNEL_WECHAT);
            expand.put("open_id", openId);
            expand.put("wx_app_id", WX_APP_ID);
            data.put("expand", expand);
        }
        data.put("pay_amt", payAmt);
        data.put("goods_title", goodsTitle);
        data.put("goods_desc", goodsDesc);
        data.put("time_expire", "20241031000000");
        Map<String, Object> deviceInfo = new HashMap<>();
        deviceInfo.put("device_ip", deviceIp);
        data.put("device_info", deviceInfo);
        data.put("notify_url", notifyUrl);
        JSONObject body = new JSONObject();
        body.put("merId", MER_ID);
        body.put("sign", sign(JSONObject.toJSONString(data)));
        body.put("reqCipher",
                EncryptUtils.aes256ECBPkcs7PaddingEncrypt(JSONObject.toJSONString(data), AES_KEY));
        body.put("reqTime", DateUtils.dateTimeNow("yyyyMMddHHmmsssss"));
        String result = sendPost(BASE_URL + CREATE_PAYMENT_INTERFACE_CODE, body);
        JSONObject resJsonObject = JSONObject.parseObject(result);
        System.err.println(resJsonObject);
        String string = resJsonObject.getString("resCipher");
        String decrypt = decrypt(string);
        System.err.println(decrypt);
        JSONObject jsonObject = JSONObject.parseObject(decrypt);
//        if (resJsonObject.getString("status").equals("failed")) {
//            throw new ServiceException(resJsonObject.getString("error_msg"));
//        }
//        if (resJsonObject.getString("status").equals("succeeded")) {
//            return resJsonObject.getJSONObject("expand");
//        }
        return jsonObject.getJSONObject("expand");
    }
    /**
     * 创建支付订单 微信托管支付
     *
     * @param orderNo    订单号
     * @param payChannel 支付渠道 1:支付宝 2:微信
     * @param payAmt     支付金额
     * @param goodsTitle 商品标题
     * @param goodsDesc  商品描述信息,微信小程序和微信公众号该字段 最大长度 42 个字符
     * @param deviceIp   设备支付公网ip
     * @param openId     微信openId
     * @param notifyUrl  回调地址
     * @return JSONObject
     * @throws Exception
     */
    public static JSONObject createPayment1(String orderNo, Integer payChannel, String payAmt,
            String goodsTitle, String goodsDesc, String deviceIp, String openId,
            String notifyUrl) throws Exception {
        JSONObject data = new JSONObject();
        JSONObject expand = new JSONObject();
        data.put("order_no", orderNo);
        data.put("app_id", APP_ID);
        data.put("pay_channel", PAY_CHANNEL_WECHAT_THiRD);
        data.put("pay_amt", payAmt);
        data.put("goods_title", goodsTitle);
        data.put("goods_desc", goodsDesc);
        Map<String, Object> deviceInfo = new HashMap<>();
        deviceInfo.put("device_ip", deviceIp);
        data.put("device_info", deviceInfo);
        data.put("notify_url", notifyUrl);
        JSONObject body = new JSONObject();
        body.put("merId", MER_ID);
        body.put("sign", sign(JSONObject.toJSONString(data)));
        body.put("reqCipher",
                EncryptUtils.aes256ECBPkcs7PaddingEncrypt(JSONObject.toJSONString(data), AES_KEY));
        body.put("reqTime", DateUtils.dateTimeNow("yyyyMMddHHmmsssss"));
        String result = sendPost(BASE_URL + CREATE_PAYMENT_INTERFACE_THIRD, body);
        JSONObject resJsonObject = JSONObject.parseObject(result);
        System.err.println(resJsonObject);
        String string = resJsonObject.getString("resCipher");
        String decrypt = decrypt(string);
        System.err.println("解密后"+decrypt);
        JSONObject jsonObject = JSONObject.parseObject(decrypt);
//        if (resJsonObject.getString("status").equals("failed")) {
//            throw new ServiceException(resJsonObject.getString("error_msg"));
//        }
//        if (resJsonObject.getString("status").equals("succeeded")) {
//            return resJsonObject.getJSONObject("expand");
//        }
        return jsonObject;
    }
    /**
@@ -168,7 +314,7 @@
     * @param orderNo   订单号
     * @return
     */
    public static boolean refund(String paymentId, String orderNo) throws Exception {
    public static String refund(String paymentId, String orderNo) throws Exception {
        JSONObject data = new JSONObject();
        data.put("payment_id", paymentId);
        data.put("order_no", orderNo);
@@ -177,15 +323,15 @@
        body.put("sign", sign(JSONObject.toJSONString(data)));
        body.put("reqCipher",
                EncryptUtils.aes256ECBPkcs7PaddingEncrypt(JSONObject.toJSONString(data), AES_KEY));
        body.put("reqTime", DateUtils.dateTimeNow("yyyyMMddHHmmssfff"));
        body.put("reqTime", DateUtils.dateTimeNow("yyyyMMddHHmmsssss"));
        String result = sendPost(BASE_URL + PAYMENT_REFUND_INTERFACE, body);
        JSONObject resJsonObject = JSONObject.parseObject(result);
        if (resJsonObject.getString("status").equals("succeeded")) {
            return true;
        } else if (resJsonObject.getString("status").equals("failed")) {
            throw new ServiceException(resJsonObject.getString("error_msg"));
        }
        return false;
//        if (resJsonObject.getString("status").equals("succeeded")) {
//            return "ok";
//        } else if (resJsonObject.getString("status").equals("failed")) {
//            throw new ServiceException(resJsonObject.getString("error_msg"));
//        }
        return "ok";
    }
    /**
@@ -200,14 +346,16 @@
     * @return
     * @throws Exception
     */
    public static boolean merchantPay(String orderNo, String payAmt, String cardName, String cardId,
    public static JSONObject merchantPay(String orderNo, String payAmt, String cardName, String cardId,
            String cardType)
            throws Exception {
        JSONObject data = new JSONObject();
        data.put("order_no", orderNo);
        data.put("app_id", APP_ID);
        data.put("pay_amt", payAmt);
        data.put("card_name", cardName);
        data.put("card_id", cardId);
        data.put("card_type", cardType);
        JSONObject body = new JSONObject();
        body.put("merId", MER_ID);
        body.put("sign", sign(JSONObject.toJSONString(data)));
@@ -216,12 +364,12 @@
        body.put("reqTime", DateUtils.dateTimeNow("yyyyMMddHHmmss"));
        String result = sendPost(BASE_URL + MERCHANT_PAY_INTERFACE, body);
        JSONObject resJsonObject = JSONObject.parseObject(result);
        if (resJsonObject.getString("status").equals("succeeded")) {
            return true;
        } else if (resJsonObject.getString("status").equals("failed")) {
            throw new ServiceException(resJsonObject.getString("error_msg"));
        }
        return false;
        System.err.println(resJsonObject);
        String string = resJsonObject.getString("resCipher");
        String decrypt = decrypt(string);
        System.err.println("解密后"+decrypt);
        JSONObject jsonObject = JSONObject.parseObject(decrypt);
        return jsonObject;
    }
    /**
@@ -261,6 +409,7 @@
        data = JSON.toJSONString(JSONObject.parseObject(data, TreeMap.class));
        // Base64 --> Key
        try {
//            byte[] bytes = Base64.getDecoder().decode(MERCHANT_PRIVATE_KEY);
            byte[] bytes = Base64.getDecoder().decode(MERCHANT_PRIVATE_KEY);
            PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes);
            KeyFactory keyFactory;