原理介绍

第一步: 安装App

下载 BufPay Android App

点击下载

配置App

BufPay App安装好以后,必须开启相关权限,否则BufPay App无法检测到支付通知。

小米手机配置    三星手机配置    华为手机配置    部分手机没有制作教程,请参考小米手机配置。

注意:修改手机这些设置的目的是为了在微信和支付宝收到款以后,在手机通知栏出现通知消息同时不让手机进入休眠和结束 BufPay App、微信、支付宝进程,这样才能保证正常收款。

注意:用于安装 BufPay App 的这个手机最好放在家里专用,并且一直连上充电线,并且返回到手机桌面(不要进入微信、支付宝APP界面,否则可能收到款后系统不会提示,导致无法回调)。

第二步: 配置收款码

「BufPay 个人收款」 的原理是通过安装到手机的App监控手机微信、支付宝的二维码扫码支付到账通知并回调开发者应用。消费者在支付的时候是扫描开发者的个人微信、支付宝收款二维码。

注意:当你发起支付请求的时候,系统会自动匹配和支付价格最接近的固定金额支付二维码,如果没有找到可用的(比如已经被使用或者不存在这个价格的支付二维码)系统会使用不固定金额支付二维码(支付页面会提示消费者手动输入支付金额)。

举例:比如你的商品价格是¥35,那么你可以上传你自己的微信、支付宝固定金额支付二维码¥34.97、¥34.98、¥34.99、¥35、¥35.01、¥35.02、¥35.03。当你发起金额为¥35支付请求的时候,会把 ¥35±0.1 的支付二维码都作为候选,选择一个最接近并且当前没有被使用的支付二维码返回给消费者支付。

第三步: API接入

发起付款接口

接口地址:https://bufpay.com/api/pay/aid  (在后台应用配置页面查看)
调用方法:POST (注意 content-type 设置为 application/x-www-form-urlencode 哦)
调用参数:
 - 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

注意:使用该接口的建议方法是:在你的产品付款接口后台构造好上面的参数,然后渲染一个自动提交的 form 返回给用户浏览器,
用户浏览器会 post 这些参数到 BufPay,然后就会显示支付页面;
如果 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"}, 支付二维码不足
 - {"status": "missing_argument", "info": "xxxxx"}, 缺少 xxxx 参数
              

成功支付后 BufPay 通知回调

当订单支付成功后 BufPay 会立即向你的服务器发起回调通知
接口地址:你传入的 notify_url 参数
调用方法:POST
调用参数:
 - aoid, bufpay平台订单唯一标识
 - order_id, 你传入的 order_id 参数
 - order_uid, 你传入的 order_uid 参数
 - price, 订单价格
 - pay_price, 用户支付的金额
 - sign, 签名, 参数 aoid + order_id + order_uid + price + pay_price + app secret 顺序拼接后 MD5

当你收到 BufPay 的回调请求后,如果响应 HTTP code 200 那么 BufPay 会认为通知成功, 否则会再次通知 6 次,间隔为 1/2/4/16/64/300 分钟。
              

付款结果查询接口

接口地址:https://bufpay.com/api/query/aoid
调用方法:GET

注意:api 里面的 aoid 为发起付款接口返回的 aoid
注意:该接口支持 JSONP 方式调用,增加 callback 参数即可

接口返回:
 - {"status": "not_exist"}, 订单不存在
 - {"status": "new"}, 新订单
 - {"status": "payed"}, 订单已支付未回调
 - {"status": "success"}, 订单已支付已经回调成功
 - {"status": "fee_error"}, 账户余额不足扣除手续费失败,订单未回调
 - {"status": "expire"}, 订单已过期
              

签名函数示例(Python)

import hashlib

def sign(*p):
    return hashlib.md5(u''.join(p).encode('utf8')).hexdigest().lower()

sign(
    u'内容订阅一年期',
    'wechat',
    '50.00',
    '102',
    'hi@example.com',
    'http://example.com/bufpay_notify',
    'http://example.com',
    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'  #app secret
)
              

Demo下载

Python    PHP

