# 积分商城 | BAC Document
社区开源的第三方哔哩哔哩 API 文档

# 积分商城

注：积分商城由web页面提供功能，地址为 https://manga.bilibili.com/eden/credits-exchange.html

## 获取当前持有点数

> https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetUserPoint

请求方式：POST

认证方式：Cookie（SESSDATA）/ APP

json回复：

根对象：

字段 | 类型 | 内容 | 备注
--- | --- | --- | ---
code | num | 返回值 |
msg | str | 错误信息 |
data | obj | 信息本体 |

`data`对象：

字段 | 类型 | 内容 | 备注
--- | --- | --- | ---
point | str | 点数 | 不登录时为0

示例：

    curl 'https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetUserPoint' \
    -b 'SESSDATA=xxx'

查看响应示例：

    {
      "code": 0,
      "msg": "",
      "data": {
        "point": "66666"
      }
    }

## 获取兑换奖品列表

> https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/ListProduct

请求方式：POST

json回复：

根对象：

字段 | 类型 | 内容 | 备注
--- | --- | --- | ---
code | num | 返回值 |
msg | str | 错误信息 |
data | array | 奖品列表 |

`data`数组：

项 | 类型 | 内容 | 备注
--- | --- | --- | ---
0 | obj | 奖品1 |
n | obj | 奖品(n+1) |
…… | obj | …… | ……

`data`数组中的对象：

字段 | 类型 | 内容 | 备注
--- | --- | --- | ---
id | num | 物品id |
type | num | 物品类型 | 0：商城相关 3：限免券 7：福利券
title | str | 物品名 |
image | str | 显示的图像 | 福利券为空
amount | num | 库存总量 |
cost | num | 兑换所需点数（原价） |
real_cost | num | 兑换所需点数（现价） |
remain_amount | num | 库存剩余数 |
comic_id | num | 相关漫画id |
limits | array | 限定使用范围（漫画） | 限免券所适用的漫画
discount | num | (?) | 目前恒为0
product_type | num | 物品类型 | 1：限免券、福利券 4：商城满99立减10元券、商城5元无门槛券 5：商城5魔晶
pendant_url | str | (?) |
pendant_expire | num | (?) | 0：限免券、福利券 7：商城满99立减10元券、商城5元无门槛券、商城5魔晶
exchange_limit | num | 兑换次数限制 |
address_deadline | str | (?) |
act_type | num | (?) | 目前恒为0
has_exchanged | bool | 是否兑换过该物品 |
main_coupon_deadline | str | 兑换后使用截止时间 |
deadline | str | 兑换后使用截止时间 |
point | str | (?) | 目前恒为0

示例：

    curl 'https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/ListProduct'

查看响应示例：

    {
      "code": 0,
      "msg": "",
      "data": [
        {
          "id": 195,
          "type": 7,
          "title": "积分兑换",
          "image": "",
          "amount": 15999,
          "cost": 200,
          "real_cost": 100,
          "remain_amount": 0,
          "comic_id": 0,
          "limits": [],
          "discount": 0,
          "product_type": 1,
          "pendant_url": "",
          "pendant_expire": 7,
          "exchange_limit": 0,
          "address_deadline": "0001-01-01T00:00:00Z",
          "act_type": 0,
          "has_exchanged": false,
          "main_coupon_deadline": "0001-01-01T00:00:00Z",
          "deadline": "",
          "point": "0"
        },
        {
          "id": 1009,
          "type": 0,
          "title": "商城5魔晶",
          "image": "",
          "amount": 500,
          "cost": 260,
          "real_cost": 30,
          "remain_amount": 0,
          "comic_id": 0,
          "limits": [],
          "discount": 0,
          "product_type": 5,
          "pendant_url": "",
          "pendant_expire": 0,
          "exchange_limit": 1,
          "address_deadline": "0001-01-01T00:00:00Z",
          "act_type": 0,
          "has_exchanged": false,
          "main_coupon_deadline": "2022-03-22T23:59:59+08:00",
          "deadline": "2022-03-22T23:59:59+08:00",
          "point": "0"
        },
        {
          "id": 1008,
          "type": 0,
          "title": "商城满99立减10元券",
          "image": "",
          "amount": 400,
          "cost": 2000,
          "real_cost": 400,
          "remain_amount": 390,
          "comic_id": 0,
          "limits": [],
          "discount": 0,
          "product_type": 4,
          "pendant_url": "",
          "pendant_expire": 0,
          "exchange_limit": 1,
          "address_deadline": "0001-01-01T00:00:00Z",
          "act_type": 0,
          "has_exchanged": false,
          "main_coupon_deadline": "2022-03-22T23:59:59+08:00",
          "deadline": "2022-03-22T23:59:59+08:00",
          "point": "0"
        },
        {
          "id": 1007,
          "type": 0,
          "title": "商城5元无门槛券",
          "image": "",
          "amount": 200,
          "cost": 1000,
          "real_cost": 200,
          "remain_amount": 134,
          "comic_id": 0,
          "limits": [],
          "discount": 0,
          "product_type": 4,
          "pendant_url": "",
          "pendant_expire": 0,
          "exchange_limit": 1,
          "address_deadline": "0001-01-01T00:00:00Z",
          "act_type": 0,
          "has_exchanged": false,
          "main_coupon_deadline": "2022-03-22T23:59:59+08:00",
          "deadline": "2022-03-22T23:59:59+08:00",
          "point": "0"
        },
        {
          "id": 1536,
          "type": 3,
          "title": "白兔糖",
          "image": "http://i0.hdslb.com/bfs/manga-static/c3369754789a77b5d0b15cc31c75538ac035b3aa.jpg",
          "amount": 4000,
          "cost": 100,
          "real_cost": 75,
          "remain_amount": 3991,
          "comic_id": 27164,
          "limits": [
            {
              "type": 1,
              "id": 27164,
              "title": "白兔糖"
            }
          ],
          "discount": 0,
          "product_type": 1,
          "pendant_url": "",
          "pendant_expire": 7,
          "exchange_limit": 0,
          "address_deadline": "0001-01-01T00:00:00Z",
          "act_type": 0,
          "has_exchanged": false,
          "main_coupon_deadline": "0001-01-01T00:00:00Z",
          "deadline": "",
          "point": "0"
        }
      ]
    }

