首页 > 其他分享 >大宗物资快进快出场景下收款信息的及时获取

大宗物资快进快出场景下收款信息的及时获取

时间:2024-03-13 22:31:21浏览次数:27  
标签:场景 短信 totalMessage msgBody Substring 进快 接收 收款

前言

        大宗物资行业实现货物的快速周转,对公司利润率影响很大,大宗物资特性决定了资金的大额收入,往往单次资金支付都是过百万,所以必须是通过银行支付,没办法通过微信或者支付宝。现有的一些银企直联系统,实际17点之后的收付流水就会在第二日做推送,但往往业务对资金是否到账的查询要求非常及时,钱到账后才可以进行货权的转移,规避业务风险。本文章通过银行支付短信通知来解决到账通知查询。


一、前提条件

   首先必须开通银行帐户变动短信通知,在实际业务过程中,笔者公司还没有出现过公对公付款收到了银行短信,第二天网银查询资金没有到账情况。

二、收款短信的格式

  笔者这里是中国银行的开户,收款通知的短信实例如下:

您公司账户XXXXX,于02051143收入(网银网上支付)人民币800000.00当前余额999999,对方为XXXXXX(账号*3333)(我行吸收的本外币存款依照《存款保险条例》受到保护)【中国银行】

收款信息的格式是相对固定的,都是以您公司账户XXXXX开头,如果不是这个开头,那么收到短信认为不是收款短信。同时如果短信内容含有 支出  ,认为也不是收款短信,而是支付短信;如果短信不含 “对方为” ,也认为不是收款短信。那么从短信中我们可以提取出以下信息。

三、短信提出所需要的信息

 实例中02051143就是收款发生事件 0205 ,2月5日;1143 事件11:43, 正则匹配规则:

Match m3 = Regex.Match(totalMessage, @"[0-9]{8}");

人民币800000.00 就是支付的金额,匹配正则为:

 string numberPattern = @"币([0-9]{2,}\.?[0-9]{2})";

方为XXXXXX  为付款的单位,匹配正则规则为:

 Match m2 = Regex.Match(totalMessage, @"对方为(.*?)\(");

这样就可以解析出我们所需要的核心信息,对方付款时间、付款人、付款金额

四、如何接收短信

        1. 开个手机号

        银行短信只能发送到固定的号码,所以必须先去开个号,网上的短信平台发送号码是不行的。

        2.  购置短信接收设备

        在京东上可以买到支持4g的短信接收猫,并且提供接收sdk和范例的。

        3. 通过com口连接短信接收设备。

           程序轮询com口来查询是否短信接收过来。

          4.  短信拼接

        一条短信的字符数是有限制的,往往我们认为是一条短信,实际接收是被拆成两条的。如下:

95566               230201您公司账户9765,于02051143收入(网银网上支付)人民币800000.00当前余额6603079.14,对方为云南海盈商贸有限

95566               230202公司(账号*7135)(我行吸收的本外币存款依照《存款保险条例》受到保护)【中国银行】

         使用空格作为分隔符,得到数组前面是发送过来的号码,后面是短信正文内容。        

 string msgBody = Regex.Split(builder.ToString(), " +")[1];

        msgbody的前6位十六进制为短信序号,如果是同一条短信,前4位是一样的,顺序是+1,通过这个规则来判断收到的短信是否是同一条短信被拆分,默认认为只会是被拆分为两条短信。

 String msgCode = msgBody.Substring(0, 6);
  rawMessage.ToDB(builder.ToString(),msgCode);
 if (LastMessageCode != "" )
{
if (msgCode.Substring(0, 4) == LastMessageCode.Substring(0, 4)   &&  (RecDateTime - LastDateTime).TotalSeconds  < 30 )  //两次信息的差小于30 .如果两次的时间差大于30秒那么表明不是同一条短信了
 {
 if (Convert.ToInt32(msgCode.Substring(5, 1)) > Convert.ToInt32(LastMessageCode.Substring(5, 1)))
 {
 if (msgBody.IndexOf("\r\n") < 5)
{
 totalMessage = LastMessageBody + msgBody.Substring(6);
}
else {

totalMessage = LastMessageBody + msgBody.Substring(6, msgBody.IndexOf("\r\n") - 5);
}
}
else
 {
if (msgBody.IndexOf("\r\n") < 5)
 {
   totalMessage = msgBody.Substring(6) + LastMessageBody;
          }
       else {
 totalMessage = msgBody.Substring(6, msgBody.IndexOf("\r\n") - 5) + LastMessageBody;
     }
  }
totalMessage = totalMessage.Replace("\r", "").Replace("\n", "");
}
}

