feat 微信对账单解析

This commit is contained in:
bootx
2024-01-17 23:54:25 +08:00
parent c9065c0739
commit 51dc719007
5 changed files with 181 additions and 3 deletions

View File

@@ -97,4 +97,7 @@ public interface WeChatPayCode {
/** 订单总退款次数 */
String TOTAL_REFUND_COUNT = "total_refund_count";
/** */
String account_type_basic = "Basic";
}

View File

@@ -0,0 +1,12 @@
package cn.bootx.platform.daxpay.service.core.channel.alipay.domain;
import lombok.Data;
/**
* 支付宝对账单
* @author xxm
* @since 2024/1/17
*/
@Data
public class AliPayReconcileBill {
}

View File

@@ -0,0 +1,100 @@
package cn.bootx.platform.daxpay.service.core.channel.wechat.domain;
import cn.hutool.core.annotation.Alias;
import lombok.Data;
/**
* 微信对账单明细
* @author xxm
* @since 2024/1/17
*/
@Data
public class WechatPayReconcileBillDetail {
@Alias("交易时间")
private String transactionTime;
@Alias("公众账号ID")
private String appId;
@Alias("商户号")
private String merchantId;
@Alias("特约商户号")
private String subMerchantId;
@Alias("微信订单号")
private String weiXinOrderNo;
@Alias("商户订单号")
private String mchOrderNo;
@Alias("用户标识")
private String userId;
@Alias("设备号")
private String deviceInfo;
@Alias("交易状态")
private String transactionState;
@Alias("交易类型")
private String type;
@Alias("交易状态")
private String status;
@Alias("付款银行")
private String bank;
@Alias("货币种类")
private String currency;
@Alias("应结订单金额")
private String amount;
@Alias("代金券金额")
private String envelopeAmount;
@Alias("微信退款单号")
private String name;
@Alias("商户退款单号")
private String packet;
@Alias("退款金额")
private String poundage;
@Alias("充值券退款金额")
private String amount2;
@Alias("退款类型")
private String rate;
@Alias("退款状态")
private String orderAmount;
@Alias("商品名称")
private String packet2;
@Alias("商户数据包")
private String packet3;
@Alias("手续费")
private String packet4;
@Alias("费率")
private String packet5;
@Alias("订单金额")
private String packet6;
@Alias("申请退款金额")
private String packet7;
@Alias("费率备注")
private String packet8;
}

View File

@@ -0,0 +1,35 @@
package cn.bootx.platform.daxpay.service.core.channel.wechat.domain;
import cn.hutool.core.annotation.Alias;
import lombok.Data;
/**
* 微信对账单汇总
* @author xxm
* @since 2024/1/17
*/
@Data
public class WechatPayReconcileBillTotal {
@Alias("总交易单数")
private String totalNum;
@Alias("应结订单总金额")
private String totalAmount;
@Alias("退款总金额")
private String totalRefundAmount;
@Alias("充值券退款总金额")
private String totalRefundCouponAmount;
@Alias("手续费总金额")
private String totalFee;
@Alias("订单总金额")
private String totalOrderAmount;
@Alias("申请退款总金额")
private String applyTotalRefundAmount;
}

View File

