支付宝 收款通知 mysql_基于支付宝微信通知的一种个人收款回调方案(转)

本文介绍了如何利用NotificationListenerService监听支付宝和微信的通知,提取收款信息并构造订单,通过POST发送到服务器。服务端接收到订单后进行签名验证、防重放攻击检查,将订单存入数据库,并尝试回调用户指定地址。若回调失败,使用定时任务重试。
摘要由CSDN通过智能技术生成

最近闲来无事,看到网上有一些免签支付回调的服务商,当时感觉很新奇,于是自己动手看看怎么玩的,先看成果

App上监听通知并向服务器POST支付信息

5a0c6868324b1f7321e6b3e421387bd1.png

服务端的支付订单表

0564da43100c4fcce4f191db83f42a99.png

下面说原理及流程

1.App上使用NotificationListenerService监听通知栏通知,一旦微信支付或者支付宝收款收到消息,读取消息的内容,然后使用正则匹配金额

2.App读取到金额后,构造支付订单,支付订单包含:订单号(App自己生成,不是真实的支付方订单号),金额,App端标识,支付方式,签名(保证数据不被篡改)

3.App将订单POST到填写的URL中

4.服务端收到订单信息,先校验签名是否相符,再查看订单是否存在(防止重放攻击),验证通过后存入数据库,并向指定的回调地址发起请求

5.服务端如果向指定的回调地址发起请求失败,使用定时任务重复发起回调,直到回调成功或达到指定次数

以上就是全部过程,服务端使用springboot,可以很快速搭建

当然为了保证可靠性需要给App加固,防止退出,还有这种只能读取到金额,其他信息一无所知,有些局限性

2019-03-14补充:

代码很简单,上传github完全是小题大做,下面贴出关键代码

App部分

继承NotificationListenerService重写onNotificationPosted方法

48304ba5e6f9fe08f3fa1abda7d326ab.png

1 //来通知时的调用

2 @Override

3 public void onNotificationPosted(StatusBarNotification sbn) {

4 Notification notification = sbn.getNotification();

5 if (notification == null) {

6 return;

7 }

8 Bundle extras = notification.extras;

9 if (extras != null) {

10 //包名

11 String pkg = sbn.getPackageName();

12 // 获取通知标题

13 String title = extras.getString(Notification.EXTRA_TITLE, "");

14 // 获取通知内容

15 String content = extras.getString(Notification.EXTRA_TEXT, "");

16 Log.i(TAG, String.format("收到通知,包名:%s,标题:%s,内容:%s", p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值