微信官方给的sdk有点问题,通过百度找到了maven依赖,这个比较靠谱

添加依赖

com.github.wxpay

wxpay-sdk

0.0.3

com.google.code.gson

gson

2.8.2

重写config

public class MyConfig implements WXPayConfig {

private byte[] certData;

public MyConfig() throws Exception {

String certPath = "F:\\work\\WxPayAPI_JAVA\\java_sdk_v3.0.9\\src\\main\\resource\\apiclient_cert.p12";

File file = new File(certPath);

InputStream certStream = new FileInputStream(file);

this.certData = new byte[(int) file.length()];

certStream.read(this.certData);

certStream.close();

}

public String getAppID() {

return "wx888888888";

}

public String getMchID() {

return "1234567897";

}

public String getKey() {

return "00000000000000000000000";

}

public InputStream getCertStream() {

ByteArrayInputStream certBis = new ByteArrayInputStream(this.certData);

return certBis;

}

public int getHttpConnectTimeoutMs() {

return 8000;

}

public int getHttpReadTimeoutMs() {

return 10000;

}

}

创建测试文件 WXPayExample.java

MyConfig config = new MyConfig();

WXPay wxpay = new WXPay(config, HMACSHA256);

Map data = new HashMap();

data.put("bill_date", "20181117");

data.put("bill_type", "ALL");

对账单数据

请求下载对账单的api方法

Map resp = wxpay.downloadBill(data);

String s = resp.get("data");

对于数据返回的 比较麻烦,所以用bean对其进行处理,方便装换成我们需要的数据类型

接收的数据bean

public class PaymentPo

//交易时间

private String trade_time;

// 公众账号ID

private String appid;

//商户号

private String mch_id;

//特约商户号

private String mch_appid;

// 设备号

private String device_info;

//微信订单号

private String transaction_id;

// 商户订单号

private String out_trade_no;

// 用户标识

private String openid;

// 交易类型

private String trade_type;

//交易状态

private String trade_status;

//付款银行

private String pay_bank;

//货币种类

private String money_type;

//应结订单金额

private String order_pay;

//代金券金额

private String voucher_amount;

//微信退款单号

private String refund_number;

//商户退款单号

private String out_refund_no;

//退款金额

private String refund_amount;

//充值券退款金额

private String refund_amount_voucher;

//退款类型

private String refunds_type;

//退款状态

private String refunds_status;

//商品名称

private String commodity_name;

//商户数据包

private String data_packet;

//手续费

private String service_charge;

//费率

private String rate;

//订单金额

private String order_amount;

//申请退款金额

private String application_refund_amount;

//费率备注

private String rate_notes;

对于返回的 String s = resp.get("data");的结果处理:

int i = s.indexOf("`");

int j = s.indexOf("总");

String substring = s.substring(i, j - 2);

String[] temp = substring.split(",``");

//String[] payment = temp[0].replace("`", "").split(",");

//System.out.println(payment.length);

ArrayList list = new ArrayList();

for (int k = 0; k < temp.length; k++) {

String[] payment = temp[k].replace("`", "").split(",");

PaymentPo bean = new PaymentPo();

for (int p = 0; p < payment.length; p++) {

bean.setTrade_time(payment[0]);

bean.setAppid(payment[1]);

bean.setMch_id(payment[2]);

bean.setMch_appid(payment[3]);

bean.setDevice_info(payment[4]);

bean.setTransaction_id(payment[5]);

bean.setOut_trade_no(payment[6]);

bean.setOpenid(payment[7]);

bean.setTrade_type(payment[8]);

bean.setTrade_status(payment[9]);

bean.setPay_bank(payment[10]);

bean.setMoney_type(payment[11]);

bean.setOrder_pay(payment[12]);

bean.setVoucher_amount(payment[13]);

bean.setRefund_number(payment[14]);

bean.setOut_refund_no(payment[15]);

bean.setRefund_amount(payment[16]);

bean.setRefund_amount_voucher(payment[17]);

bean.setRefunds_type(payment[18]);

bean.setRefunds_status(payment[19]);

bean.setCommodity_name(payment[20]);

bean.setData_packet(payment[21]);

bean.setService_charge(payment[22]);

bean.setRate(payment[23]);

bean.setOrder_amount(payment[24]);

bean.setApplication_refund_amount(payment[25]);

}

list.add(bean);

}

