Safira Paydocs

功能激活

概述

PIX Bacen 模式包含两个需要激活的功能:

  1. BACEN 接口端点:访问兼容中央银行规范的接口端点
  2. V2 Webhooks:使用 {type, data} 信封结构的新通知格式

激活 PIX Bacen 模式是一项不可逆变更。Webhook 将切换到完全不同的格式。请确保在申请激活前已更新您的集成。

如何申请激活

1. 联系技术支持

发送邮件至 suporte@safirapay.com,包含以下信息:

  • 公司名称
  • CNPJ
  • 应用程序 Client ID
  • 确认已实现 V2 Webhook 支持

2. 等待配置

我们的团队将:

  1. 在您的账户上激活 PIX Bacen 模式
  2. 启用接口端点和 V2 Webhook 格式
  3. 通过邮件确认激活完成

3. 测试集成

激活后:

  1. 通过 PUT /cob/:txid 发起测试收款
  2. 验证 V2 Webhook 是否正确到达
  3. 确认您的应用程序已正确处理新格式

激活后有哪些变化?

接口端点

您将获得 BACEN 接口端点的访问权限:

激活前激活后
POST /pix/cash-inPUT /cob/:txid
POST /pix/cash-outPOST /dict/pix
POST /pix/:id/refundPUT /pix/:e2eid/devolucao/:id
GET /balanceGET /accounts/balances

旧接口端点仍然可用。您可以同时使用两套 API。

Webhooks

Webhook 格式将完全改变:

{
  "event": "CashIn",
  "status": "CONFIRMED",
  "transactionId": "12345",
  "movementType": "CREDIT",
  "originalAmount": 100.00,
  "finalAmount": 100.00,
  "counterpart": {
    "name": "João Silva",
    "document": "123.xxx.xxx-xx"
  }
}
{
  "type": "RECEIVE",
  "data": {
    "id": 123,
    "txId": "abc123",
    "status": "LIQUIDATED",
    "payment": {
      "amount": "100.00",
      "currency": "BRL"
    },
    "creditDebitType": "CREDIT",
    "debtorAccount": {
      "name": "João Silva",
      "document": "123.xxx.xxx-xx"
    },
    "creditorAccount": {...}
  }
}

Webhook 主要区别

方面V1V2
结构字段在根层级信封结构 {type, data}
事件类型event: "CashIn"type: "RECEIVE"
成功状态CONFIRMEDLIQUIDATED
退款状态CONFIRMEDREFUNDED
金额类型number (100.00)string ("100.00")
交易对手counterpartdebtorAccount / creditorAccount

准备您的集成

1. 更新 Webhook 处理器

// 激活前 (V1)
function handleWebhookV1(payload: any) {
  if (payload.event === 'CashIn' && payload.status === 'CONFIRMED') {
    processPayment(payload.transactionId, payload.finalAmount);
  }
}

// 激活后 (V2)
function handleWebhookV2(payload: any) {
  if (payload.type === 'RECEIVE' && payload.data.status === 'LIQUIDATED') {
    const amount = parseFloat(payload.data.payment.amount);
    processPayment(payload.data.id, amount);
  }
}

2. 更新类型/接口定义

// V2 类型定义
interface WebhookV2Payload {
  type: 'RECEIVE' | 'TRANSFER' | 'REFUND';
  data: WebhookV2Data;
}

interface WebhookV2Data {
  id: number;
  txId: string | null;
  status: 'PENDING' | 'LIQUIDATED' | 'REFUNDED' | 'ERROR';
  payment: {
    amount: string;  // 注意:是字符串,不是数值!
    currency: string;
  };
  creditDebitType: 'CREDIT' | 'DEBIT';
  debtorAccount: AccountInfo;
  creditorAccount: AccountInfo;
  endToEndId: string | null;
  refunds: RefundInfo[];
  // ... 其他字段
}

3. 在开发环境中测试

在申请生产环境激活之前:

  1. 在沙盒环境中申请激活
  2. 对收款、转账和退款进行完整测试
  3. 验证所有 Webhook 均被正确处理

回滚

激活后无法自动恢复到 V1。如需回滚,请联系技术支持。

建议在过渡期间同时支持两个版本:

function handleWebhook(payload: any) {
  // 通过格式检测版本
  if (payload.type && payload.data) {
    return handleWebhookV2(payload);
  } else if (payload.event) {
    return handleWebhookV1(payload);
  }
  throw new Error('Unknown webhook format');
}

激活检查清单

更新您的代码以处理 {type, data} 信封格式

在沙盒环境中申请激活并运行完整测试

测试:RECEIVE、TRANSFER、REFUND,包含状态 LIQUIDATED、REFUNDED 和 ERROR

发送邮件至 suporte@safirapay.com 并附上所需信息

激活后监控首批交易以确保一切正常运行

常见问题

后续步骤

本页目录