一种实现个人微信二维码收款接口的方法

只有企业资质才能申请微信支付接口,作为一名程序员要想实现自动收款除了想办法搞到企业资质申请官方的微信支付接口外还可以想办法通过个人收款码来实现。

个人二维码收款码里面除了可以设计金额外还可以设置收款方的备注,这个收款方的备注在识别是哪个用户付款的时候会用到,需要与付款方的备注区分。


同一个金额按照不同的收款备注设置多个,然后保存到服务端,那么数据库有张表就保存了 收款备注,收款金额,收款二维码图片地址 ,收款状态这四个字段。姑且称之为收款码表。

如果有一个用户要付款,就从收款码表中找到一个金额匹配且收款状态为可收款状态的二维码,这个二维码给到用户的同时需要把对应收款状态设置为支付中状态。

在前台用户支付成功后,我们通过微信收款辅助工具(这个工具后面详细讲解),就可以获取到收款方备注,金额等信息。讲是收款方备注传给服务器,通过收款方备注服务器可以知道是哪个用户支付的。

为了避免一个用户长时间占这某个二维码不支付,我们需要在前后台都控制每隔5分钟设置收款状态为可支付状态。

这种实现办法适合小额,支付频率不高的场景。比如说我针对 1元这个金额生成了100个有不同收款备注信息的二维码,那么也就是说5分钟内最多只能有100个人同时支付,1分钟内20个同时支付。对于一些小网站可以满足需求。

接下来说一下微信收款辅助工具,这个工具主要的功能是,当接收到通知栏里面有微信收款通知的时候打开通知信息,获取收款信息,然后把收款信息发送给服务器去处理。

也就是说需要有一台手机24小时联网开着,实时的监听手机通知栏的信息。

附:

支付宝App的通知截取

这个问题其实网上已经有很多的解决方案了,其利用的是Android中的NotificationListenerService这个类,通过注册这个Listener,可以在推送通知弹出来的时候,获取到其发送的App、标题、内容等信息。我们最关心的就是App和推送内容。

判断发送App的包为支付宝的包,然后再从推送的内容中获取到具体的内容,即可得到付款金额。

示例代码如下:

public class AlipayNotificationListenerService extends NotificationListenerService {
    
public AlipayNotificationListenerService() {
}

@Override
public void onNotificationPosted(StatusBarNotification sbn) {
    // 这里可以拿到包名,可以按照需要判断。
    String packageName = sbn.getPackageName();
    Notification notification = sbn.getNotification();
    if (notification == null) {
        return;
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        Log.e("SevenNLS","in 1");
        Bundle extras = notification.extras;
        if (extras != null) {
            // 这里是具体的title和content,可以从中提取金额
            String title = extras.getString(Notification.EXTRA_TITLE, "");
            String content = extras.getString(Notification.EXTRA_TEXT, "");
            Log.d("Zachary", "title:" + title + " content:" + content);
        }
    }
}

@Override
public void onListenerConnected()
    {
        Log.e("Zachary","connected");
    }

}

 


当然,为了让这个App能够顺利进行,还要给它获取通知的权限,保证它不被清理等等,需要做一些相应的保护措施。

 

posted @ 2019-10-30 06:10  汉学  阅读(9325)  评论(0编辑  收藏  举报