# B币方式充电 | BAC Document
社区开源的第三方哔哩哔哩 API 文档

# B币方式充电

注：以前充电是电池的概念，1B币折合10电池，一般地充电10电池可获得1经验

目前（2020/12/02后）则是贝壳的概念，1B币折合1贝壳、1经验（如果存在小数点，则经验值向下取整，即2.5B币获得2经验）

## 新版本B币充电

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

请求方式：POST

认证方式：Cookie（SESSDATA）

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

参数名 | 类型 | 内容 | 必要性 | 备注
--- | --- | --- | --- | ---
bp_num | num | 贝壳数量 | 必要 | 必须在2-9999之间
is_bp_remains_prior | bool | 是否优先扣除B币余额 | 必要 | [true,false]，B币充电请选择true
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`对象：

字段 | 类型 | 内容 | 备注
--- | --- | --- | ---
mid | num | 本用户mid |
up_mid | num | 目标用户mid |
order_no | str | 留言token | 用于添加充电留言
bp_num | str | 充电贝壳数 |
exp | num | 获得经验数 |
status | num | 返回结果 | 4：成功 -2：低于20电池下限 -4：B币不足
msg | str | 错误信息 | 默认为空

示例：

以空间的方式向用户`mid=293793435`充了2贝壳，得到2经验，留言token为`BPRG5CEC3VUPOOANA540`

此时`data`.`status`=`4`

自己给自己冲QAQ

    curl 'https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/quick' \
    --data-urlencode 'bp_num=2' \
    --data-urlencode 'is_bp_remains_prior=true' \
    --data-urlencode 'up_mid=293793435' \
    --data-urlencode 'otype=up' \
    --data-urlencode 'oid=293793435' \
    --data-urlencode 'csrf=xxx' \
    -b 'SESSDATA=xxx'

查看响应示例：

    {
        "code": 0,
        "message": "0",
        "ttl": 1,
        "data": {
            "mid": 293793435,
            "up_mid": 293793435,
            "order_no": "BPRG5CEC3VUPOOANA540",
            "bp_num": 2,
            "exp": "2",
            "status": 4,
            "msg": ""
        }
    }

当所充电贝壳数小于2时，充电不会成功

此时`data`.`status`=`-2`

    curl 'https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/quick' \
    --data-urlencode 'bp_num=1' \
    --data-urlencode 'is_bp_remains_prior=true' \
    --data-urlencode 'otype=up' \
    --data-urlencode 'oid=293793435' \
    --data-urlencode 'csrf=xxx' \
    -b 'SESSDATA=xxx'

查看响应示例：

    {
        "code": 0,
        "message": "0",
        "ttl": 1,
        "data": {
            "mid": 0,
            "up_mid": 0,
            "order_no": "",
            "bp_num": "0",
            "exp": 0,
            "status": -2,
            "msg": "elec raw order create failed: 88201"
        }
    }

当所充贝壳数折合的B币数不足时，充电也不会成功

此时`data`.`status`=`-4`

    curl 'https://api.bilibili.com/x/ugcpay/web/v2/trade/elec/pay/quick' \
    --data-urlencode 'bp_num=99' \
    --data-urlencode 'is_bp_remains_prior=true' \
    --data-urlencode 'up_mid=293793435' \
    --data-urlencode 'otype=up' \
    --data-urlencode 'oid=293793435' \
    --data-urlencode 'csrf=xxx' \
    -b 'SESSDATA=xxx'

查看响应示例：

    {
        "code": 0,
        "message": "0",
        "ttl": 1,
        "data": {
            "mid": 0,
            "up_mid": 0,
            "order_no": "",
            "bp_num": "0",
            "exp": 0,
            "status": -4,
            "msg": "bp.to.battery http failed, invalid args, errNo=800409904: B 币余额不足"
        }
    }

## 老版本B币充电

老版本目前已过期，调用接口成功后（code返回0），data.status会返回0，且B币不会消耗，贝壳也不会增加。以下是历史信息：

查看折叠内容

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

请求方式：POST

认证方式：Cookie（SESSDATA）

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

参数名 | 类型 | 内容 | 必要性 | 备注
--- | --- | --- | --- | ---
elec_num | num | 充电电池数量 | 必要 | 必须在2-9999之间
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：请求错误
message | str | 错误信息 | 默认为0
ttl | num | 1 |
data | obj | 信息本体 |

`data`对象：

字段 | 类型 | 内容 | 备注
--- | --- | --- | ---
mid | num | 本用户mid |
up_mid | num | 目标用户mid |
order_no | str | 留言token | 用于添加充电留言
elec_num | num | 充电电池数 |
exp | num | 获得经验数 |
status | num | 返回结果 | 4：成功 -2：低于20电池下限 -4：B币不足
msg | str | 错误信息 | 默认为空

示例：

以空间的方式向用户`mid=293793435`充了20电池，得到2经验，留言token为`BPRG5CEC3VUPOOANA540`

此时`data`.`status`=`4`

再次自己冲自己QAQ

    curl 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/quick' \
    --data-urlencode 'elec_num=20' \
    --data-urlencode 'up_mid=293793435' \
    --data-urlencode 'otype=up' \
    --data-urlencode 'oid=293793435' \
    --data-urlencode 'csrf=xxx' \
    -b 'SESSDATA=xxx'

查看响应示例：

    {
        "code": 0,
        "message": "0",
        "ttl": 1,
        "data": {
            "mid": 293793435,
            "up_mid": 293793435,
            "order_no": "BPRG5CEC3VUPOOANA540",
            "elec_num": 20,
            "exp": 2,
            "status": 4,
            "msg": ""
        }
    }

当所充电池数小于2时，充电不会成功

此时`data`.`status`=`-2`

    curl 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/quick' \
    --data-urlencode 'elec_num=1' \
    --data-urlencode 'up_mid=293793435' \
    --data-urlencode 'otype=up' \
    --data-urlencode 'oid=293793435' \
    --data-urlencode 'csrf=xxx' \
    -b 'SESSDATA=xxx'

查看响应示例：

    {
        "code": 0,
        "message": "0",
        "ttl": 1,
        "data": {
            "mid": 0,
            "up_mid": 0,
            "order_no": "",
            "elec_num": 0,
            "exp": 0,
            "status": -2,
            "msg": "elec raw order create failed: 88201"
        }
    }

当所充电池数折合的B币数不足时，充电也不会成功

此时`data`.`status`=`-4`

    curl 'https://api.bilibili.com/x/ugcpay/trade/elec/pay/quick' \
    --data-urlencode 'elec_num=999' \
    --data-urlencode 'up_mid=293793435' \
    --data-urlencode 'otype=up' \
    --data-urlencode 'oid=293793435' \
    --data-urlencode 'csrf=xxx' \
    -b 'SESSDATA=xxx'

查看响应示例：

    {
        "code": 0,
        "message": "0",
        "ttl": 1,
        "data": {
            "mid": 0,
            "up_mid": 0,
            "order_no": "",
            "elec_num": 0,
            "exp": 0,
            "status": -4,
            "msg": "bp.to.battery http failed, invalid args, errNo=800409904: B 币余额不足"
        }
    }