总结

需要解决的技术难点首先是如何接收短信,需要硬件配合了。
再次就是如何对接收短信进行拼接了。
拿到拼接的短信需要过滤到那些不是收款的短信。
根据固定的格式提取我们需要的收款信息了

标签:场景,短信,totalMessage,msgBody,Substring,进快,接收,收款
From: https://blog.csdn.net/waxyy002/article/details/136683397

相关文章

  • 英码嵌入式AI ISP视频处理模组SOM928,使能全场景更智能、更清晰!
    随着视觉产业的飞速发展,图像分辨率获得持续提升,图像效果不断优化,但在暗光、逆光、运动等场景下输出高质量图像仍然是行业公认的难点。因此,能满足高清视觉感知应用的产品,在无人机、智能摄像机、高端运动相机、智能医疗视觉、智能驾驶等行业有着极大市场需求,英码嵌入式在视频图像技......
  • C# Onnx C2PNet 图像去雾 室外场景
    目录介绍效果模型信息项目代码下载C#OnnxC2PNet图像去雾室外场景介绍github地址:https://github.com/YuZheng9/C2PNet[CVPR2023]CurricularContrastiveRegularizationforPhysics-awareSingleImageDehazing效果模型信息ModelProperties-----------......
  • blender 改变场景,视图背景色
    打开blender软件,点击右上方【视图着色方式】展开图标。2在视图着色方式页面中,点击【背景/后台】选项的【视图】项。3点击【视图】选项下的颜色框,在弹出的颜色轮盘中,选择所要更改的颜色,即可。......
  • Nginx应用场景及配置
    目录一、Web服务器1.HTTP2.HTTPS二、反向代理三、负载均衡四、重定向1.老域名跳转新域名2.路径重定向五、防盗链六、手机端重定向PC端七、基于请求路径转发不同服务一、Web服务器1.HTTPserver{listen80;server_name_;location/{root/data;......
  • 你是怎么理解ES6中Module的?使用场景?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助一、介绍模块,(Module),是能够单独命名并独立地完成一定功能的程序语句的集合(即程序代码和数据结构的集合体)。两个基本的特征:外部特征和内部特征外部特征是指模块跟外部环境联系的接口(即其他模块或程序调用该模块的......
  • 技术笔记(7)Unity导入人物和场景,出现的材质问题
    技术笔记(7)Unity导入人物和场景,出现的材质问题一,如果两个人物拥有同名但内容不同的的材质shadererror:Unity在导入的时候,识别到近似内容时,会用新的内容去替换同名shader的内容,而不是重新创建一个。这样就会导致第一个人物的材质显示异常,其本质是shader内容被替换了。解决......
  • tsv文件在大数据技术栈里的应用场景
    是的,\t是指制表符(tab),它通常用作字段分隔符在TSV(Tab-SeparatedValues)格式的文件中。TSV是一种简单的文本格式,它使用制表符来分隔每一列中的值,而每一行则代表一个数据记录。TSV文件例:ID\tName\tAge\tCity1\tJohnDoe\t28\tNewYork2\tJaneSmith\t32\tLosAngeles上面的例......
  • 你是怎么理解ES6中 Decorator 的?使用场景?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助一、介绍Decorator,即装饰器,从名字上很容易让我们联想到装饰者模式简单来讲,装饰者模式就是一种在不改变原类和使用继承的情况下,动态地扩展对象功能的设计理论。ES6中Decorator功能亦如此,其本质也不是什么高大上的......
  • 线程池的使用场景
    在实际开发中,线程池用于优化线程的使用,提高系统性能,减少线程创建和销毁的开销,以及提供更高的系统稳定性。下面将详细解析几个常见的线程池使用场景,并结合源码和代码演示进行说明。场景一:Web应用的并发请求处理Web应用通常需要同时处理多个用户的请求。为了不每个请求都创建一......
  • CCE集群VPC网络模式下几种访问场景
    本文分享自华为云社区《【理解云容器网络】5-CCE集群VPC模型容器网络走线介绍》,作者:可以交个朋友。简介鉴于在CCE集群使用VPC网络模型,处理遇到的一些网络问题时,需要熟悉不同场景下数据包的流转过程,才能快速的解决问题。本文主要介绍CCE集群VPC网络模式下各种访问场景介绍。VPC......