package com.stylefeng.guns.modular.huifu.biz; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.huifu.bspay.sdk.opps.core.BasePay; import com.huifu.bspay.sdk.opps.core.config.MerConfig; import com.huifu.bspay.sdk.opps.core.net.BasePayRequest; import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.modular.huifu.properties.HuiFuProperties; import com.stylefeng.guns.modular.system.util.RedisUtil; import com.stylefeng.guns.modular.system.util.ResultUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.math.RoundingMode; import java.security.KeyFactory; import java.security.PrivateKey; import java.security.Signature; import java.security.spec.PKCS8EncodedKeySpec; import java.text.SimpleDateFormat; import java.util.*; /** * 斗拱支付工具类 */ @Component public class DouGongPayUtil { @Value("${huifu.product_id}") private static String productId; @Value("${huifu.sys_id}") private static String sysId; @Value("${huifu.rsa_private_key}") private static String privateKeyBase64; @Autowired private RedisUtil redisUtil; private static String callbackPath = "http://221.182.45.100:8006";//支付回调网关地址 // private static String callbackPath = "https://zhentonggongsi.com:443/user";//支付回调网关地址 public static void main(String[] args) throws Exception { HttpRequest post = HttpUtil.createPost("https://api.huifu.com/v4/trade/payment/create"); String req_seq_id = System.currentTimeMillis() + ToolUtil.getRandomNumber(10); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); String req_date = simpleDateFormat.format(new Date()); String money ="0.01"; money = new BigDecimal(money).setScale(2, RoundingMode.HALF_UP).toString(); String a = "{\n" + " \"req_seq_id\": \"" + req_seq_id + "\",\n" + " \"req_date\": \"" + req_date + "\",\n" + " \"huifu_id\": \"6666000182995771\",\n" + " \"trade_type\": \"A_NATIVE\",\n" + " \"trans_amt\": \""+money+"\",\n" + " \"goods_desc\": \"test\",\n" + " \"remark\": \"嘉易行\",\n" + " \"notify_url\": \""+"http://221.182.45.100:8006/base/DGCallBackZfb"+"\",\n" + " }"; // 去掉换行、空格等格式字符 a = a.replaceAll("\\s", ""); a = JSON.toJSONString(JSONObject.parseObject(a, TreeMap.class)); String sign = sign(a, "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCR6W3ynQJL7f2C8vFYMcQkcirpkif9ZhLq1374jIlV87nv0T9uIm6DoW8LyNEl9w2Yc5qoBv70tt/oVpemA6IZY6NXzE2USNi/sv2qUTtapcIRYxe4acCfY8K+x+p7W2e6wUWIpl9qgZA+UnFmHQ0HT6Ywzq2jJL92JdIs147Ud1aVi3aX8LYItj0z3ZKwZQkaJawZSWQk2+EdPfN059L2qFkPtnT7JIthAdUTJYZA13K4tzw6mXp/DbgwVmLhrlmwl/ccSv2Q0ABfEk7jIxF1nZmCmSy3HrEw9xWyrg1BC+DgXBdyF0OEtpNfv+UW080syUVBNN0irHVuDP81BaAjAgMBAAECggEAGlBZprZQErdxz6rWgYxADj6UpJjaI2XEJZwFZveZUOnqb2hyIv+MpKp5Z0upBErApey7SHAyjJlqWfE72hGvqxp/+7Z5izNz+2ZhPtT1ekyIajBPt89CkLwiA9vz2plKZLC0RIeUj5WcGNEvaDX3AomHtCehwtk+uiTp+XJKbOBtkkQszcdCGY1DVoQ0ppFoINnM9VLbEzaFaG7VS3eFkU4cf2CwcrnJB1RncyPFK+bGFvjkLM/eQbsh8YxkBqaGz/8UM1Na1SEidqdyUF71ltqnI0u8pLe0V+5jugVW+3lPL/p1C3i7mAbQOs4yqRWlFaGVTzOawoQUOPVwDpzeeQKBgQDs1P7F4wURqX1qZR0hSTqOigg48ychaOF66new3SuWk2CVBy8Q8b7odGSPyxJSGZvFLoznPYuSaXCtQ935WWfjB7Z5JpSWCi9BmJnkh41k/KvgMqAEGkZP6ul/zFnDWj94VwXEBz3TuRk574vK2coWoxjM6h1dlJjRBVVTs8dnrQKBgQCduKCjPDUuOHbcNn3VsaHEZX1XyiXN5gds08o61PjiHM42wYXxfUt59nBJmg2yAVRIrKYHfswJcxb5XUTDI5ZhCBnIPrdrQzj7FNadm/7mKDvSsvZdpfTiHY341XnvCq7OcNNj8g5fVsWF769strepQReSug7xgX7ojPvVcAZhDwKBgD57KwP2Er5IIuhQ6NCBS0uTqvurWqV70BDnjtBAaWF+XDq0/HvR63XUTzuIbbrvOqNY1p+jIxFrc+iiQQupxLimrkNkJEs5QKJjqiYahPkhmA68DG9Ip0gqR5QJy5y4UIplGwZOiscyzC72vcC0mJZETSSylzC7JV3vtEUy5ua5AoGAEwlDqjAMIyYBgpa5HV+xLKkrNbtaUL2gy8vMLsmhuHjNkuJMrlb3EyNhbiC/4moyqArehy0Qp1tSvIo7UGotLkzx/69CKBoW+IcNWDyJyXG1trqO7cKoCdqTViM98lIRwyzu9rMydONeN8o0HCT5id4nYDhAsXl1vc+2XY6F1pUCgYEA0dxGHBTKD/WzIvTYGYD6Xx224Y84mO6x2Mu16zFoq/NjuIdKi2O+92yrKDCMMCqaY77fXvWD3eI7QYYlbKAOqdLKVipTbhnBccDyNbtYHVg59t4xS+K6HyD+quVkL9n40UkxSZbKZBQhqt+vlQy0FUgONFii1ACZO0A8Sc/bvn4="); System.out.println(a); String p = "{\n" + " \"sys_id\": \"6666000182995771\",\n" + " \"product_id\": \"KAZX\",\n" + " \"sign\": \"" + sign + "\",\n" + " \"data\": {\n" + " \"req_seq_id\": \"" + req_seq_id + "\",\n" + " \"req_date\": \"" + req_date + "\",\n" + " \"huifu_id\": \"6666000182995771\",\n" + " \"trade_type\": \"A_NATIVE\",\n" + " \"trans_amt\": \""+money+"\",\n" + " \"goods_desc\": \"test\",\n" + " \"remark\": \"嘉易行\",\n" + " \"notify_url\": \""+"http://221.182.45.100:8006/base/DGCallBackZfb"+"\",\n" + " }\n" + "}\n"; System.out.println(p); post.body(p); HttpResponse execute = post.execute(); System.out.println(execute.body()); String body = execute.body(); JSONObject jsonObject = JSONObject.parseObject(body); System.out.println(jsonObject); } /** * 订单支付微信 * @param money * @param openId * @param goodsDesc * @param type * @param orderId * @return */ public ResultUtil wxPayOrder(String money, String openId, String goodsDesc, int type, String orderId, int callType) { HttpRequest post = HttpUtil.createPost("https://api.huifu.com/v4/trade/payment/create"); String req_seq_id = orderId + "_" + type + "_" + System.currentTimeMillis() + ToolUtil.getRandomNumber(10); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); String req_date = simpleDateFormat.format(new Date()); String notifyUrl = ""; money = new BigDecimal(money).setScale(2, RoundingMode.HALF_UP).toString(); switch (callType) { case 1: // 订单支付 notifyUrl = callbackPath + "/base/DGCallBack"; break; case 2: // 支付小件物流差价支付回调 notifyUrl = callbackPath +"/base/DGPayOrderLogisticsSpread"; break; case 3: // 购买出行卡支付回调 notifyUrl = callbackPath+"/base/DGPayTaxiCardPaymentSpread"; break; case 4: // 感谢费支付回调 notifyUrl = callbackPath + "/base/DGPayThankYouFee"; break; case 5: // 取消订单 notifyUrl = callbackPath + "/base/DGCancelOrderTaxi"; break; case 6: // 充值 notifyUrl = callbackPath + "/base/DGCancelUserBalance"; break; } String a = "{\n" + " \"req_seq_id\": \"" + req_seq_id + "\",\n" + " \"req_date\": \"" + req_date + "\",\n" + " \"huifu_id\": \"6666000182995771\",\n" + " \"trade_type\": \"T_MINIAPP\",\n" + " \"trans_amt\": \"" + money + "\",\n" + " \"goods_desc\": \"" + goodsDesc + "\",\n" + " \"remark\": \"嘉易行\",\n" + " \"notify_url\": \""+notifyUrl+"\",\n" + " \"method_expand\": \"{\\\"sub_openid\\\":\\\"" + openId + "\\\"}\"\n" + " }"; // 去掉换行、空格等格式字符 a = a.replaceAll("\\s", ""); a = JSON.toJSONString(JSONObject.parseObject(a, TreeMap.class)); String sign = sign(a, "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCR6W3ynQJL7f2C8vFYMcQkcirpkif9ZhLq1374jIlV87nv0T9uIm6DoW8LyNEl9w2Yc5qoBv70tt/oVpemA6IZY6NXzE2USNi/sv2qUTtapcIRYxe4acCfY8K+x+p7W2e6wUWIpl9qgZA+UnFmHQ0HT6Ywzq2jJL92JdIs147Ud1aVi3aX8LYItj0z3ZKwZQkaJawZSWQk2+EdPfN059L2qFkPtnT7JIthAdUTJYZA13K4tzw6mXp/DbgwVmLhrlmwl/ccSv2Q0ABfEk7jIxF1nZmCmSy3HrEw9xWyrg1BC+DgXBdyF0OEtpNfv+UW080syUVBNN0irHVuDP81BaAjAgMBAAECggEAGlBZprZQErdxz6rWgYxADj6UpJjaI2XEJZwFZveZUOnqb2hyIv+MpKp5Z0upBErApey7SHAyjJlqWfE72hGvqxp/+7Z5izNz+2ZhPtT1ekyIajBPt89CkLwiA9vz2plKZLC0RIeUj5WcGNEvaDX3AomHtCehwtk+uiTp+XJKbOBtkkQszcdCGY1DVoQ0ppFoINnM9VLbEzaFaG7VS3eFkU4cf2CwcrnJB1RncyPFK+bGFvjkLM/eQbsh8YxkBqaGz/8UM1Na1SEidqdyUF71ltqnI0u8pLe0V+5jugVW+3lPL/p1C3i7mAbQOs4yqRWlFaGVTzOawoQUOPVwDpzeeQKBgQDs1P7F4wURqX1qZR0hSTqOigg48ychaOF66new3SuWk2CVBy8Q8b7odGSPyxJSGZvFLoznPYuSaXCtQ935WWfjB7Z5JpSWCi9BmJnkh41k/KvgMqAEGkZP6ul/zFnDWj94VwXEBz3TuRk574vK2coWoxjM6h1dlJjRBVVTs8dnrQKBgQCduKCjPDUuOHbcNn3VsaHEZX1XyiXN5gds08o61PjiHM42wYXxfUt59nBJmg2yAVRIrKYHfswJcxb5XUTDI5ZhCBnIPrdrQzj7FNadm/7mKDvSsvZdpfTiHY341XnvCq7OcNNj8g5fVsWF769strepQReSug7xgX7ojPvVcAZhDwKBgD57KwP2Er5IIuhQ6NCBS0uTqvurWqV70BDnjtBAaWF+XDq0/HvR63XUTzuIbbrvOqNY1p+jIxFrc+iiQQupxLimrkNkJEs5QKJjqiYahPkhmA68DG9Ip0gqR5QJy5y4UIplGwZOiscyzC72vcC0mJZETSSylzC7JV3vtEUy5ua5AoGAEwlDqjAMIyYBgpa5HV+xLKkrNbtaUL2gy8vMLsmhuHjNkuJMrlb3EyNhbiC/4moyqArehy0Qp1tSvIo7UGotLkzx/69CKBoW+IcNWDyJyXG1trqO7cKoCdqTViM98lIRwyzu9rMydONeN8o0HCT5id4nYDhAsXl1vc+2XY6F1pUCgYEA0dxGHBTKD/WzIvTYGYD6Xx224Y84mO6x2Mu16zFoq/NjuIdKi2O+92yrKDCMMCqaY77fXvWD3eI7QYYlbKAOqdLKVipTbhnBccDyNbtYHVg59t4xS+K6HyD+quVkL9n40UkxSZbKZBQhqt+vlQy0FUgONFii1ACZO0A8Sc/bvn4="); System.out.println(a); String p = "{\n" + " \"sys_id\": \"6666000182995771\",\n" + " \"product_id\": \"KAZX\",\n" + " \"sign\": \"" + sign + "\",\n" + " \"data\": {\n" + " \"req_seq_id\": \"" + req_seq_id + "\",\n" + " \"req_date\": \"" + req_date + "\",\n" + " \"huifu_id\": \"6666000182995771\",\n" + " \"trade_type\": \"T_MINIAPP\",\n" + " \"trans_amt\": \"" + money + "\",\n" + " \"goods_desc\": \"" + goodsDesc + "\",\n" + " \"remark\": \"嘉易行\",\n" + " \"notify_url\": \""+notifyUrl+"\",\n" + " \"method_expand\": \"{\\\"sub_openid\\\":\\\"" + openId + "\\\"}\"\n" + " }\n" + "}\n"; System.out.println(p); post.body(p); HttpResponse execute = post.execute(); System.out.println(execute.body()); String randomString = ToolUtil.getRandomString(18); redisUtil.setStrValue("dg_wx_pay:"+randomString,execute.body(),300); JSONObject jsonObject = JSONObject.parseObject(execute.body()); jsonObject.put("req_seq_id",req_seq_id); jsonObject.put("dg_wx_pay","dg_wx_pay:"+randomString); return ResultUtil.success(jsonObject); } /** * 订单支付 支付宝 * @param money * @param buyerId * @param goodsDesc * @param type * @param orderId * @return */ public static ResultUtil aliPayOrder(String money, String buyerId, String goodsDesc, int type, String orderId, int callType) { HttpRequest post = HttpUtil.createPost("https://api.huifu.com/v4/trade/payment/create"); String req_seq_id = orderId + "_" + type + "_" + System.currentTimeMillis() + ToolUtil.getRandomNumber(10); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); String req_date = simpleDateFormat.format(new Date()); String notifyUrl = ""; money = new BigDecimal(money).setScale(2, RoundingMode.HALF_UP).toString(); switch (callType) { case 1: // 订单支付 notifyUrl = callbackPath + "/base/DGCallBackZfb"; break; case 2: // 支付小件物流差价支付回调 notifyUrl = callbackPath +"/base/DGPayOrderLogisticsSpreadZfb"; break; case 3: // 购买出行卡支付回调 notifyUrl = callbackPath+"/base/DGPayTaxiCardPaymentSpreadZfb"; break; case 4: // 感谢费支付回调 notifyUrl = callbackPath + "/base/DGPayThankYouFeeZfb"; break; case 5: // 取消订单 notifyUrl = callbackPath + "/base/DGCancelOrderTaxiZfb"; break; case 6: // 充值 notifyUrl = callbackPath + "/base/DGCancelUserBalanceZfb"; break; } String a = "{\n" + " \"req_seq_id\": \"" + req_seq_id + "\",\n" + " \"req_date\": \"" + req_date + "\",\n" + " \"huifu_id\": \"6666000182995771\",\n" + " \"trade_type\": \"A_NATIVE\",\n" + " \"trans_amt\": \"" + money + "\",\n" + " \"goods_desc\": \"" + goodsDesc + "\",\n" + " \"remark\": \"嘉易行\",\n" + " \"notify_url\": \""+notifyUrl+"\",\n" + " }"; // 去掉换行、空格等格式字符 a = a.replaceAll("\\s", ""); a = JSON.toJSONString(JSONObject.parseObject(a, TreeMap.class)); String sign = sign(a, "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCR6W3ynQJL7f2C8vFYMcQkcirpkif9ZhLq1374jIlV87nv0T9uIm6DoW8LyNEl9w2Yc5qoBv70tt/oVpemA6IZY6NXzE2USNi/sv2qUTtapcIRYxe4acCfY8K+x+p7W2e6wUWIpl9qgZA+UnFmHQ0HT6Ywzq2jJL92JdIs147Ud1aVi3aX8LYItj0z3ZKwZQkaJawZSWQk2+EdPfN059L2qFkPtnT7JIthAdUTJYZA13K4tzw6mXp/DbgwVmLhrlmwl/ccSv2Q0ABfEk7jIxF1nZmCmSy3HrEw9xWyrg1BC+DgXBdyF0OEtpNfv+UW080syUVBNN0irHVuDP81BaAjAgMBAAECggEAGlBZprZQErdxz6rWgYxADj6UpJjaI2XEJZwFZveZUOnqb2hyIv+MpKp5Z0upBErApey7SHAyjJlqWfE72hGvqxp/+7Z5izNz+2ZhPtT1ekyIajBPt89CkLwiA9vz2plKZLC0RIeUj5WcGNEvaDX3AomHtCehwtk+uiTp+XJKbOBtkkQszcdCGY1DVoQ0ppFoINnM9VLbEzaFaG7VS3eFkU4cf2CwcrnJB1RncyPFK+bGFvjkLM/eQbsh8YxkBqaGz/8UM1Na1SEidqdyUF71ltqnI0u8pLe0V+5jugVW+3lPL/p1C3i7mAbQOs4yqRWlFaGVTzOawoQUOPVwDpzeeQKBgQDs1P7F4wURqX1qZR0hSTqOigg48ychaOF66new3SuWk2CVBy8Q8b7odGSPyxJSGZvFLoznPYuSaXCtQ935WWfjB7Z5JpSWCi9BmJnkh41k/KvgMqAEGkZP6ul/zFnDWj94VwXEBz3TuRk574vK2coWoxjM6h1dlJjRBVVTs8dnrQKBgQCduKCjPDUuOHbcNn3VsaHEZX1XyiXN5gds08o61PjiHM42wYXxfUt59nBJmg2yAVRIrKYHfswJcxb5XUTDI5ZhCBnIPrdrQzj7FNadm/7mKDvSsvZdpfTiHY341XnvCq7OcNNj8g5fVsWF769strepQReSug7xgX7ojPvVcAZhDwKBgD57KwP2Er5IIuhQ6NCBS0uTqvurWqV70BDnjtBAaWF+XDq0/HvR63XUTzuIbbrvOqNY1p+jIxFrc+iiQQupxLimrkNkJEs5QKJjqiYahPkhmA68DG9Ip0gqR5QJy5y4UIplGwZOiscyzC72vcC0mJZETSSylzC7JV3vtEUy5ua5AoGAEwlDqjAMIyYBgpa5HV+xLKkrNbtaUL2gy8vMLsmhuHjNkuJMrlb3EyNhbiC/4moyqArehy0Qp1tSvIo7UGotLkzx/69CKBoW+IcNWDyJyXG1trqO7cKoCdqTViM98lIRwyzu9rMydONeN8o0HCT5id4nYDhAsXl1vc+2XY6F1pUCgYEA0dxGHBTKD/WzIvTYGYD6Xx224Y84mO6x2Mu16zFoq/NjuIdKi2O+92yrKDCMMCqaY77fXvWD3eI7QYYlbKAOqdLKVipTbhnBccDyNbtYHVg59t4xS+K6HyD+quVkL9n40UkxSZbKZBQhqt+vlQy0FUgONFii1ACZO0A8Sc/bvn4="); System.out.println(a); String p = "{\n" + " \"sys_id\": \"6666000182995771\",\n" + " \"product_id\": \"KAZX\",\n" + " \"sign\": \"" + sign + "\",\n" + " \"data\": {\n" + " \"req_seq_id\": \"" + req_seq_id + "\",\n" + " \"req_date\": \"" + req_date + "\",\n" + " \"huifu_id\": \"6666000182995771\",\n" + " \"trade_type\": \"A_NATIVE\",\n" + " \"trans_amt\": \"" + money + "\",\n" + " \"goods_desc\": \"" + goodsDesc + "\",\n" + " \"remark\": \"嘉易行\",\n" + " \"notify_url\": \""+notifyUrl+"\",\n" + " }\n" + "}\n"; System.out.println(p); post.body(p); HttpResponse execute = post.execute(); JSONObject jsonObject = JSONObject.parseObject(execute.body()); return ResultUtil.success(jsonObject); } public static Map payFromUser(String req_seq_id, String req_date, String ord_amt, String huifu_id) throws Exception { // 1. 数据初始化,填入对应的商户配置 MerConfig merConfig = new MerConfig(); // merConfig.setProcutId(huiFuProperties.getProductId()); // merConfig.setSysId(huiFuProperties.getSysId()); // merConfig.setRsaPrivateKey(huiFuProperties.getRsaPrivateKey()); // merConfig.setRsaPublicKey(huiFuProperties.getRsaPublicKey()); merConfig.setProcutId("KAZX"); merConfig.setSysId("6666000182995771"); merConfig.setRsaPrivateKey("MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCR6W3ynQJL7f2C8vFYMcQkcirpkif9ZhLq1374jIlV87nv0T9uIm6DoW8LyNEl9w2Yc5qoBv70tt/oVpemA6IZY6NXzE2USNi/sv2qUTtapcIRYxe4acCfY8K+x+p7W2e6wUWIpl9qgZA+UnFmHQ0HT6Ywzq2jJL92JdIs147Ud1aVi3aX8LYItj0z3ZKwZQkaJawZSWQk2+EdPfN059L2qFkPtnT7JIthAdUTJYZA13K4tzw6mXp/DbgwVmLhrlmwl/ccSv2Q0ABfEk7jIxF1nZmCmSy3HrEw9xWyrg1BC+DgXBdyF0OEtpNfv+UW080syUVBNN0irHVuDP81BaAjAgMBAAECggEAGlBZprZQErdxz6rWgYxADj6UpJjaI2XEJZwFZveZUOnqb2hyIv+MpKp5Z0upBErApey7SHAyjJlqWfE72hGvqxp/+7Z5izNz+2ZhPtT1ekyIajBPt89CkLwiA9vz2plKZLC0RIeUj5WcGNEvaDX3AomHtCehwtk+uiTp+XJKbOBtkkQszcdCGY1DVoQ0ppFoINnM9VLbEzaFaG7VS3eFkU4cf2CwcrnJB1RncyPFK+bGFvjkLM/eQbsh8YxkBqaGz/8UM1Na1SEidqdyUF71ltqnI0u8pLe0V+5jugVW+3lPL/p1C3i7mAbQOs4yqRWlFaGVTzOawoQUOPVwDpzeeQKBgQDs1P7F4wURqX1qZR0hSTqOigg48ychaOF66new3SuWk2CVBy8Q8b7odGSPyxJSGZvFLoznPYuSaXCtQ935WWfjB7Z5JpSWCi9BmJnkh41k/KvgMqAEGkZP6ul/zFnDWj94VwXEBz3TuRk574vK2coWoxjM6h1dlJjRBVVTs8dnrQKBgQCduKCjPDUuOHbcNn3VsaHEZX1XyiXN5gds08o61PjiHM42wYXxfUt59nBJmg2yAVRIrKYHfswJcxb5XUTDI5ZhCBnIPrdrQzj7FNadm/7mKDvSsvZdpfTiHY341XnvCq7OcNNj8g5fVsWF769strepQReSug7xgX7ojPvVcAZhDwKBgD57KwP2Er5IIuhQ6NCBS0uTqvurWqV70BDnjtBAaWF+XDq0/HvR63XUTzuIbbrvOqNY1p+jIxFrc+iiQQupxLimrkNkJEs5QKJjqiYahPkhmA68DG9Ip0gqR5QJy5y4UIplGwZOiscyzC72vcC0mJZETSSylzC7JV3vtEUy5ua5AoGAEwlDqjAMIyYBgpa5HV+xLKkrNbtaUL2gy8vMLsmhuHjNkuJMrlb3EyNhbiC/4moyqArehy0Qp1tSvIo7UGotLkzx/69CKBoW+IcNWDyJyXG1trqO7cKoCdqTViM98lIRwyzu9rMydONeN8o0HCT5id4nYDhAsXl1vc+2XY6F1pUCgYEA0dxGHBTKD/WzIvTYGYD6Xx224Y84mO6x2Mu16zFoq/NjuIdKi2O+92yrKDCMMCqaY77fXvWD3eI7QYYlbKAOqdLKVipTbhnBccDyNbtYHVg59t4xS+K6HyD+quVkL9n40UkxSZbKZBQhqt+vlQy0FUgONFii1ACZO0A8Sc/bvn4="); merConfig.setRsaPublicKey("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsWrruP9JBxrUd8uEX5Z8y7pg/UIr5RNHSgDnHqNI1hbi2MfTzB5vZ275wSFFaLDD9BesgDWqsUepPS/opROlDCg9y6WYH8mkN23NmHL9F8kT48OMmH722am+Hp0XVMMwXqA0oNt4f7oW6kDemjZW8/RT4vIE7cyxoxSsVRvjqSpx9wDgFLPWh3o0pHQaoxLyeUsGBATHFrxEDlosBvsuXjMcgjPKXALrcemzKOhBmBkLgyxNVmh61ZK+FNXd+/X4PeZlnWf54NRQAUKe1308E6IIaszo+CjneKuhj1m/X4f7AIvxAqlhuCV5E/DfKRmGopxaWqdtE960Y/H4SmBh2wIDAQAB"); BasePay.initWithMerConfig(merConfig); ord_amt=new BigDecimal(ord_amt).setScale(2,RoundingMode.HALF_UP).toString(); // 2.组装请求参数 Map paramsInfo = new HashMap<>(); // 请求流水号 paramsInfo.put("req_seq_id",req_seq_id); // 请求日期 paramsInfo.put("req_date", req_date); // 出款方商户号 paramsInfo.put("out_huifu_id", "6666000182995771"); // 支付金额 paramsInfo.put("ord_amt", ord_amt); // 分账对象 paramsInfo.put("acct_split_bunch", "{\"acct_infos\":[{\"div_amt\":\""+ord_amt+"\",\"huifu_id\":\""+huifu_id+"\"}]}"); // 安全信息 paramsInfo.put("risk_check_data", "{\"sub_product\":\"1\",\"transfer_type\":\"05\"}"); // 手续费承担方标识余额支付手续费承担方标识;商户余额支付扣收规则为接口指定承担方时必填!枚举值:<br/>OUT:出款方;<br/>IN:分账接受方。<br/><font color="green">示例值:IN</font> paramsInfo.put("trans_fee_take_flag", "OUT"); // 核验值verify_type不为空时必填。当verify_type=SMS时,填写用户收到的短信验证码 // paramsInfo.put("verify_value", "test"); // 3. 发起API调用 Map response = BasePayRequest.requestBasePay("v2/trade/acctpayment/pay", paramsInfo, null, false);; return response; } public static String sign(String data, String privateKeyBase64) { // Base64 --> Key try { byte[] bytes = Base64.getDecoder().decode(privateKeyBase64); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes); KeyFactory keyFactory; keyFactory = KeyFactory.getInstance("RSA"); PrivateKey privateKey = keyFactory.generatePrivate(keySpec); // Sign Signature signature = Signature.getInstance("SHA256WithRSA"); signature.initSign(privateKey); signature.update(data.getBytes("UTF-8")); return Base64.getEncoder().encodeToString(signature.sign()); } catch (Exception e) { return null; } } }