Wayflow
    • 接入指南
    • 认证与签名
    • 加密与解密
    • Webhook 通知
    • 错误码与重试
    • 关于SDK
      • SDK 使用指南
      • PHP 快速开始
      • Java 快速开始
      • Node.js / TypeScript 快速开始
      • Python 快速开始
      • Go 快速开始
    • 卡产品组
      • 卡产品组列表(分页)
        POST
      • 卡产品组列表(非分页)
        POST
      • 卡产品组详情
        POST
    • 卡产品
      • 卡产品相关字典
        • 费用模型字典
        • 舍入模式字典
      • 卡产品列表(分页)
        POST
      • 卡产品列表(非分页)
        POST
      • 卡产品详情
        POST
    • 卡钱包
      • 卡钱包划转
        • 卡钱包转出
        • 卡钱包转入
      • 卡钱包相关字典
        • 交易订单状态字典
        • 交易订单流向字典
        • 交易订单审批状态字典
      • 卡钱包查询
        • 卡钱包列表(分页)
        • 卡钱包列表(非分页)
        • 卡钱包详情
    • 卡片交易
      • 交易查询
        • 卡片交易列表(分页)
        • 卡片交易详情
      • 卡片交易相关字典
        • 交易类型字典
        • 交易状态字典
        • 交易商户国家字典
        • 交易资金流向字典
    • 卡钱包交易
      • 卡钱包交易订单
        • 卡钱包转账订单列表(分页)
        • 卡钱包转账订单详情
        • 取消卡钱包转账订单
      • 卡钱包交易流水
        • 卡钱包流水列表(分页)
        • 卡钱包流水详情
    • 卡片
      • 卡片查询
        • 10010105
          • 卡片详情
        • 10010107
          • 卡片详情
        • 卡片列表(分页)
        • 查询卡片敏感信息
      • 发卡
        • 10010105
          • 消费控制配置示例
          • 字典
            • 商户查询
              • 商户列表(分页)
              • 商户详情
            • 国家字典
            • 消费限制类型字典
            • 消费限额周期字典
          • 发卡预检
          • 发卡
        • 10010107
          • 发卡
          • 发卡预检
      • 卡片更新
        • 10010105
          • 更新卡片消费规则
        • 更新卡片别名
      • 卡片状态操作
        • 卡片冻结
        • 卡片解冻
        • 卡片注销
      • 卡片任务
        • 发卡任务详情
        • 发卡任务明细(分页)
        • 批量修改卡片状态
        • 卡片状态任务明细(分页)
        • 卡片状态任务详情
      • 卡片相关字典
        • 卡片状态字典
        • 时区字典
      • 充值
        • 10010107
          • 充值预检
          • 充值
      • 提现
        • 10010107
          • 提现预检
          • 提现

    加密与解密

    用 PHP SDK 加密和解密#

    初始化#

    安装 SDK 后,配置四份密钥。以下示例中的文件路径、API Key 请替换为自己的配置。

    1. 加密发卡请求#

    $payload 是按发卡接口填写的业务参数;$idempotencyKey 是业务侧生成并保存的幂等键,同一业务重试复用。
    SDK 自动生成加密信封并签名,不需要自行加密或再次包装 Body。另两种加密发卡接口使用相同方法,替换路径和业务参数即可。

    2. 解密卡片敏感信息#

    请求发送普通 JSON。保存本次请求 ID,响应验签成功后,将 data 和本地请求 ID 交给 SDK 解密。
    post() 自动验签;decryptSensitiveEnvelope() 自动核对指纹、重建 AAD 并解密。任一步抛出异常时停止处理。

    3. 接收 Webhook#

    在回调地址的 PHP 处理程序中使用同一份本地配置:
    handle() 自动验签、检查接收方并解密。失败时不返回成功;不要先解析再重新序列化原始请求体。

    接收顺序:验签 → 校验指纹并重建 AAD → 解密 → 校验明文。 签名规则统一见认证与签名。

    准备配置#

    配置用途
    平台鉴权公钥验证响应和 Webhook 签名
    平台加密公钥及指纹加密发送给平台的请求
    客户端加密私钥及配对公钥指纹解密并核对信封接收密钥
    接收方 API Key 业务 IDWebhook 接收方校验及 AAD;从开发者中心对应 API Key 取得
    指纹格式为 SHA256:<64 位小写 hex>,摘要对象为公钥的 SPKI DER 字节。指纹不匹配时,到开发者中心核对该 API Key 登记的加密公钥及轮换记录;不要直接信任信封提供的指纹。

    信封与算法#

    {
      "algorithm": "RSA-OAEP-AES-256-GCM",
      "keyFingerprint": "SHA256:<公钥指纹>",
      "encryptedKey": "<标准 Base64>",
      "ciphertext": "<标准 Base64>",
      "aad": "<标准 Base64>"
    }
    Webhook 信封另含 envelopeVersion: 1。敏感 API 响应的信封位于 data,Webhook 信封是整个请求体。
    项目规则
    密钥包装RSA-OAEP,SHA-256、MGF1-SHA-256,空 Label
    内容加密AES-256-GCM,32 字节密钥、12 字节 IV、16 字节 Tag
    ciphertext 布局将 IV、密文、Tag 按顺序拼接,再进行 Base64 编码
    明文UTF-8 JSON
    严格校验 Base64、算法及长度。GCM 认证失败立即终止,不解析或使用部分解密结果。兼容字段 encryptedPayload 不作为解密输入。

    三种 AAD#

    四段以 | 连接后取 UTF-8 字节。使用本地上下文重建,再与严格 Base64 解码后的信封 aad 做长度校验及常量时间比较。
    场景第 1 段第 2 段第 3 段第 4 段
    加密请求本次请求 ID接口 routeTemplate本次 X-Timestamp平台加密公钥指纹
    敏感响应本次请求 ID空字符串加密时间戳客户端加密公钥指纹
    Webhook投递 ID固定字符串 webhookX-SlaunchX-Timestamp本地接收方 API Key 业务 ID
    四段之间仅添加分隔符,不添加空格。敏感响应第二段为空,实际包含连续两个 |。

    敏感响应时间戳#

    当前生产从信封 aad 获取第三段时间戳。先完成响应验签,再严格解析四段;仅提取时间戳,用本次发送的请求 ID 和本地公钥指纹重建完整 AAD。不要采用回显的请求 ID 或指纹替代本地值。
    时间戳由 GCM 的 AAD 认证校验,不可替换成 X-Response-Timestamp。格式和 AAD 比对通过后仍须完成 GCM 认证。

    Webhook 接收方#

    核对 X-SlaunchX-Key-Id 等于本地配置的接收方 API Key 业务 ID。AAD 第四段使用本地值,不是公钥指纹。解密后再次核对 deliveryBizId 和 eventType 与已验签请求头一致。

    加密请求#

    以下发卡接口必须发送加密信封:
    POST /card-products/10010105/cards/create
    POST /card-products/10010106/shared/cards/create
    POST /card-products/10010106/prepaid/cards/create
    发卡预检发送普通 JSON。其他接口仅在接口定义明确标注加密时使用。
    1.
    准备业务参数、持久化的幂等键及请求 ID。
    2.
    使用本次时间戳构造 AAD,生成信封。
    3.
    信封只序列化一次,对实际发送字节签名。
    4.
    发送 X-Request-Id、X-Platform-Encryption-Key-Id 及接口要求的幂等键。
    使用 SDK 时传入业务参数和加密选项即可,不手动包装第二层信封。建议先完成发卡预检;单张和多张均通过返回的批次 ID 查询结果。

    查询卡片敏感信息#

    调用 POST /card-products/cards/sensitive/reveal 时,请求发送普通 JSON,不包装加密信封;响应的 data 是加密信封,按上述顺序验签和解密。解密后的明文字段:
    字段类型与校验
    pan字符串,12–19 位数字
    cvv字符串,3–4 位数字
    expiryMonth整数,1–12
    expiryYear整数
    私钥及 PAN、CVV、解密明文仅在受控服务端流程内使用,不写入日志或错误报告。
    Node.js 的 Fetch 响应头使用 headers.get();Node HTTP 服务端的 Webhook 请求头是小写键对象,例如 req.headers['x-slaunchx-timestamp']。不要混用两种读取方式。
    首次调用示例见 SDK 指南,各语言加密和接收器接口以对应交付版本的 README 为准。
    修改于 2026-09-19 08:50:04
    上一页
    认证与签名
    下一页
    Webhook 通知
    Built with