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)将被禁用。 调用Webhook的超时时间为3秒。
-
要输入新链接,请用新的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}`));
如有其它问题,请联络我们的客户支持。 此外,您还可以在我们的开发者文档中进一步了解我们的API服务。