首先设置任务自动执行时间

//每日十点开始执行获取昨日账单任务
@Scheduled(cron = "0 0 10 * * ?")
public void task() throws Exception{// 获取昨日日期LocalDate today = LocalDate.now();LocalDate yesterday = today.minusDays(1);String taskDate = formatter.format(yesterday);// 获取昨日微信支付账单boolean taskStatus = this.wxpayBillsTask(task.getTaskID(), yesterday);
}

对多个公众号进行统一管理,一次性获取全部对账单

/** 获取昨日微信支付账单* 1.查询微信公众号号配置* 2.分别获取支付账单请求,并保存请求记录* 3.解析微信返回账单数据,并保存到数据库* 4.更新任务进程的微信商户账单采集状态*/
protected boolean wxpayBillsTask(int taskID, LocalDate yesterday) throws Exception{String bill_date = dateFormatter.format(yesterday);String taskDate = formatter.format(yesterday);logger.debug("wxpayBillsTask {}|{}", taskID, bill_date);// 查询微信公众号配置信息List<WeixinAccount> accounts = commonRepository.queryAllWeixinAccounts();CollectLogs log = null;Boolean bRet = false;for (WeixinAccount account : accounts) {if (StringUtils.isEmpty(account.getWeixinAppID()) || StringUtils.isEmpty(account.getWeixinMchID())) {continue;}//日志记录log = new CollectLogs(taskID, "开启微信支付账单信息任务" + taskID + account.getOfficialAccount() + "采集");commonRepository.saveCollectLogs(log);// 向微信发送获取账单请求Map<String, String> param = new HashMap<String, String>();param.put("appid", account.getWeixinAppID());// 公众账户IDparam.put("mch_id", account.getWeixinMchID());// 商户号param.put("nonce_str", WeixinUtil.create_nonce_str());// 随机字符串param.put("bill_date", bill_date);// 对账单日期param.put("bill_type", "ALL");// 账单类型(非必填)param = WeixinUtil.getSign(param, account.getWeixinMchSecret());String sign = param.get("sign");param.remove("sign");String reuqestXml = WeixinUtil.MapToXml(param);reuqestXml = reuqestXml.replace("</xml>", "<sign>" + sign + "</sign></xml>");String billStr = WeixinUtil.post(DOWNLOAD_BILL_URL, reuqestXml);logger.debug("wxpayBillsTask create order result {}", billStr);// 保存请求记录ThirdRequest requestLog = new ThirdRequest(taskID, BILL_THIRD_WXPAY, account.getWeixinAppID(), param.toString(), billStr);//数据FAIL,结束if(billStr.indexOf("`")<0) {              Map<String, String> mapXmlResult = WeixinUtil.doXMLParse(billStr);if("FAIL".equals(mapXmlResult.get("return_code"))){requestLog.setThirdStatus(1);}logger.debug("wxpayBillsTask doXMLParse convert XML to Map {}", mapXmlResult);commonRepository.saveThirdRequest(requestLog);log = new CollectLogs(taskID, "微信支付账单信息任务" + taskID + account.getOfficialAccount() + "FAIL结束");commonRepository.saveCollectLogs(log);continue;}requestLog.setThirdStatus(10);commonRepository.saveThirdRequest(requestLog);// 解析数据// 获取表头和汇总以外的其他内容:交易记录String dataMsg = billStr.substring(billStr.indexOf("`"));String dataContent = dataMsg.substring(0,dataMsg.indexOf("总")).replaceFirst(taskDate,"").replaceAll("`","");String[] tradeStrs = dataContent.split(taskDate);logger.debug("wxpayBillsTask split size {}", tradeStrs.length);for (String trade : tradeStrs) {logger.debug("wxpayBillsTask tradeStrs trade {}", trade);String[] order = trade.split(",");ThirdBills billTrade = new ThirdBills();billTrade.setTaskID(taskID);billTrade.setThirdType(BILL_THIRD_WXPAY);billTrade.setThirdAppID(account.getWeixinAppID());billTrade.setThirdMchID(order[2]);billTrade.setTradeNo(order[6]);billTrade.setTradeTime(taskDate+order[0]);billTrade.setTradeStatus(order[9]);billTrade.setTradeCurrency(order[11]);billTrade.setTradeTotal(order[24]);billTrade.setTradeFee(order[22]);billTrade.setTradeRefund(order[16]);billTrade.setRefundStatus(order[19]);bRet = collectRepository.saveThirdBills(billTrade);if(!bRet) {log = new CollectLogs(taskID, "保存任务"+taskID+"账单数据[商户订单号]: " + order[6] +" 失败");commonRepository.saveCollectLogs(log);}}log = new CollectLogs(taskID, "微信支付账单信息任务" + taskID + account.getOfficialAccount() + "完成结束");commonRepository.saveCollectLogs(log);}//结束微信账单信息采集任务return bRet;
}

总结:
需要看清接口传递的参数,其中向微信发送获取账单请求时,签名sign的获取是难点,以及获取数据之后的解析也是需要注意的,当有账单数据时,返回的是文本表格数据;否则,返回xml格式的数据,所以需要分两种情况去处理。