@@ -1,7 +1,11 @@
package cn.bootx.platform.daxpay.service.core.channel.wechat.service;
import cn.bootx.platform.daxpay.service.core.channel.wechat.domain.WechatPayReconcileBillDetail;
import cn.bootx.platform.daxpay.service.core.channel.wechat.domain.WechatPayReconcileBillTotal;
import cn.bootx.platform.daxpay.service.core.channel.wechat.entity.WeChatPayConfig;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.text.csv.CsvReader;
import cn.hutool.core.text.csv.CsvUtil;
import cn.hutool.core.util.StrUtil;
import com.ijpay.core.enums.SignType;
import com.ijpay.core.kit.WxPayKit;
@@ -13,6 +17,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.io.ByteArrayInputStream;
import java.util.List;
import java.util.Map;
/**
@@ -41,7 +46,7 @@ public class WechatPayReconcileService {
*/
public void downBill(String date, WeChatPayConfig config){
// 下载交易账单
Map<String, String> bill = DownloadBillModel.builder()
Map<String, String> params = DownloadBillModel.builder()
.mch_id(config.getWxMchId())
.appid(config.getWxAppId())
.nonce_str(WxPayKit.generateStr())
@@ -49,8 +54,13 @@ public class WechatPayReconcileService {
.bill_type("ALL")
.build()
.createSign(config.getApiKeyV2(), SignType.HMACSHA256);
String s = WxPayApi.downloadBill(config.isSandbox(), bill);
System.out.println(s);
String res = WxPayApi.downloadBill(config.isSandbox(), params);
// 获取交易记录
// 获取汇总数据
System.out.println(res);
CsvReader reader = CsvUtil.getReader();
List<WechatPayReconcileBillDetail> read = reader.read(res, WechatPayReconcileBillDetail.class);
}
@@ -73,7 +83,25 @@ public class WechatPayReconcileService {
ByteArrayInputStream inputStream = new ByteArrayInputStream(fileBytes);
// 证书密码为 微信商户号
String s = WxPayApi.downloadFundFlow(fundFlow, inputStream, config.getWxMchId());
// String url = WxPayApi.getReqUrl(PayApiEnum.DOWNLOAD_BILL, null, config.isSandbox());
// String post = HttpUtil.post(url, WxPayKit.toXml(fundFlow));
System.out.println(s);
}
public static void main(String[] args){
String s = "\uFEFF交易时间,公众账号ID,商户号,特约商户号,设备号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,应结订单金额,代金券金额,微信退款单号,商户退款单号,退款金额,充值券退款金额,退款类型,退款状态,商品名称,商户数据包,手续费,费率,订单金额,申请退款金额,费率备注\n" +
"`2024-01-16 22:43:59,`wx9dfe38480f030e85,`1627859777,`0,`,`4200002086202401160745964084,`1747268229775183872,`o2RW45oGxo1Z8Fhcf6Oy9rMM7aT8,`NATIVE,`SUCCESS,`OTHERS,`CNY,`0.02,`0.00,`0,`0,`0.00,`0.00,`,`,`测试支付4,`,`0.00000,`0.90%,`0.02,`0.00,`\n" +
"`2024-01-16 22:45:16,`wx9dfe38480f030e85,`1627859777,`0,`,`4200002086202401160745964084,`1747268229775183872,`o2RW45oGxo1Z8Fhcf6Oy9rMM7aT8,`NATIVE,`REFUND,`OTHERS,`CNY,`0.00,`0.00,`50303108562024011601487282563,`R1747268742516264960,`0.01,`0.00,`ORIGINAL,`SUCCESS,`测试支付4,`,`0.00000,`0.90%,`0.00,`0.01,`\n" +
"`2024-01-16 23:10:18,`wx9dfe38480f030e85,`1627859777,`0,`,`4200002086202401160745964084,`1747268229775183872,`o2RW45oGxo1Z8Fhcf6Oy9rMM7aT8,`NATIVE,`REFUND,`OTHERS,`CNY,`0.00,`0.00,`50303108562024011683774350275,`R1747275041228390400,`0.01,`0.00,`ORIGINAL,`SUCCESS,`测试支付4,`,`0.00000,`0.90%,`0.00,`0.01,`\n" +
"总交易单数,应结订单总金额,退款总金额,充值券退款总金额,手续费总金额,订单总金额,申请退款总金额\n" +
"`3,`0.02,`0.02,`0.00,`0.00000,`0.02,`0.02";
s = s.replaceAll("`", "").replaceAll("\uFEFF", "");
String s1 = StrUtil.subBefore(s, "总交易单数", false);
String s2 = s.substring(s.indexOf("总交易单数"));
CsvReader reader = CsvUtil.getReader();
List<WechatPayReconcileBillDetail> read = reader.read(s1, WechatPayReconcileBillDetail.class);
List<WechatPayReconcileBillTotal> read1 = reader.read(s2, WechatPayReconcileBillTotal.class);
}
}