【毕业设计】后端实现——各个支付平台保存的账单分析与导入合并

🌈据说,看我文章时 关注、点赞、收藏帅哥美女们 心情都会不自觉的好起来。

前言:
🧡作者简介:大家好我是 user_from_future ,意思是 “ 来自未来的用户 ” ,寓意着未来的自己一定很棒~
✨个人主页:点我直达,在这里肯定能找到你想要的~
👍专栏介绍:个人记账分析系统 ,专门记录制作过程,每天进步一点点~

想看往期历史文章,可以浏览此博文: 历史文章目录,后续所有文章发布都会同步更新此博文~

人生苦短,我用python

获取账单

微信账单

第一步,进入微信——我,打开服务。

在这里插入图片描述

第二步,点击右上角的账单。

在这里插入图片描述

第三步,点击右上角的常见问题。

在这里插入图片描述

第四步,点击下载账单。

在这里插入图片描述

第五步,选择用于个人对账。

在这里插入图片描述

第六步,选择交易流水范围,注意最多只能导出最近三个月的账单,需要及时保存。

在这里插入图片描述

第七步,填写邮箱地址,等待接收账单文件。

在这里插入图片描述

支付宝账单

第一步,进入支付宝——我的,打开账单。

在这里插入图片描述

第二步,点击右上角的三个点,打开菜单。

在这里插入图片描述

第三步,选择开具交易流水证明。

在这里插入图片描述

第四步,选择用于个人对账。

在这里插入图片描述

第五步,选择交易流水范围,注意最多只能导出最近一年的账单,需要及时保存。

在这里插入图片描述

第六步,填写邮箱地址,等待接收账单文件。

在这里插入图片描述

账单分析

微信的账单流水:

文件名是:

微信支付账单(XXXXXXXX-XXXXXXXX).csv

开头是:

微信支付账单明细, , , , , , , ,
微信昵称:[XXXX], , , , , , , ,
起始时间:[XXXX-XX-XX 00:00:00] 终止时间:[XXXX-XX-XX XX:XX:XX], , , , , , , ,
导出类型:[全部], , , , , , , ,
导出时间:[XXXX-XX-XX XX:XX:XX], , , , , , , ,
, , , , , , , ,
共XXX笔记录, , , , , , , ,
收入:XX笔 XXXX.XX元, , , , , , , ,
支出:XX笔 XXXX.XX元, , , , , , , ,
中性交易:XX笔 XXXX.XX元, , , , , , , ,
注:, , , , , , , ,

  1. 充值/提现/理财通购买/零钱通存取/信用卡还款等交易,将计入中性交易, , , , , , , ,
  2. 本明细仅展示当前账单中的交易,不包括已删除的记录, , , , , , , ,
  3. 本明细仅供个人对账使用, , , , , , , ,
    , , , , , , , ,
    ----------------------微信支付账单明细列表--------------------, , , , , , , ,

结尾是:

当中是我们的账单流水信息。

支付宝的账单流水:

文件名是:

alipay_record_XXXXXXXX_XXXXXX.csv

开头是:

------------------------支付宝(中国)网络技术有限公司 电子客户回单------------------------
收/支 ,交易对方 ,对方账号 ,商品说明 ,收/付款方式 ,金额 ,交易状态 ,交易分类 ,交易订单号 ,商家订单号 ,交易时间 ,

结尾是:

------------------------------------------------------------------------------------
导出信息:
姓名:XXX
支付宝账户:XXXXXXXXXXX
起始时间:[XXXX-XX-XX 00:00:00] 终止时间:[XXXX-XX-XX 23:59:59]
导出时间:[XXXX-XX-XX XX:XX:XX]
共XXX笔记录
收入:XX笔,XXXX.XX元
支出:XX笔,XXXX.XX元
其他:XX笔,XXXX.XX元

