# 微信&支付宝方式充电 | BAC Document
社区开源的第三方哔哩哔哩 API 文档

# 微信&支付宝方式充电

操作流程：

1. 申请充电二维码及扫码秘钥，秘钥临时保存备用
2. 使用`qr_code_url`中的值生成二维码
3. 用支付宝或微信扫描
4. 以扫码秘钥作为参数轮询检查扫码支付结果

## 申请充电二维码及扫码秘钥

> https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/qr_code/create

请求方式：POST

认证方式：Cookie（SESSDATA）

秘钥有效时间为10分钟

正文参数（ application/x-www-form-urlencoded ）：

参数名 | 类型 | 内容 | 必要性 | 备注
--- | --- | --- | --- | ---
bp_num | num | 充电B币数量 | 必要 | 必须在2-9999之间
is_bp_remains_prior | bool | 是否优先扣除B币 | 必要 | true：是 false：否 在B币不足时剩余的部分利用支付平台支付
up_mid | num | 充电对象用户mid | 必要 |
otype | str | 充电来源 | 必要 | up：空间充电 archive：视频充电
oid | num | 充电来源代码 | 必要 | 空间充电：充电对象用户mid 视频充电：稿件avid
csrf | str | CSRF Token（位于cookie） | 必要 |

json回复：

根对象：

字段 | 类型 | 内容 | 备注
--- | --- | --- | ---
code | num | 返回值 | 0：成功 -101：账号未登录 -111：csrf校验失败 -400：请求错误 -500：服务器错误
message | str | 错误信息 | 默认为0
ttl | num | 1 |
data | obj | 信息本体 |

`data`对象：

字段 | 类型 | 内容 | 备注
--- | --- | --- | ---
qr_code_url | str | 支付二维码生成内容 | 存在转义
qr_token | str | 扫码秘钥 |
exp | num | 获得经验数 |

示例：

申请空间的方式向用户23215368充电10电池且不使用B币的支付二维码

    curl 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/qr_code/create' \
    --data-urlencode 'elec_num=10' \
    --data-urlencode 'up_mid=23215368' \
    --data-urlencode 'is_bp_remains_prior=false' \
    --data-urlencode 'otype=up' \
    --data-urlencode 'oid=23215368' \
    --data-urlencode 'csrf=xxx' \
    -b 'SESSDATA=xxx'

查看响应示例：

    {
    	"code": 0,
    	"message": "0",
    	"ttl": 1,
    	"data": {
    		"qr_code_url": "https://api.bilibili.com/x/ugcpay/trade/elec/pay/qr_code/gateway?mid=293793435&token=c1cb1d95d2194ba58df6bb0f24ae1aaa",
    		"qr_token": "c1cb1d95d2194ba58df6bb0f24ae1aaa",
    		"exp": 1
    	}
    }

## 检查扫码支付结果

> https://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status

请求方式：GET

认证方式：Cookie（SESSDATA）

url参数：

参数名 | 类型 | 内容 | 必要性 | 备注
--- | --- | --- | --- | ---
qr_token | str | 扫码秘钥 | 必要 |

json回复：

根对象：

字段 | 类型 | 内容 | 备注
--- | --- | --- | ---
code | num | 返回值 | 0：成功 -101：账号未登录
message | str | 错误信息 | 默认为0
ttl | num | 1 |
data | obj | 信息本体 |

`data`对象：

字段 | 类型 | 内容 | 备注
--- | --- | --- | ---
qr_token | str | 扫码秘钥 |
order_no | str | 留言token | 未成功则无此项 用于添加充电留言
mid | num | 当前用户mid |
status | num | 状态值 | 若秘钥错误则无此项 1：已支付 2：未扫描 3：未确认

示例：

当申请到的支付二维码未被扫描时，`data`.`status`的值为`2`

    curl -G 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status' \
    --data-urlencode 'qr_token=c7cbdc47fc424cd18f2146db653597b8' \
    -b 'SESSDATA=xxx'

查看响应示例：

    {
        "code": 0,
        "message": "0",
        "ttl": 1,
        "data": {
            "qr_token": "c7cbdc47fc424cd18f2146db653597b8",
            "mid": 293793435,
            "status": 2
        }
    }

当申请到的支付二维码已扫描但未确认时，`data`.`status`的值为`3`

    curl -G 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status' \
    --data-urlencode 'qr_token=c7cbdc47fc424cd18f2146db653597b8' \
    -b 'SESSDATA=xxx'

查看响应示例：

    {
        "code": 0,
        "message": "0",
        "ttl": 1,
        "data": {
            "qr_token": "c7cbdc47fc424cd18f2146db653597b8",
            "mid": 293793435,
            "status": 3
        }
    }

成功支付后，`data`.`status`的值为`1`，且`data`.`order_no`存在留言token

    curl -G 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/order/status' \
    --data-urlencode 'qr_token=c7cbdc47fc424cd18f2146db653597b8' \
    -b 'SESSDATA=xxx'

查看响应示例：

    {
        "code": 0,
        "message": "0",
        "ttl": 1,
        "data": {
            "qr_token": "bd649c836c524550bfe22a369334fc05",
            "order_no": "BPTD36U3KP82I31RSSLG",
            "mid": 293793435,
            "status": 1
        }
    }