## 兑换物品

> https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/Exchange

请求方式：POST

认证方式：Cookie（SESSDATA）/ APP

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

参数名 | 类型 | 内容 | 必要性 | 备注
--- | --- | --- | --- | ---
product_id | str | 物品id | 必要 |
product_num | num | 兑换个数 | 必要 |
point | num | 物品所需点数 | 必要 | 现价（real_cost）

json回复：

根对象：

字段 | 类型 | 内容 | 备注
--- | --- | --- | ---
code | num | 返回值 | 0：兑换成功 1：积分不足 1：您点的太快了~ 2：库存不足 3：product point mismatch（point填写错误） 3：超过用户最大可兑换数量 4：现在抢票的人太多啦，再点一下有机会优先上车喔 ε=ε=(ノ≧∇≦)ノ
message | str | 错误信息 |

示例：

    curl 'https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/Exchange' \
    --data-urlencode 'product_id=195' \
    --data-urlencode 'product_num=1' \
    --data-urlencode 'point=real_cost' \
    -b 'SESSDATA=xxx'

查看响应示例：

    {
      "code": 0,
      "msg": ""
    }

## 获取兑换历史记录

> https://manga.bilibili.com/twirp/activity.v1.Activity/GetPrizeList

请求方式：POST

认证方式：Cookie（SESSDATA）/ APP

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

参数名 | 类型 | 内容 | 必要性 | 备注
--- | --- | --- | --- | ---
act_id | num | 固定值：90018 | 必要 |

json回复：

根对象：

字段 | 类型 | 内容 | 备注
--- | --- | --- | ---
code | num | 返回值 |
msg | str | 错误信息 |
data | obj | 信息本体 |

`data`对象：

字段 | 类型 | 内容 | 备注
--- | --- | --- | ---
prizes | obj | 兑换记录 |
addr | obj | (?) |

`data`中的`prizes`对象：

字段 | 类型 | 内容 | 备注
--- | --- | --- | ---
user_prize_id | str | 兑换id? |
prize_id | num | 兑换的物品id |
ctime | str | 兑换时间 |
addr | null | (?) |
deadline | str | 过期时间 |
type | num | 类型 | 1：限免券、福利券 8：商城5魔晶
name | str | 物品名 |

示例：

    curl 'https://manga.bilibili.com/twirp/activity.v1.Activity/GetPrizeList' \
    --data-urlencode 'act_id=90018' \
    -b 'SESSDATA=xxx'

查看响应示例：

    {
      "code": 0,
      "msg": "",
      "data": {
        "prizes": [
          {
            "user_prize_id": "55117444",
            "prize_id": 1009,
            "ctime": "2022-03-21T12:22:53+08:00",
            "addr": null,
            "deadline": "0001-01-01T00:00:00Z",
            "type": 8,
            "name": "商城5魔晶"
          },
          {
            "user_prize_id": "2594073385420523088",
            "prize_id": 1536,
            "ctime": "2022-03-21T12:07:24+08:00",
            "addr": null,
            "deadline": "0001-01-01T00:00:00Z",
            "type": 1,
            "name": "白兔糖限免卡"
          },
          {
            "user_prize_id": "4899916394614914913",
            "prize_id": 195,
            "ctime": "2021-12-24T12:01:08+08:00",
            "addr": null,
            "deadline": "0001-01-01T00:00:00Z",
            "type": 1,
            "name": "积分兑换"
          },
          {
            "user_prize_id": "1152921504636496551",
            "prize_id": 195,
            "ctime": "2021-12-13T12:05:13+08:00",
            "addr": null,
            "deadline": "0001-01-01T00:00:00Z",
            "type": 1,
            "name": "积分兑换"
          }
        ],
        "addr": {
          "name": "",
          "phone": "",
          "address": "",
          "id_card": ""
        }
      }
    }

## 获取玩法说明

> https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetExchangeRule

请求方式：POST

json回复：

根对象：

字段 | 类型 | 内容 | 备注
--- | --- | --- | ---
code | num | 返回值 |
msg | str | 错误信息 |
data | obj | 信息本体 |

`data`对象：

字段 | 类型 | 内容 | 备注
--- | --- | --- | ---
rule | str | 玩法说明 |

示例：

    curl 'https://manga.bilibili.com/twirp/pointshop.v1.Pointshop/GetExchangeRule'

查看响应示例：

    {
      "code": 0,
      "msg": "",
      "data": {
        "rule": "日常兑换说明：\n1、赛季积分达到一定数量可兑换积分商城内相应的商品；\n2、日常兑换奖品的刷新时间为每日中午12点，每天可兑换的奖品总数有限（具体可见商品页面展示），请尽快兑换。\n3、兑换的福利券＆限免卡奖品有效期详见兑换框内显示或卡券包内详情说明哦，请及时在有效期内使用。\n4、赛季积分有效期为当前赛季时长（每期赛季时长详见福利中心页面倒计时显示），请及时在有效期内进行使用。\n5、赛季积分可在福利中心完成特定任务获取，具体详情可至福利中心查看（部分活动也可获取赛季积分，可随时关注活动信息哦）。"
      }
    }