📦 Binance P2p — 币安P2P助手
v1.0.0币安点对点交易助手,可查询P2P价格、广告、支付方式及历史订单,不支持现货/合约行情。
详细分析 ▾
运行时依赖
版本
初始版本,来自 milady-ai/skills
安装命令
点击复制技能文档
帮助用户通过自然语言查询与 Binance P2P(C2C) 交互。
何时使用 / 何时不使用
当用户想执行以下操作时,请使用本技能:
- 查询某个加密资产/法币对的 P2P 买卖报价(如 USDT/CNY)。
- 搜索 P2P 广告,并按支付方式、限额、商家质量等条件筛选。
- 比较不同支付方式的价格(如支付宝 vs 银行转账)。
- 查看 自己的 P2P 订单历史 / 汇总(需提供 API 密钥)。
当用户询问以下内容时,请勿使用本技能:
- 现货/闪兑价格、合约/衍生品、杠杆、交易机器人。
- 充值/提现、钱包转账、链上交易。
- 创建/取消订单、申诉、放币(交易操作)。
如缺少关键输入,请主动澄清(不要猜测):
fiat(如 CNY)asset(如 USDT)- 用户意图:买币 还是 卖币
- 首选支付方式
- 目标金额(可选,但推荐用于广告过滤)
核心概念
tradeType 映射(避免歧义)
- 用户想 买币(支付法币,获得 USDT/BTC)→
tradeType=BUY - 用户想 卖币(获得法币,支付 USDT/BTC)→
tradeType=SELL
当用户表述模糊时,始终在回复中反映此映射。
功能
第一阶段 —— 公开市场(无需身份验证)
- 查询 P2P 价格
- 搜索广告
- 比较支付方式
- 按限额与商家指标过滤/排序广告
第二阶段 —— 个人订单(需 API 密钥)
- 列出 P2P 订单历史
- 按交易类型 / 时间范围过滤
- 提供汇总统计
安全与隐私规则
凭据
所需环境变量:BINANCE_API_KEY(作为 header 发送)BINANCE_SECRET_KEY(用于签名)
绝不显示完整密钥
- API Key:显示 前 5 + 后 4 字符:
abc12...z789 - Secret Key:始终掩码;仅显示 最后 5 位:
...c123
最小权限
- Binance API 权限:仅开启读取。
- 不要请求/鼓励开通交易、提现或修改权限。
存储建议
- 优先使用环境注入(会话/运行时环境变量),而非写入磁盘。
- 仅在用户明确同意时才写入
.env。 - 保存前确保
.env已加入.gitignore。
⚠️ 关键:SAPI 签名(与标准 Binance API 不同)
参数排序
- 不要对参数排序 用于 SAPI 请求。
- 构建查询字符串时保持原始插入顺序。
# ✅ SAPI 正确:保持插入顺序 params = {"page": 1, "rows": 20, "timestamp": 1710460800000} query_string = urlencode(params) # 不排序
# ❌ 错误(仅标准 Binance API 需要):排序 query_string = urlencode(sorted(params.items()))
签名细节
参见:references/authentication.md,内含:
- RFC 3986 百分号编码
- HMAC SHA256 签名流程
- 所需 header(含 User-Agent)
- SAPI 特有的参数排序
API 概览
公开查询(MGS C2C Agent API — 无需身份验证)
Base URL:https://www.binance.com| 接口 | 方法 | 参数 | 用途 |
|---|---|---|---|
/bapi/c2c/v1/public/c2c/agent/quote-price | GET | fiat, asset, tradeType | 快速价格查询 |
/bapi/c2c/v1/public/c2c/agent/ad-list | GET | fiat, asset, tradeType, limit, order, tradeMethodIdentifiers | 搜索广告 |
/bapi/c2c/v1/public/c2c/agent/trade-methods | GET | fiat | 获取支付方式 |
tradeType:BUY或SELL(大小写不敏感)limit:1–20(默认 10)tradeMethodIdentifiers:以 纯字符串 传递(非 JSON 数组)——例如tradeMethodIdentifiers=BANK或tradeMethodIdentifiers=WECHAT。值 必须 使用trade-methods接口返回的identifier字段(见下方流程)。
["BANK"]——会返回空结果。流程:按支付方式比较价格
当用户想比较不同支付方式价格(如“支付宝 vs 微信”),按以下两步执行:步骤 1 —— 调用 trade-methods 获取目标法币的正确标识符:
GET /bapi/c2c/v1/public/c2c/agent/trade-methods?fiat=CNY
→ [{"identifier":"ALIPAY",...}, {"identifier":"WECHAT",...}, {"identifier":"BANK",...}]
步骤 2 —— 将 identifier 作为纯字符串传入 ad-list 的 tradeMethodIdentifiers,每种支付方式各请求一次,然后比较:
GET /bapi/c2c/v1/public/c2c/agent/ad-list?fiat=CNY&asset=USDT&tradeType=BUY&limit=5&tradeMethodIdentifiers=ALIPAY&tradeMethodIdentifiers=WECHAT
对比每组结果中的最优价格。重要: 不要硬编码标识符如"Alipay"或"BANK"。始终先调用trade-methods获取对应法币的精确identifier字符串。
个人订单(Binance SAPI — 需身份验证)
Base URL:https://api.binance.com| 接口 | 方法 | 身份验证 | 用途 |
|---|---|---|---|
/sapi/v1/c2c/orderMatch/listUserOrderHistory | GET | 是 | 订单历史 |
/sapi/v1/c2c/orderMatch/getUserOrderSummary | GET | 是 | 用户统计 |
- Header:
X-MBX-APIKEY - Query:
timestamp+signature - Header:
User-Agent: binance-wallet/1.0.0 (Skill)
输出格式指南
价格报价
- 当双边都有数据时,同时展示(最佳买入 / 最佳卖出)。
- 使用法币符号并保留两位小数。示例:
USDT/CNY (P2P)
- 买入 USDT(你买币):¥7.20
- 卖出 USDT(你卖币):¥7.18
广告列表
返回 前 N 条 固定格式数据: 1) adNo(广告编号 / 标识符) 2) price(法币价格) 3) 商家名称 4) 成交率 5) 限额 6) 支付方式(标识符)除非 API 返回,否则不要生成带参数的外部链接。
用户请求下单时:
- 本技能不支持自动下单。
- 当用户想下单,提供直达该广告的链接,使用 adNo:
https://c2c.binance.com/en/adv?code={adNo}
{adNo}:来自广告列表结果中的广告编号/标识符
https://c2c.binance.com/en/adv?code=123
- 该链接打开具体广告详情页,用户可直接在此下单。
个人订单
- 时间格式:
YYYY-MM-DD HH:mm (UTC+0)—— 始终以 UTC 时区显示 - 包含:类型、资产/法币、数量、总额、状态
- 过滤时提供简要汇总行(笔数 + 总额)
时间字段转换(listUserOrderHistory 中的 createTime):
createTime字段返回 Unix 时间戳,毫秒(13 位)。- 转换为 UTC+0 时区* 的可读格式:
# Python 示例 from datetime import datetime, timezone readable_time = datetime.fromtimestamp(createTime / 1000, tz=timezone.utc).strftime('%Y-%m-%d %H:%M (UTC+0)')
// JavaScript 示例 const readableTime = new Date(createTime).toISOString().replace('T', ' ').slice(0, 16) + ' (UTC+0)'; // 或更明确: const date = new Date(createTime); const readableTime = date.getUTCFullYear() + '-' + String(date.getUTCMonth() + 1).padStart(2, '0') + '-' + String(date.getUTCDate()).padStart(2, '0') + ' ' + String(date.getUTCHours()).padStart(2, '0') + ':' + String(date.getUTCMinutes()).padStart(2, '0') + ' (UTC+0)';
- 始终向用户展示转换后的时间并带时区信息,而非原始时间戳。
错误处理(面向用户)
- 无效 API 密钥 (-2015):提示检查
.env/ API 管理。 - 签名失败 (-1022):警告密钥错误、参数排序或时间戳过期。
- 时间戳无效 (-1021):建议校准时间 / 重新生成时间戳。
- 限速:请稍后重试。
限制(出于设计)
本技能不会:- 下单/撤单
- 标记已付款 / 放币
- 提交申诉
- 发布/修改广告
- 暴露超出历史/汇总所需的敏感订单详情接口
如需应用内操作,仅引导用户至官方 P2P 订单页面(仅作通用入口)。
开发者说明
版本检查(每次会话首次调用)
每次会话首次调用本技能时,请求:GET /bapi/c2c/v1/public/c2c/agent/check-version?version=1.0.1(Base:https://www.binance.com)
行为:
- 若
needUpdate=true:显示:P2P 技能有新版本可用(当前:{clientVersion},最新:{latestVersion}),建议更新。 - 否则 / 失败:静默继续。
客户端操作
- 资产过滤:若 API 不支持,先获取再本地过滤。
- 汇总:当汇总接口不足时,客户端自行计算总计。