API
API
-
什么是API?
API面向想要创建应用程序与Paxful连接的开发者或企业。
应用程序编程接口 (APIs) 是进一步与Paxful连接的方式。要了解更多信息,请点击这里。 -
设置Webhook
Webhook帮助您接收Paxful市场活动的实时HTTPS通知 例如,在新交易开始时,或交易伙伴于在线聊天中发送信息时,我们会为您发送通知。 这样以来,您就无需向API查询可能发生或未发生的对象更改,并避免达到速率限制。 这份指南向您讲解如何在Paxful上设置Webhook。
我们支持以下活动的Webhook:
- Paxful上有新交易即将开始
- 交易在线聊天中收到信息
- 交易在线聊天中收到附件
- 有人浏览了您的Paxful个人资料
- 有人查看了您的出价
- 交易对象已支付
- 交易已取消或过期
- 比特币成功出售
- 已购得比特币
- 比特币已存入余额
- 比特币存款正在处理中
- 从交易对象处收到的评价
- 收到新的反馈回复
设置Webhook
请注意:请确保您的服务已做好接收Webhook的准备。 在URL保存的过程中,您的服务应采用“ X-Paxful-Request-Challenge”请求标头并将其原样放入响应中。
我们的请求标头应以这种形式出现在您的有效负载中(这是Node.js的Webhooks服务示例):
1. 登入您的Paxful帐户,将鼠标放在页面右上角的用户名上,然后在出现的菜单中点击设置。
设置页面将会打开。
2. 在页面左侧的菜单中,点击“开发者。”
开发者页面将会打开。
3. 如果您没有 API 密钥,请在下方字段输入双因素验证码,然后点击添加新 API 密钥。 如果您已有 API 密钥,则可以略过此步骤。
您的新 API 密钥将连同其他部分出现在开发者页面。
4. 从您的App中复制URL。
前往Paxful开发者页面的Webhook部分。 将链接复制到请求URL字段,然后点击保存。提示:只有HTTPS地址类型支持我们的Webhook。 HTTP地址不适用于此目的。
请求标头已发送至您的App。
请注意:超时时间为10秒。 如果我们未收到您App的响应,则URL将不会保存,Webhook不会生成。
5. 如果成功,可以订阅的活动列表将出现在下方。 请从订阅活动列表中选择一个活动。
请注意:
- 选择完毕后,该活动将被自动保存。
- 如果在发送活动信息至您的App时出现三次失败,则Webhook(URL)将被停用。
- 要输入新链接,请用新的URL替换当前的URL,然后点击更改。
- 要彻底停用您的Webhook,请点击删除。
- 要重新激活已停用的URL,请点击重试。
如果请求URL保存成功,我们的活动将以下方形式出现在您的App中:
来自Paxful的验证请求
Paxful会为您的App创建专属字符串,并与您分享。 你可以使用自己的签名密保,放心验证来自Paxful的请求。
我们在每次发送HTTPS请求时,都会添加"X-Paxful-Signature" HTTPS标头。 签名结合了签名密保与我们发送的请求正文,使用标准HMAC-SHA256密钥哈希。
请注意:每次请求均产生专属签名,不直接包含任何密保信息。 此操作可以保证您的App安全,防止不良用户进行非法操作。
JavaScript 示例
const crypto = require('crypto'); const express = require('express'); const app = express(); const port = 3000; const bodyParser = require('body-parser');
您来自https://paxful.com/account/developer页面的API密保:
const apiSecret = 'maE5KV16FV0nDyh7XPm2F8f8FZTdtb5p'; app.use(bodyParser.json());
当您收到服务地址验证请求时,应从请求中获取"X-Paxful-Request-Challenge"标头,然后将其放入响应中。
app.use((req, res, next) => {
地址验证请求不包含有效载荷和请求签名.
if (!Object.keys(req.body).length && !req.get('X-Paxful-Signature')) { console.log('Address verification request received.'); const challengeHeader = 'X-Paxful-Request-Challenge'; res.set(challengeHeader, req.get(challengeHeader)); res.end(); } else { next(); } });
收到事件通知时,应验证“ X-Paxful-Signature”标头。 如果请求包含错误的签名,请不要处理。
app.use((req, res, next) => { const providedSignature = req.get('X-Paxful-Signature'); const calculatedSignature = crypto.createHmac('sha256', apiSecret).update(JSON.stringify(req.body)).digest('hex'); if (providedSignature !== calculatedSignature) { console.log('Request signature verification failed.'); res.status(403).end(); } else { next(); } });
现在您可以处理事件了。
app.post('*', async (req, res) => { console.log('New event received:'); console.log(req.body); res.end(); }); app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`));