做为独立开发者产品须要收款是很是麻烦的,注册公司维护成本过高,市面上各类收款工具要么手续费过高,要么到帐很慢,体验很很差。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 的后台,配置页面配置一下本身的收款二维码工具
接下来就能够收款啦。。。