微信对账单--每日定时任务获取昨日微信支付账单相关推荐

  1. 【微信公众号VUEh5获取展示微信内置地图(gcj02)转为百度地图】

    此文章中实例用测试号进行演示 .getLocation openLocation 主要运用微信JS-SDK,微信JS-SDK是微信公众平台 面向网页开发者提供的基于微信内的网页开发工具包.通过使用微信 ...

  2. 通过微信授权接口,获取用户微信账户信息

    微信官方最近已经回收了前端通过getUserInfo接口获取微信信息的功能,现在推荐的办法是使用后端解密获取,具体办法如下: 第一步:通过jscode2session获取openid $appid = ...

  3. 微信小程序中获取用户微信公众号授权(openid)用来发送模板消息

    需求: 由于小程序不能直接向用户发送模板消息,所以需要用公众号向用户发送模板消息. 于是需要将小程序的openid和公众号的openid绑定在一起.提供两种思路: 方法一: 1.微信小程序和公众号都绑 ...

  4. 微信小程序中获取用户微信运动信息

    可以通过微信接口:wx.getWeRunData 获取用户过去三十天的微信运动步数. 前提: 使用这个接口有两个前提: 1. 需先调用wx.login接口进行登录  步数信息会在用户主动进入小程序时更 ...

  5. 【小程序】微信小程序如何获取用户微信openID?(已解决,完整代码实例)

    一.需要三个参数: 1.获取code 2.小程序AppID 3.小程序密钥AppSecret 二.代码 1.wxml代码 <view>获取Code:{{wxCode}} </view ...

  6. python clicknium 微信发送消息以及获取好友列表

    需求说明 给指定微信好友发消息 获取所有微信好友的微信号 环境准备 Windows 10 Visual Studio Code 1.69.2 Clicknium 0.1.2 Python 3.10.5 ...

  7. 微信公众平台开发三:微信的OAuth2.0登录开发

    1. 微信支付项目三:实现微信OAuth2.0一键登录开发 文章目录 1. 微信支付项目三:实现微信OAuth2.0一键登录开发 2. 登录方式的优缺点和微信一键登录 3. 微信登录步骤 4. 微信一 ...

  8. php http_user_agent 微信浏览器改变为其他浏览器,微信内置浏览器HTTP_USER_AGENT

    随着微信的普及和微信公众号的营销日益增多,我们所面对的开发不再仅仅局限于传统的网站,微信开发也成为了我们程序猿的一项必修课程. 我们可以借助微信开发者工具进行微信小程序和微信公众号网页开发,但是在微信 ...

  9. 微信对账单 java_微信支付对账,你是如何处理的?

    支付对账,即检查第三方支付与数据库中账单是否一一对应,涉及到微信对账单的处理,成功时,微信账单接口返回数据以文本表格的方式返回,第一行为表头,后面各行为对应的字段内容,字段内容跟查询订单或退款结果一致 ...

最新文章

  1. OpenCV Manager package was not found Try to install it?
  2. ZOJ 3798--解题报告
  3. 乾坤大挪移:SAP CRM WebClient UI 和 SAP Fiori UI 混搭并存
  4. 今年怪事特别多 时代盘点09十大奇闻
  5. WPF 实现水纹效果
  6. java毛玻璃_模糊效果(毛玻璃效果)
  7. 凸优化问题中的Bregman迭代算法
  8. 音创a55怎么安装系统_教您怎么用光驱重装系统,安装系统教程!
  9. JDK1.5新特性介绍
  10. filter:alpha(opacity=100,style=1)
  11. 信息存储服务公司Everlaw获810万美金注资
  12. 用C++实现定积分运算
  13. 多种矿石混合的抗干扰矿石对讲机
  14. 解读 | 数据分析师(含转行)的面试简历如何写?
  15. [《与闲适共处》偶感小记]2012年8月28日
  16. jsp外文期刊免费下载_外文期刊下载
  17. 【产业互联网周报】房企分拆物业公司上市潮来临,“智慧社区”加码;旷视智慧物流业务定位及战略布局;京东健康与药明康德入股卫宁科技...
  18. win10系统重装鼠标右键响应慢怎么办
  19. 平面几何----赛瓦定理证明三角形的三条垂线或中线或角平分线三线共点问题
  20. linux服务器强制关机,Mac强制关机的4种方法以备不时之需

热门文章

  1. 多组两两比较用什么检验方法_手把手教你多组独立样本的非参数检验及两两比较...
  2. 在浏览器的标签页显示网站标志图标(或指定图标)的方法
  3. 第七天 黑马十次方 吐槽列表与详细页、发吐槽与评论功能、问答频道功能、掌握DataURL和阿里云OSS
  4. 使用vmstat命令监视系统内存--用Enki学Linux系列(14)
  5. 实战:第六章:H5微信与支付宝调试错误,请回到请求来源地,重新发起请求。 错误代码 insufficient-isv-permissions
  6. ISCC2022-MISC-降维打击
  7. vSAN 6.6在线研讨会-4月20日下午2:30 amp;amp; 小提示:如何理解FTT与纠删码的组合?
  8. wordpress友联_一段代码开启WordPress友情链接管理
  9. sht11湿度程序c语言,温湿度传感器 sht11 仿真程序下载
  10. jupyter notebook环境配置(重写config文件、配置默认工作文件路径、如何解决需要token登陆的问题/解决无法跳转浏览器问题等)