FAQ

  • 用「BufPay 个人收款」收款安全吗?
  • 肯定的,用户支付的钱款不经过 BufPay 而是直接到你的微信和支付宝钱包,即时到账,绝对安全。

  • 「BufPay 个人收款」稳定吗?会不会掉单?
  • BufPay 用了严密的支付检测技术和二维码调度算法且服务器在国内,稳定运行已久,无一漏单。

  • 如何使用多微信、支付宝收款?
  • 请咨询客服。

  • 安装 BufPay App 的手机需要 root 吗?
  • 不用。

  • 为什么要安装App呢,如果手机没电或者没网会怎样?
  • 「BufPay 个人收款」的原理就是监控微信、支付宝的二维码到账通知,通过在 Android 手机上面安装「BufPay 个人收款」App 可以监听到账通知,从而实现支付成功回调。如果手机没电或者没网络,那么手机就无法收到支付到账通知,用户扫码支付成功后就没办法回调你的服务接口了。

  • 我用于收款的微信或支付宝账号会不会有什么风险?
  • 没有风险,这个支付过程和平常扫码支付一样,合理合规合法。

  • 可以自定义支付页面吗?
  • 可以的。通过设置 format=json 参数可以返回 json 格式的支付数据,你可以自己渲染支付页面。

  • 你们平台如何扣费呢?
  • 每月的套餐费用需要提前升级或者续费,每笔的手续费需要预先充值到你的 BufPay 账户。

  • 订单未支付成功会扣除手续费吗?
  • 不会,只有 BufPay App 检测到支付成功了,并且通知了你的服务器,才会扣手续费。

  • 用户已经扫码付款,但是我没有收到回调是什么情况呢?
  • 有多种可能。用户支付后到你的应用收到回调通知,大概有几秒的延迟,如果 BufPay 调用你的回调通知接口失败,BufPay 会连续通知三次,每次间隔一分钟。还有可能是订单已经过期后用户才付款,这也会导致不会收到回调通知。

  • 支付二维码过期后用户转账付款,怎么办呢?
  • 你可以在后台的订单管理页面,找到这个用户对应的订单,然后点击「已经收款」按钮,bufpay.com 会调用你的回调接口通知这个订单已经收款。

  • 支持支付宝官方收钱码吗,提现免费的那种?
  • 支持的,BufPay 支持支付宝普通收款码和官方收钱码。

  • 用 java 调用接口怎么会提示证书出错呢?
  • 可能是 jdk 对 let's encrypt ssl 证书的支持问题,可以使用 bufpay http 的接口,把地址换成 http://x.bufpay.com

  • 微信收到款后在通知栏怎么没有金额呢,只有到账通知?
  • 应该是没有开启 “微信收款语音播报” 在微信「我」-「钱包」-「收付款」- 「二维码收款」- 点击右上角三个点 开启收款到账语音提醒。

  • BufPay 收款有限额吗?
  • 没有。

  • 上传收款二维码数量有限制吗?
  • 没有数量限制。每天最多上传500张,超过500张隔天再上传哦。

  • 支持企业微信买单二维码吗?
  • 支持。

小米手机MIUI配置

1. 开启 BufPay APP 通知读取权限

注意:必须开启 BufPay APP 的通知读取权限,否则无法读取支付通知。
安装 BufPay APP 后会自动跳转到通知设置页面,请找到「BufPay 收款」,并勾选。
以后要开启,请在系统「设置」-「更多设置」-「系统安全」-「通知读取权限」勾选。

2. 关闭神隐模式 和 关闭休眠

在系统「设置」-「电量和性能」-「神隐模式」- 「应用配置」- 右上角三个点「关闭应用后台智能省电」。

在系统「设置」-「锁屏和密码」-「自动锁屏」- 选择「屏幕永不休眠」。

3. 开启 BufPay收款、微信、支付宝 的开机自启权限

在系统「设置」-「授权管理」-「自启动管理」- 勾选 BufPay收款、微信、支付宝 允许自启动。

4. 锁定 BufPay收款、微信、支付宝 任务,不要被系统自动清理

打开三个应用,然后按 设置键 呼出任务管理,向下拉动应用,锁定应用。

5. 关闭 WLAN 优化

在系统「设置」-「WLAN」-「高级设置」- 关闭「WLAN优化」。

6. 开启 BufPay收款、微信、支付宝 的全部推送通知

在系统「设置」-「通知和状态栏」-「通知管理」- 找到 BufPay收款、微信、支付宝 开启所有通知。

7. 关闭 微信勿扰模式

在微信「设置」-「勿扰模式」- 关闭 勿扰模式。

注意:如果你在电脑上也登陆了这个收款微信号,请记得把手机静音取消,不然就收不到付款通知哦。

