支付宝对账单和微信对账单下载保存数据库

微信对账单:

1 导入所需JAR包

	<dependency>
			<groupId>com.github.binarywang</groupId>
			<artifactId>weixin-java-pay</artifactId>
			<version>3.3.7.B</version>
			<exclusions>
				<exclusion>
					<groupId>com.github.binarywang</groupId>
					<artifactId>qrcode-utils</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

2  读取配置文件中配置的微信支付信息

@Data
@ConfigurationProperties(prefix = "wx.pay")
@Component
public class WxPayProperties {

    /**
     * 设置微信公众号或者小程序等的appid
     */
    private String appId;

    /**
     * 微信支付商户号
     */
    private String mchId;

    /**
     * 微信支付商户密钥
     */
    private String mchKey;

    /**
     * 微信支付交易类型
     */
    private String tradeType;

    /**
     * 证书位置
     */
    private String keyPath;
}

3 注入配置

@Component
public class WeChatPayConfig {

    @Autowired
    private WxPayProperties properties;

    @Bean
    @ConditionalOnMissingBean
    public WxPayConfig payConfig() {
        WxPayConfig payConfig = new WxPayConfig();
        payConfig.setAppId(this.properties.getAppId());
        payConfig.setMchId(this.properties.getMchId());
        payConfig.setMchKey(this.properties.getMchKey());
        payConfig.setKeyPath(this.properties.getKeyPath());
        payConfig.setTradeType(this.properties.getTradeType());
         return payConfig;
    }
    @Bean
    public WxPayService wxPayService(WxPayConfig payConfig) {
        WxPayService wxPayService = new WxPayServiceImpl();
        wxPayService.setConfig(payConfig);
        return wxPayService;
    }

}

执行获取微信账单并且保存

     public R  downloadWxBill(WxPayDownloadBillRequest wxPayDownloadBillRequest){
        try {
            Map<String,Object> map = new HashMap<>();
            map.put("date",wxPayDownloadBillRequest.getBillDate());
            R r = customPayWxOrderBillService.queryTotal(map);
            if(!r.get("code").toString().equals("0")){
                log.error("获取微信对账单错误:{}","该日期数据核对异常");
                return R.error("该日期数据核对异常");
            }
            if(Long.parseLong(r.get("total").toString()) >= 1){
                log.error("获取微信对账单错误:{}","该日期的账单数据已经存在");
                return R.error("该日期的账单数据已经存在");
            }
            wxService.setConfig(weChatPayConfig.payConfig());
            wxPayDownloadBillRequest.setBillDate(wxPayDownloadBillRequest.getBillDate().replace("-",""));
            WxPayBillResult wxPayBillResult = wxService.downloadBill(wxPayDownloadBillRequest);
            List<WxPayBillInfo> wxPayBillInfos =  wxPayBillResult.getBillInfoList();
            List<PubPayWxOrderBillEntity> list = new ArrayList<>();
            for(int i =0 ; i < wxPayBillInfos.size() ; i++){
                WxPayBillInfo wxPayBillInfo = wxPayBillInfos.get(i);
                PubPayWxOrderBillEntity customPayWxOrderBillEntity = new PubPayWxOrderBillEntity();
                BeanUtils.copyProperties(wxPayBillInfo , customPayWxOrderBillEntity);
                list.add(customPayWxOrderBillEntity);
            }
            customPayWxOrderBillService.insertBatch(list);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("获取微信对账单错误:{}",e.getMessage());
        }
        return R.ok();
    }

 

 

支付宝对账单(比较麻烦一点,需要先获取支付宝对账单下载地址,再从地址下载ZIP压缩包,解压压缩包之后读取并保存对账信息):

1 导入所需JAR包

 <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.10.0.ALL</version>
        </dependency>

2 读取配置文件中配置的支付宝支付信息

@Data
@ConfigurationProperties(prefix = "alipay.pay")
@Component
public class AlipayPayProperties {

     /**
      * 支付宝支付商户appId
      */
     private String appId;
     /**
      * 支付宝支付商户私钥
      */
     private String appPrivateKey;
     /**
      * 支付宝支付商户公钥
      */
     private String publicKey;
     /**
      * 支付宝商户生成签名字符串所使用的签名算法类
      */
     private String signType;
}

3 注入配置

@Component
public class AlipayPayConfig {

    @Autowired
    private AlipayPayProperties properties;


    @Bean
    public AlipayClient alipayClient() throws AlipayApiException {
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",properties.getAppId(),properties.getAppPrivateKey(),"json",AlipayConstants.CHARSET_UTF8,properties.getPublicKey(),properties.getSignType());
         return alipayClient;
    }

}