特别提示:
1.本回单内容可表明支付宝受理了相应支付交易申请,因系统原因或通讯故障等偶发因素导致本回单与实际交易结果不符时,以实际交易情况为准;
2.请勿将本回单作为收款方发货的凭据使用,请查证账户实际到账情况后再进行发货操作;
3.支付宝快捷支付等非余额支付方式可能既产生支付宝交易也同步产生银行交易,因此请勿使用本回单进行重复记账;
4.本回单如经任何涂改、编造,均立即失去效力;
5.部分账单如:充值提现、账户转存或者个人设置收支等不计入为收入或者支出,记为其他类;
6.因统计逻辑不同,明细金额直接累加后,可能会和下方统计金额不一致,请以实际交易金额为准;
7.禁止将本回单用于非法用途;
8.本明细仅展示当前账单中的交易,不包括已删除的记录;
9.本明细仅供个人对账使用。

当中是我们的账单流水信息。

账单导入

可以看到流水信息的开头都是 ------------ 组成的一行,结尾在支付宝是 ------------ 组成的一行,在微信是 文件末一个空行,这还算是有规律的,我们可以快速提取出当中内容来:

from string import whitespace


def alipay_analysis(alipay: str):
    """
    提取账单数据。
    :param alipay: 账单字符串
    :return: type、data
    """
    table = []
    if '支付宝' in alipay:
        payment = '支付宝'
    elif '微信' in alipay:
        payment = '微信'
    else:
        payment = ''
    if payment:
        data_start = False
        for row in alipay.split('\n'):
            if data_start:
                table.append([r.replace('"/"', '').strip(whitespace + '¥/') for r in row.strip(',').split(',')])
            if row.startswith('-') or not row.strip():
                if data_start:
                    table.pop()
                    break
                data_start = True
        return {'type': payment, 'data': table}

可以根据里面出现的关键字判断是微信账单流水还是支付宝账单流水,其他的则不处理(毕竟其他的用起来应该不多),data 用来存放处理后的数据,方便 djangoORM 框架处理数据。在函数外部可以单独使用 pandas.DataFrame 存起来,这样方便处理数据和导出为表格等操作。

账单合并

虽然数据库里设计把微信和支付宝的数据分开存放,并另外准备一个第三方平台的数据存放表,但是有时候还是需要用一个账单展现出来。
现在来分析微信和支付宝的标题区别:
微信的标题:['交易时间', '交易类型', '交易对方', '商品', '收/支', '金额(元)', '支付方式', '当前状态', '交易单号', '商户单号', '备注']
支付宝的标题:['收/支', '交易对方', '对方账号', '商品说明', '收/付款方式', '金额', '交易状态', '交易分类', '交易订单号', '商家订单号', '交易时间']
可以看到就只有 交易时间交易对方收/支 的标题是一模一样的,其他有一部分就差了一个字,个别是完全对不上的,经过我的一番权衡,最终确定了支付宝标题的改动:{'对方账号': '备注', '商品说明': '商品', '收/付款方式': '支付方式', '金额': '金额(元)', '交易状态': '当前状态', '交易分类': '交易类型', '交易订单号': '交易单号', '商家订单号': '商户单号'}用pandas合并一下:

zfb = alipay_analysis(open('data/alipay_record_XXXXXXXX_XXXXXX.csv', 'r').read())['data']
zfb = pandas.DataFrame(columns=zfb[0], data=zfb[1:])
wx = alipay_analysis(open('data/微信支付账单(XXXXXXXX-XXXXXXXX).csv', 'r').read())['data']
wx = pandas.DataFrame(columns=wx[0], data=wx[1:])
zfb = zfb.rename(columns={'对方账号': '备注', '商品说明': '商品', '收/付款方式': '支付方式', '金额': '金额(元)', '交易状态': '当前状态', '交易分类': '交易类型', '交易订单号': '交易单号', '商家订单号': '商户单号'})
merge = pandas.concat([zfb, wx], join='inner', ignore_index=True).replace('"/"', '').replace('/', '')
print(merge.to_string())

这里用 pandas 处理数据就方便在能快速合并,并能直接输出表格文件:merge.to_excel('文件名.xlsx')

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值