做爲獨立開發者產品須要收款是很是麻煩的,註冊公司維護成本過高,市面上各類收款工具要麼手續費過高,要麼到帳很慢,體驗很很差。html
看到 「BufPay.com 我的收款」 這個收款工具,挺有意思的。原理是監控手機微信、支付寶的二維碼掃碼支付到帳通知並回調開發者應用,通知開發者應用訂單支付結果。python
「BufPay.com 我的收款」的優勢是我的支付寶、微信就能夠收款,不用簽約,不用公司資質,而且費率很是低,接入速度很是快。通常人一個下午就能夠搞定。json
這樣用本身的微信和支付寶收款二維碼就能夠用來給本身的產品收款了,收到款後「BufPay.com 我的收款」 會有回調。api
收款即時到帳, 很是安全靠譜,費率也挺低的, 最低千分之一。下面咱們就來看怎麼把「BufPay.com 我的收款」接入到咱們的產品中。安全
根據 「BufPay.com 我的收款」的 接口文檔 接口很是簡單,只有兩個接口,第一個是發起支付請求,一個是支付結果查詢請求,若是發起請求的時候是使用 BufPay 的默認支付頁面的話,第二個支付查詢接口均可以不用要。微信
注意: 在接入以前,先須要用一個閒置的 Android 手機安裝 Bufpay 的監控 App 哦,安裝步驟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 的簽名函數ide
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 的後臺,配置頁面配置一下本身的收款二維碼工具
接下來就能夠收款啦。。。