一種實現個人微信二維碼收款接口的方法


只有企業資質才能申請微信支付接口,作為一名程序員要想實現自動收款除了想辦法搞到企業資質申請官方的微信支付接口外還可以想辦法通過個人收款碼來實現。

個人二維碼收款碼里面除了可以設計金額外還可以設置收款方的備注,這個收款方的備注在識別是哪個用戶付款的時候會用到,需要與付款方的備注區分。


同一個金額按照不同的收款備注設置多個,然后保存到服務端,那么數據庫有張表就保存了 收款備注,收款金額,收款二維碼圖片地址 ,收款狀態這四個字段。姑且稱之為收款碼表。

如果有一個用戶要付款,就從收款碼表中找到一個金額匹配且收款狀態為可收款狀態的二維碼,這個二維碼給到用戶的同時需要把對應收款狀態設置為支付中狀態。

在前台用戶支付成功后,我們通過微信收款輔助工具(這個工具后面詳細講解),就可以獲取到收款方備注,金額等信息。講是收款方備注傳給服務器,通過收款方備注服務器可以知道是哪個用戶支付的。

為了避免一個用戶長時間占這某個二維碼不支付,我們需要在前后台都控制每隔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能夠順利進行,還要給它獲取通知的權限,保證它不被清理等等,需要做一些相應的保護措施。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM