设置Webhook

Webhook帮助您接收Paxful市场活动的实时HTTPS通知 例如,在新交易开始时,或交易伙伴于在线聊天中发送信息时,我们会为您发送通知。 这样以来,您就无需向API查询可能发生或未发生的对象更改,并避免达到速率限制。 这份指南向您讲解如何在Paxful上设置Webhook。

我们支持以下活动的Webhook:

  • Paxful上有新交易即将开始
  • 交易在线聊天中收到信息
  • 交易在线聊天中收到附件
  • 有人浏览了您的Paxful个人资料
  • 有人查看了您的出价
  • 交易对象已支付
  • 交易已取消或过期
  • 比特币成功出售
  • 已购得比特币
  • 比特币已存入余额
  • 比特币存款正在处理中
  • 从交易对象处收到的评价
  • 收到新的反馈回复

设置Webhook

请注意:请确保您的服务已做好接收Webhook的准备。 在URL保存的过程中,您的服务应采用“ X-Paxful-Request-Challenge”请求标头并将其原样放入响应中。

我们的请求标头应以这种形式出现在您的有效负载中(这是Node.js的Webhooks服务示例):

RequestHeader.png

1. 登入您的Paxful帐户,将鼠标放在页面右上角的用户名上,然后在出现的菜单中点击设置
ClickSettings.png

设置页面将会打开。

2. 在页面左侧的菜单中,点击“开发者。”
Click_Developer.png

开发者页面将会打开。

3. 如果您没有 API 密钥,请在下方字段输入双因素验证码,然后点击添加新 API 密钥。 如果您已有 API 密钥,则可以略过此步骤。
AddAPIKey.png

您的新 API 密钥将连同其他部分出现在开发者页面。

4. 从您的App中复制URL。
前往Paxful开发者页面的Webhook部分。 将链接复制到请求URL字段,然后点击保存

提示:只有HTTPS地址类型支持我们的Webhook。 HTTP地址不适用于此目的。


ClickSave.png

请求标头已发送至您的App。

请注意:超时时间为10秒。 如果我们未收到您App的响应,则URL将不会保存,Webhook不会生成。

5. 如果成功,可以订阅的活动列表将出现在下方。 请从订阅活动列表中选择一个活动。
Events.png

请注意:

  • 选择完毕后,该活动将被自动保存。
  • 如果在发送活动信息至您的App时出现三次失败,则Webhook(URL)将被停用。
  • 要输入新链接,请用新的URL替换当前的URL,然后点击更改
  • 要彻底停用您的Webhook,请点击删除
  • 要重新激活已停用的URL,请点击重试。
    ClickRetry.png

如果请求URL保存成功,我们的活动将以下方形式出现在您的App中:

WebhookexampleEvent.png

来自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服务。

此组别内的文章