8. 开启 微信收款语音播报

在微信「我」-「钱包」-「收付款」- 「二维码收款」- 点击右上角三个点 开启收款到账语音提醒。

9. 开启 支付宝收付款消息提醒

在支付宝搜索「支付助手」- 点击支付助手右上角图标 - 开启 接收支付消息提醒。

三星手机配置

1. 开启 BufPay APP 通知读取权限

注意:必须开启 BufPay APP 的通知读取权限,否则无法读取支付通知。
安装 BufPay APP 后会自动跳转到通知设置页面,请找到「BufPay 收款」,并勾选。
以后要开启,请在系统「设置」-「锁定屏幕与安全」-「其他安全设置」-「高级设置」-「通知访问」勾选。

2. 关闭省电模式 和 关闭休眠

在系统「设置」-「常规设置」-「电池」- 「省电模式」- 点击关闭。

在系统「设置」-「显示」-「休眠」- 选择永不不要。

3. 开启 BufPay收款、微信、支付宝 的开机自启权限

「智能管理器」-「应用程序管理」-「自启动应用程序」- 勾选 BufPay收款、微信、支付宝 允许自启动。

4. 锁定 BufPay收款、微信、支付宝 任务,不要被系统自动清理

打开三个应用,然后按 设置键 呼出任务管理,向下拉动应用,锁定应用。

5. 睡眠期间保持 WLAN 开启

在系统「设置」-「链接」-「WLAN」- 右上角「高级」- 「睡眠期间保持 WLAN 开启」。

6. 开启 BufPay收款、微信、支付宝 的全部推送通知

在系统「设置」-「应用程序」- 找到 BufPay收款、微信、支付宝 - 「通知」开启所有通知。

7. 关闭 微信勿扰模式

在微信「设置」-「勿扰模式」- 关闭 勿扰模式。

注意:如果你在电脑上也登陆了这个收款微信号,请记得把手机静音取消,不然就收不到付款通知哦。

8. 开启 微信收款语音播报

在微信「我」-「钱包」-「收付款」- 「二维码收款」- 点击右上角三个点 开启收款到账语音提醒。

9. 开启 支付宝收付款消息提醒

在支付宝搜索「支付助手」- 点击支付助手右上角图标 - 开启 接收支付消息提醒。

华为手机配置

1. 开启 BufPay APP 通知读取权限

注意:必须开启 BufPay APP 的通知读取权限,否则无法读取支付通知。
安装 BufPay APP 后会自动跳转到通知设置页面,请找到「BufPay 收款」,并勾选。
以后要开启,请在系统「设置」-「应用和通知」-「应用管理」- 底部「设置」-「特殊访问权限」-「通知使用权」勾选。

2. 关闭省电模式 和 关闭休眠

在系统「设置」-「电池」- 「省电模式」和「超级省电」- 点击关闭。

在系统「设置」-「显示」- 「休眠」- 点击永不。

3. 开启 BufPay收款、微信、支付宝 的开机自启权限

「设置」-「电池」-「启动管理」- 勾选 BufPay收款、微信、支付宝 允许自启动。

4. 锁定 BufPay收款、微信、支付宝 任务,不要被系统自动清理

打开三个应用,然后按 设置键 呼出任务管理,点击锁定图标,锁定应用。

5. 关闭 WLAN+ 和 开启休眠保存 WLAN 连接

在系统「设置」-「无线和网络」-「WLAN」- 「WLAN+」- 点击关闭。

在系统「设置」-「无线和网络」-「WLAN」- 底部「设置」- 「在休眠状态下保存 WLAN 连接」选择始终。

6. 开启 BufPay收款、微信、支付宝 的全部推送通知

在系统「设置」-「应用和通知」- 「通知管理」- 找到 BufPay收款、微信、支付宝 - 「通知」开启所有通知。

7. 关闭 微信勿扰模式

在微信「设置」-「勿扰模式」- 关闭 勿扰模式。

注意:如果你在电脑上也登陆了这个收款微信号,请记得把手机静音取消,不然就收不到付款通知哦。

8. 开启 微信收款语音播报

在微信「我」-「钱包」-「收付款」- 「二维码收款」- 点击右上角三个点 开启收款到账语音提醒。

9. 开启 支付宝收付款消息提醒

在支付宝搜索「支付助手」- 点击支付助手右上角图标 - 开启 接收支付消息提醒。