执行获取微信账单并且保存

 public R downloadAlipayBill( JSONObject json) throws Exception {
        try {
        // 将订单提交至支付宝
            Map<String,Object> map = new HashMap<>();
            map.put("date",json.get("bill_date"));
            R r = pubPayAlipayOrderBillService.queryTotal(map);
            if(!r.get("code").toString().equals("0")){
                log.error("获取支付宝对账单错误:{}","该日期数据核对异常");
                return R.error("该日期数据核对异常");
            }
            if(Long.parseLong(r.get("total").toString()) >= 1){
                log.error("获取支付宝对账单错误:{}","该日期的账单数据已经存在");
                return R.error("该日期的账单数据已经存在");
            }
        AlipayClient alipayClient = alipayPayConfig.alipayClient();
        AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest();
        request.setBizContent(json.toString());
        AlipayDataDataserviceBillDownloadurlQueryResponse response = alipayClient
                .execute(request);
        if(response.isSuccess()){
            // 设置下载后生成Zip目录
            URL url = new URL(response.getBillDownloadUrl());
            URLConnection urlconn = url.openConnection();
            ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(urlconn.getInputStream()), Charset.forName("GBK"));
            ZipEntry ze = null;
            //循环遍历
            while ((ze = zipInputStream.getNextEntry()) != null) {
                if(ze.getName().indexOf("汇总") <= -1){
                    System.out.println("文件名:" + ze.getName() + " 文件大小:" + ze.getSize() + " bytes");
                    System.out.println("文件内容:");
                    BufferedReader br = new BufferedReader(new InputStreamReader(zipInputStream, Charset.forName("GBK")));
                    String line;
                    Long row = 0L;
                      //内容不为空,输出
                    List<PubPayAlipayOrderBillEntity> list = new ArrayList<>();
                    while ((line = br.readLine()) != null) {
                        System.out.println(line);
                            String [] arr = line.split(",");
                            if(arr.length > 20 && row >4){
                                PubPayAlipayOrderBillEntity pubPayAlipayOrderBillEntity = new PubPayAlipayOrderBillEntity();
                                pubPayAlipayOrderBillEntity.setTradeTime(arr[5].trim());
                                pubPayAlipayOrderBillEntity.setTransactionId(arr[0].trim() );
                                pubPayAlipayOrderBillEntity.setOutTradeNo(arr[1].trim() );
                                pubPayAlipayOrderBillEntity.setTradeType(arr[2].trim() );
                                pubPayAlipayOrderBillEntity.setBody(arr[3].trim() );
                                pubPayAlipayOrderBillEntity.setStartOrderTime(arr[4].trim() );
                                pubPayAlipayOrderBillEntity.setEndOrderTime(arr[5].trim() );
                                pubPayAlipayOrderBillEntity.setOpenId(arr[10].trim() );
                                pubPayAlipayOrderBillEntity.setTotalFee(arr[11].trim() );
                                pubPayAlipayOrderBillEntity.setPayFee(arr[12].trim() );
                                pubPayAlipayOrderBillEntity.setRefundId(arr[21].trim() );
                                pubPayAlipayOrderBillEntity.setRefundPoundage(arr[22].trim() );
                                pubPayAlipayOrderBillEntity.setRemark(arr.length > 24 ? arr[24].trim()  : "");
                                list.add(pubPayAlipayOrderBillEntity);
                            }
                            row++;
                      }
                    System.out.println(list.size());
                    pubPayAlipayOrderBillService.insertBatch(list);
                }
            }
        }else{
            log.error("获取支付宝对账单失败:{}",JSON.toJSON(response));
        }
        } catch (Exception e) {
            e.printStackTrace();
            log.error("获取支付宝对账单错误:{}",e.getMessage());
        }
         return R.ok();
    }

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据库应用系统设计与实现 实验类型:设计型 实验地点:2楼312 实验时间:12月14日、21日周五1-3/5-7节 实验内容: 系统概述: 某银行需要开发ATM存取款机系统实现如下功能: 1)开户(到银行填写开户申请单,卡号自动生成) 2)取款 3)存款 4)查询余额 题目要求: 一、建库、建表、建约束 1、使用SQL创建表 客户信息表userinfo 字段名称 说明 备注 customerID 顾客编号 自动编号(标识列),从1开始,主键 用序列sequence实现,用其属性:nextval customerName 开户名 必填 PID 身份证号 必填,智能是18位或15位,唯一约束 check约束length()函数 telephone 联系电话 必填,11位手机号 check约束,’[0-9]’ address 居住地址 银行卡信息表cardinfo 字段名称 说明 cardID 卡号 必填,主键,银行的卡号规则和电话好吗一样,一般前8位代表特殊含义,如某综合某支行等,假定该行要求其营业厅的卡号格式为10103576**** ***开始,每4位号码后有空格,卡号一般是随机产生。 curType 货币种类 必填,默认为RMB savingTate 存款类型 活期/定活两便/定期 openDate 开户日期 必填,默认为系统当前日期 openMoney 开户金额 必填,不低于1元 balance 余额 必填,不低于1元,否则将销户 pass 密码 必填,6位数字,开户时默认为6个“6” IsReportloss 是否挂失 必填,是/否值,默认为“否” customerID 顾客编号 外键,必填,表示该卡对应的顾客编号,一位顾客允许办理多张卡号 交易信息表transinfo 字段名称 说明 transDate 交易日期 必填,默认为系统当前日期 cardID 卡号 必填,外键 transType 交易类型 必填,只能是存入/支取 transMoney 交易金额 必填,大于0 remark 备注 可选,其他说明 2、使用SQL语言在每个表上添加约束 主键约束、外键约束、CHECK约束、默认约束、非空约束 二、插入测试数据 使用SQL语言向每个表中插入至少3条记录 三、模拟常规业务 1)修改客户密码 2)办理银行卡挂失 3)统计银行资金流通余额和盈利结算 银行资金流通余额=总存入金额-总支取金额 盈利结算=总支取金额 * 0.008 – 总存入金额 * 0.003 4)查询本周开户的卡号,显示该卡相关信息 5)查询本月交易金额最高的卡号 6)查询挂失账号的客户信息 四、利用视图实现数据查询 1)为客户提供以下3个视图供其查询该客户数据 客户基本信息:vw_userInfo 银行卡信息:vw_cardInfo 银行卡交易信息:vw_transInfo 2)提供友好界面,要求各列名称为中文描述 3)调用创建的视图获得查询结果 五、用存储过程实现业务处理 1)完成开户业务 2)完成取款或存款业务 3)根据卡号打印对账单 4)查询、统计指定时间段内没有发生交易的账户信息
您好,下载微信账单并将其写入数据库可以分为以下步骤: 1. 登录微信支付商户平台,进入“交易记录”页面,选择需要下载账单的日期范围和账单类型,点击“下载”按钮。 2. 通过 Java 代码将下载的对账单保存到本地磁盘上,可以使用 HttpURLConnection 进行 HTTP 请求获取对账单文件。 3. 将对账单文件中的数据读取出来,解析成 Java 对象。 4. 将解析出来的数据写入到数据库中,可以使用 JDBC 连接数据库并执行 SQL 语句。 下面是一个简单的 Java 代码示例,用于下载微信账单并将其写入数据库: ```java import java.io.*; import java.net.*; import java.sql.*; import org.dom4j.*; import org.dom4j.io.SAXReader; public class WeChatBillDownloader { public static void main(String[] args) { try { // 设置日期范围和账单类型 String billDate = "20190101"; String billType = "ALL"; // 发送 HTTP 请求下载账单文件 URL url = new URL("https://api.mch.weixin.qq.com/pay/downloadbill"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); OutputStream out = conn.getOutputStream(); out.write(("bill_date=" + billDate + "&bill_type=" + billType).getBytes()); out.flush(); out.close(); // 保存账单文件到本地磁盘 InputStream in = conn.getInputStream(); File billFile = new File("bill.csv"); FileOutputStream fos = new FileOutputStream(billFile); byte[] buffer = new byte[4096]; int len; while ((len = in.read(buffer)) != -1) { fos.write(buffer, 0, len); } in.close(); fos.close(); // 解析对账单文件 SAXReader reader = new SAXReader(); Document document = reader.read(billFile); Element root = document.getRootElement(); List<Element> billElements = root.elements("bill"); for (Element billElement : billElements) { // 将每条对账单数据写入到数据库中 String[] fields = billElement.getText().split(","); String sql = "INSERT INTO bill VALUES (?, ?, ?, ?, ?)"; Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password"); PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, fields[0]); pstmt.setString(2, fields[1]); pstmt.setString(3, fields[2]); pstmt.setString(4, fields[3]); pstmt.setString(5, fields[4]); pstmt.executeUpdate(); pstmt.close(); conn.close(); } } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们使用了 HttpURLConnection 发送 HTTP 请求下载账单文件,并使用 SAXReader 解析对账单文件中的数据。最后,我们使用 JDBC 连接 MySQL 数据库,并将解析出来的数据写入到数据库中。请注意替换代码中的数据库连接信息为您自己的数据库连接信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值