[关闭]
@zhouzhouli 2017-08-31T02:34:13.000000Z 字数 2525 阅读 708

Steam机器人Redis接口说明

该文档为成都海盗海科技有限公司所有,任何人未经允许不得转发,公司官网:http://www.steamrobot.me/

Steam机器人与对接系统之间通过redis进行报价请求的交互.

机器人使用的报价数据格式如下

  1. {
  2. 'status': 0,
  3. 'trade_no': null,
  4. 'steamer': {
  5. 'steamid': '765611xxxxxxxxx',
  6. 'tradeurl': 'https: //steamcommunity.com/tradeoffer/new/?partner=xxxxx&token=xxxxxx'
  7. },
  8. 'uid': '123456789',
  9. 'message': 'GRKHM0HK',
  10. 'myItems': [{
  11. 'name': '九头蛇大行动”武器箱钥匙',
  12. 'classid': '2303508264',
  13. 'appid': '730',
  14. 'contextid': '2',
  15. 'assetid': '11684150890'
  16. }],
  17. 'theirItems': [{
  18. 'name': '格洛克 18 型 | 地下水',
  19. 'classid': '310779514',
  20. 'appid': '730',
  21. 'contextid': '2',
  22. 'assetid': '11368533135'
  23. }],
  24. 'steamid': '765611xxxxxxxxx',
  25. 'offer_state': null
  26. }

各字段的具体含义如下表

字段 说明
status 报价单状态; 0:初始化,1:报价交易成功;2:报价交易失败, 需要发送的报价单初始化为0,机器人处理完成后,如果报价交易成功则会写入1,报价失败则会写入2;所以对接系统只需要一直检查该字段是否为1或者2即可
trade_no steam生成的报价单编号,初始化为null即可。机器人向steam提交报价单成功后,会将steam返回的此次报价单号写回此字段
steamer 报价目标, steamid为报价目标的steamid, tradeurl为报价目标的报价链接,机器人将通过此报价链接向目标发送报价
uid 报价单唯一编号,对接系统对此处报价的唯一编号
message 报价单的附言,此字段内容会填入该次报价附带的消息框中
myItems 此次报价的要发送的道具;代表此次报价我方要发送的道具;比如需要将机器人的某个库存道具发送给目标,则需要将该道具的appid、contextid、assetid填入这里,name、classid为可选字段;没有要发送的道具则填空数组: []
theirItems 此次报价要请求的目标玩家的道具;比如这次报价是玩家要存入他的某些道具,则需要将他的道具的appid、contextid、assetid填入这里,name、classid同理为可选字段;没有要请求的道具,则填空数组:[]
steamid 指定此次报价用的机器人steamid,即此次报价会通过这里指定的机器人发送
offer_state steam报价单状态,备用可选字段,可不填

交易编号

trade_no 为steam的交易编号,通过 https://steamcommunity.com/tradeoffer/ + 交易编号 即可得到此次报价的报价页面;比如报价编号为 2308582253, 则用户可以通过这个链接 https://steamcommunity.com/tradeoffer/2308582253 打开改报价页面

items交易道具说明

一般可以通过 http://steamcommunity.com/inventory/{steamid}/{appid}/{contextid}?l=schinese&count=5000
即可查看某人开放的库存信息;其中steamid为要查看的玩家steamid,appid为游戏id,contextid为库存id;
CSGO的appid为730,contextid为2
Dota2的appid为570,contextid为2
其他游戏的都能在网络上查到

机器人对接说明

对接系统,将上面的报价结构以格式化为字符串后,以uid的值为key,格式的json字符串为值的键值对写入redis,

  1. set "123456789" "{\"status\":0,\"trade_no\":null,\"steamer\":{\"steamid\":\"765611xxxxxxxxx\",\"tradeurl\":\"https://steamcommunity.com/tradeoffer/new/?partner=xxxxx&token=xxxxx\"},\"uid\":tid,\"message\":\"GRKHM0HK\",\"myItems\":[{\"name\":\"九头蛇大行动”武器箱钥匙\",\"classid\":\"2303508264\",\"appid\":\"730\",\"contextid\":\"2\",\"assetid\":\"11684150890\"}],\"theirItems\":[{\"name\":\"格洛克18型|地下水\",\"classid\":\"310779514\",\"appid\":\"730\",\"contextid\":\"2\",\"assetid\":\"11368533135\"}],\"steamid\":\"765611xxxxxxxxx\",\"offer_state\":null}"

然后将该key写入固定的redis列表 trade_list

  1. lpush trade_list "123456789"

机器人会从 trade_list列表中读取所有待处理的报价单key,然后根据key去读取报价请求的json数据包;然后完成报价交易;
根据交易结果机器人会去更新上面提到的status字段;

为了避免数据冗余,建议对接系统在读取到交易结果后,比如读到status为2或者1之后,就将该报价单的键值对删除,并从trade_list移除

其他说明

目前机器人报价固定超时为10分钟,即对所有报价发送出去后,超过10分钟玩家都没确认该报价,则会取消该报价,并更新报价结果status为失败

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注