目前按照微信最新的政策,党费缴纳可以免手续费的。如果是免手续费那么就没有需要处理了。笔者所在公司党委建制,八十年代成立的党委,且公司几经易名提交了多轮资料总算解决了党委成立文件的问题,又碰到党委专户证明, 银行不给出这个证明,提供了N年前手写开户申请文件,结果审核又说不清楚,总之最后折腾没给免手续费,看来千分之六的费用是免不了的。说说我考虑的几种处理手续费的思路。
1. 每笔直接按照千分之六提手续费,支付成功后直接写入到流水单据上去。这种方式需要注意计算出来的数据有时候分需要四舍五入,另外还存在一种情况如果缴纳者使用了支付优惠,目前还没整明白这个是如何处理的,感觉是存在问题。
2. 设置定时任务,每天10点以后提取昨天的微信资金流水账单,在账单扣除交易手续费类型业务就是手续费的扣除,资金流水单号就是对应支付记录, 这样可以知道每一笔微信准确的扣除手续费的数据了。可以回写到具体单据上去。然后每天增加一笔支出的流水,金额是扣除手续费的金额。
以上两种思路来处理微信支付的手续费。当然第二种是比较准确的,我自己也打算是如此处理。读取账单文件我是直接读取
先定义一个单据的实体行的类
public class BillData
{
//账单日期
public DateTime? BillDate { get; set; }
//微信支付业务单号
public string WeiXinPayBillNO { get; set; }
//资金流水单号
public string WeiXinMoneyTransBillNo { get; set; }
//业务名称
public string Name { get; set; }
//业务类型
public string Type { get; set; }
//收支类型
public string InOrOut { get; set; }
//收支金额(元)
public decimal Money { get; set; }
//账户余额
public decimal AccountBalance { get; set; }
//资金变动操作者 默认system
public string Operator { get; set; }
//备注
public string Note { get; set; }
//业务单据号
public string BusinessVoucherNo { get; set; }
}
按行读取解压缩出来的csv文件了,第一行的数据是表头,所以第一次调用readline数据可以不用,通过while循环,每次调用readline来读取数据,如果数据是空或者是行开头不是· 字符,那么就跳出循环。如果type是扣除交易手续费那么就做合计手续费。
FileStream fs2 = new FileStream(csvFileName, FileMode.Open, FileAccess.Read);
StreamReader streamReader = new StreamReader(fs2, Encoding.Default);
fs2.Seek(0, SeekOrigin.Begin);
string content = streamReader.ReadLine(); //第一行数据是无用的
List < BillData> BillLines = new List < BillData>();
while (true) {
content = streamReader.ReadLine();
if (content != null)
{
//逗号作为分隔符
if (content.StartsWith("`"))
{
content = content.Replace("`", "");
string[] lineArray = content.Split(',');
BillData bd = new BillData();
bd.BillDate = Convert.ToDateTime(lineArray[0]);
bd.WeiXinPayBillNO = lineArray[1];
bd.WeiXinMoneyTransBillNo = lineArray[2];
bd.Name = lineArray[3];
bd.Type = lineArray[4];
bd.InOrOut = lineArray[5];
bd.Money = Convert.ToDecimal(lineArray[6]);
bd.AccountBalance = Convert.ToDecimal(lineArray[7]);
bd.Operator = lineArray[8];
bd.Note = lineArray[9];
bd.BusinessVoucherNo = lineArray[10];
BillLines.Add(bd);
if (bd.Type == "扣除交易手续费") {
Commission += Convert.ToDecimal(lineArray[6]); //手续费合计
}
}
else {
break;
}
}
else {
//读取不到内容的时候跳出循环
break;
}
}
}
以上就是手续费处理的思路以及处理的核心逻辑了。