作為獨立開發者產品需要收款是非常麻煩的,注冊公司維護成本太高,市面上各種收款工具要么手續費太高,要么到賬很慢,體驗很不好。
看到 「BufPay.com 個人收款」 這個收款工具,挺有意思的。原理是監控手機微信、支付寶的二維碼掃碼支付到賬通知並回調開發者應用,通知開發者應用訂單支付結果。
「BufPay.com 個人收款」的優點是個人支付寶、微信就可以收款,不用簽約,不用公司資質,並且費率非常低,接入速度非常快。一般人一個下午就可以搞定。
這樣用自己的微信和支付寶收款二維碼就可以用來給自己的產品收款了,收到款后「BufPay.com 個人收款」 會有回調。
收款即時到賬, 非常安全靠譜,費率也挺低的, 最低千分之一。下面我們就來看怎么把「BufPay.com 個人收款」接入到我們的產品中。
根據 「BufPay.com 個人收款」的 接口文檔 接口非常簡單,只有兩個接口,第一個是發起支付請求,一個是支付結果查詢請求,如果發起請求的時候是使用 BufPay 的默認支付頁面的話,第二個支付查詢接口都可以不用要。
注意: 在接入之前,先需要用一個閑置的 Android 手機安裝 Bufpay 的監控 App 哦,安裝步驟
接口地址:https://bufpay.com/api/pay/aid 這個地址在用戶后台的配置頁面 調用方法:POST 調用參數: - name, 必填, 訂單銷售商品名稱 - pay_type, 必填, 支付方式(可選alipay/wechat) - price, 必填, 訂單價格 - order_id, 必填, 訂單號 - order_uid, 選填, 訂單購買用戶(建議設置為購買用戶編號,便於后續對賬) - notify_url, 必填, 支付城后回調地址 - return_url, 選填, 支付城后前台跳轉地址 - sign, 必填, 將參數按 name + pay_type + price + order_id + order_uid + notify_url + return_url + app secret 順序拼接后 MD5 注意:接口默認直接跳轉支付頁面,如果 api 后面加 ?format=json 那么返回結果就是 json 格式的,需要開發者自己展示付款二維碼 json 格式接口返回: { "status": "ok", "aoid": "cad5076f55834f5fadddcfc018cc4068", "pay_type": "wechat", "price": "35.00", "qr_price": "", "qr": "wxp://f2f0-vFHHDCw3L4kPne1JzXyQ0nO0QKpQK2e" "qr_img": "data:image/jpeg;base64,/9j/4AAQSk......Bxiv/2Q==", "expires_in": 270, "return_url": "http://v2ex.com/bufpay_return", } - status, 付款請求結果(只有為 ok 的時候才有其他的值) - aoid, bufpay平台訂單唯一標示可用於查詢訂單狀態 - pay_type, 支付類型 alipay/wechat - price, 訂單價格 - qr_price, 支付二維碼的金額,如果為空表示使用的是不固定金額二維碼,具體金額需要用戶輸入 - qr, 支付二維碼內容 - qr_img, 支付二維碼圖片 base64 格式 - expire_in, 支付二維碼剩余有效秒數 - return_url, 支付成功跳轉地址 錯誤代碼: - {"status": "sign_error"}, 簽名錯誤 - {"status": "order_payed"}, 訂單已支付 - {"status": "order_expire"}, 訂單已過期 - {"status": "qr_limit"}, 支付二維碼不足
這個是 Python 的簽名函數
import hashlib def sign(*p): return hashlib.md5(u''.join(p).encode('utf8')).hexdigest().lower() sign( u'內容訂閱一年期', 'wechat', '50.00', '102', 'hi@sideidea.com', 'http://sideidea.com/bufpay_notify', 'http://sideidea.com', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' #app secret )
下面用 Python 寫個完整的Demo
#!/usr/bin/env python #coding: utf8 import requests import json import hashlib def sign(*p): return hashlib.md5(u''.join(p).encode('utf8')).hexdigest().lower() def pay(): resp = requests.post( 'https://bufpay.com/api/pay/2?format=json', data={ 'name': u'內容訂閱一年期', 'pay_type': 'wechat', 'price': '50.00', 'order_id': '102', 'order_uid': 'hi@sideidea.com', 'notify_url': 'http://sideidea.com/bufpay_notify', 'return_url': 'http://sideidea.com', 'sign': sign( u'內容訂閱一年期', 'wechat', '50.00', '102', 'hi@sideidea.com', 'http://sideidea.com/bufpay_notify', 'http://sideidea.com', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' #app secret ) } ) return json.loads(resp.text) def query(aoid): resp = requests.get('https://bufpay.com/api/query/' + aoid) return json.loads(resp.text) if __name__ == '__main__': resp = pay() print resp print query(resp['aoid'])
怎么樣?是不是很簡單, 哦對了, 在正式接入之前,還需要去 BufPay.com 的后台,配置頁面配置一下自己的收款二維碼
接下來就可以收款啦。。。