Gson gson2 = new Gson();

String str = gson2.toJson(list);

System.out.println(str);

转换成json数据输出

下载资金账单

这个maven中没有提供方法,但是微信官方api文档中写了有,那就我试试

所以,重写了maven中的WXPay.java(就是复制一份到自己想买的目录中),添加下载资金账单的方法

public Map downloadfundflow(Map reqData) throws Exception {

return this.downloadfundflow(reqData, this.config.getHttpConnectTimeoutMs(), this.config.getHttpReadTimeoutMs());

}

public Map downloadfundflow(Map reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {

String url;

if (this.useSandbox) {

url = "https://api.mch.weixin.qq.com/sandboxnew/pay/downloadfundflow";

} else {

url = "https://api.mch.weixin.qq.com/pay/downloadfundflow";

}

String respStr = this.requestWithCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs).trim();

Object ret;

if (respStr.indexOf("

ret = WXPayUtil.xmlToMap(respStr);

} else {

ret = new HashMap();

((Map)ret).put("return_code", "SUCCESS");

((Map)ret).put("return_msg", "ok");

((Map)ret).put("data", respStr);

}

return (Map)ret;

}

下载资金账单是需要证书的,注意用requestWithCert方法,并且 签名类型 sign_type设置成HMAC-SHA256

下面就和下载对账单方法一样了

MyConfig config = new MyConfig();

WXPay wxpay = new WXPay(config, HMACSHA256);

Map data = new HashMap();

data.put("bill_date", "20181117");

data.put("account_type", "Basic");

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

Date date = sdf.parse(data.get("bill_date"));

int year = date.getYear() + 1900 ;

Map resp = wxpay.downloadfundflow(data);

String s = resp.get("data");

int i = s.indexOf("`");

int j = s.indexOf("资金流水总笔数");

String substring = s.substring(i, j);

//方法比较简单暴力,通过年份(比如2018 + `) 去切割,最后再把年份拼接上去

String[] temp = substring.split("`" +year);

ArrayList list = new ArrayList();

for (int m = 1; m < temp.length; m++) {

String[] payment = temp[m].replace("`", "").split(",");

FundFlowBean bean = new FundFlowBean();

for (int n = 0; n < payment.length; n++) {

bean.setTrade_time(year + payment[0]);

bean.setPayment_number(payment[1]);

bean.setFlow_number(payment[2]);

bean.setBusiness_name(payment[3]);

bean.setBusiness_type(payment[4]);

bean.setInout_type(payment[5]);

bean.setInout_money(payment[6]);

bean.setAccount_balance(payment[7]);

bean.setApplicant(payment[8]);

bean.setRemarks(payment[9]);

if (payment.length==10) {

if (payment[9].equals("system")) {

bean.setVoucher_number("");

}

}else if (payment.length==11){

bean.setVoucher_number(payment[10]);

}

}

list.add(bean);

}

Gson gson2 = new Gson();

String str = gson2.toJson(list);

System.out.println(str);

用于接收资金账单数据的bean类 FundFlowBean .class 同时生成set get方法

public class FundFlowBean

//记账时间

private String trade_time;

//微信支付业务单号

private String payment_number;

//资金流水单号

private String flow_number;

//业务名称

private String business_name;

//业务类型

private String business_type;

//收支类型

private String inout_type;

//收支金额(元)

private String inout_money;

//账户结余(元)

private String account_balance;

//资金变更提交申请人

private String applicant;

//备注

private String remarks;

//业务凭证号

private String voucher_number;

到此,差不多结束,关于config中的各种id,需要去微信后台上去找和设置

微信对账单 java_[Java]获取微信api中的下载对账单和下载资金账单功能相关推荐

  1. java获取微信accessToken

    java获取微信accessToken java获取微信accessToken GET请求 java获取微信accessToken package com.fengdi.lianmeng.task;i ...

  2. java获取微信小程序二维码

    java获取微信小程序二维码 近期正好遇到了,随手记录下 首先获取微信小程序二维码需要小程序的appid 以及secret 然后根据appid和secret去获取小程序的token 即 access_ ...

  3. Java获取微信手机号

    Java获取微信手机号 导入maven <dependency><groupId>org.apache.commons</groupId><artifactI ...

  4. java获取微信小程序二维码图片并保存到本地

    java获取微信小程序二维码保存到本地并返回图片,下次如果检查到本地有图片,那么就返回本地的图片,不再发起请求,否则重新发起请求并保存到本地,直接看代码吧. 获取access_token的方法可以参考 ...

  5. Spring学习笔记(二十三)——实现网站微信扫码登录获取微信用户信息Demo

    目录 微信扫码登录介绍 开发步骤 微信扫码登录示例 微信开放文档 遇到的问题 使用第三方工具实现网站微信扫码登录 开发前介绍 开发步骤 微信扫码登录获取微信用户信息Demo实现流程 实现效果 实现过程 ...

  6. 微信小程序-JAVA实现微信支付功能(微信支付2.0)

    微信小程序-JAVA实现微信支付功能(微信支付2.0) 一.前言 本博客主要介绍JAVA后台与微信小程序(UNI-APP或者原生微信小程序)的微信支付的实现,如果是APP或者H5的开发暂时不支持,具体 ...

  7. Java 8 Stream Api 中的 skip 和 limit 操作

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 Java 8 Stream API 中的sk ...

  8. java jdbc 回滚_java_详解Java的JDBC API中事务的提交和回滚,如果JDBC连接是在自动提交模式 - phpStudy...

    详解Java的JDBC API中事务的提交和回滚 如果JDBC连接是在自动提交模式下,它在默认情况下,那么每个SQL语句都是在其完成时提交到数据库. 这可能是对简单的应用程序,但有三个原因,你可能想关 ...

  9. uniapp - 编译微信小程序项目的微信授权登录、获取微信手机号登录、最新版微信直接登录、手机与验证码登录的示例源码(适用于 uniapp 微信小程序项目,源代码直接开箱即用)超级详细的代码及注释

    效果图 uniapp 项目编译微信小程序,一些常见的登录方式及源代码,示例代码干净整洁无BUG拿来即用. 本文示例实现了 uniapp 微信小程序项目的登录功能,包含微信授权登录.获取微信手机号登录. ...

  10. java获取jar包中的文件资源

    java获取jar包中的文件资源 一.问题示例 1.1 项目开发时 1.2 打包成jar后 二.解决方案 2.1 解决方法 2.2 实现 问题描述:   我们常常在代码中读取一些资源文件(比如图片,音 ...

最新文章

  1. 硬中断 / 软中断的原理和实现
  2. mysql navicat如何为表添加外键?
  3. python获取中文字体点阵坐标_Python实现点阵字体读取与转换的方法
  4. [Hands On ML] 8. 降维
  5. leetcode题解53-最大子序和
  6. java random.nextbyte_java.util.Random.next()方法实例
  7. python基于udp的网络聊天室再用tkinter显示_Python3:Tkinter gui中的UDP包发送/接收
  8. Activiti6--入门学习--基础知识环境搭建部署
  9. PHP架构师的成长之路
  10. DX11编程之计算着色过滤器
  11. 基于Halcon的螺栓螺丝部分划痕、腐蚀缺陷检测
  12. Quicker | 便捷的截屏软件 | 截图 | 截图OCR(图片编辑及文字识别)(二)
  13. kindle paper white部分优化
  14. idea使用谷歌翻译
  15. 如何修改图片的dpi?图片的dpi怎么调?
  16. Gluster集群搭建
  17. wince版千千静听出炉
  18. 与全景图不同,老子云云服务让你动态交互玩模型
  19. brpc搭建、编译和使用
  20. 彻底搞懂equals以及hashCode方法(源码级分析)

热门文章

  1. HDU - 6287 口算训练 (二分+思维)
  2. 时序分析 27 - 时序预测 格兰杰因果关系(上) 理论知识
  3. MATLAB与Excel文件的交换
  4. Tiny6410 SD卡启动裸机程序
  5. linux mbr 转 gpt 数据丢吗,[如何]将磁盘从MBR转换为GPT,而不丢失数据 | MOS86
  6. ubuntu如何看到隐藏文件夹
  7. 高中英语语法(001)-虚拟语气
  8. word里双横线怎么打_word 双下横线怎么打出来
  9. 美国大学 计算机,U.S.News美国大学计算机专业排名
  10. Java对pdf文件进行压缩打包并执行下载