IOTPay 技术接入文档IOTPay 技术接入文档
  • 介绍
  • 签名
  • 统一下单
  • 商户扫码收款
  • 顾客扫描二维码
  • 微信JSAPI支付集成(mobile web)
  • 微信JSAPI支付集成(微信小程序)
  • 线上安全支付
  • 商户App集成IOTPay
  • 查询订单接口
  • 异步支付结果通知
  • 获取clientIP
  • 退款接口
  • 退款查询接口
  • POS 半集成
  • WordPress WooCommerce 插件
  • V3

    • 介绍
    • 重定向集成
    • 重定向集成(支持3DS与AVS)
    • 嵌入式集成
    • 直接支付
    • 查询卡信息
    • 使用令牌进行购买
    • 数字钱包支付
    • 撤销交易
    • 退款交易
    • 查询交易
    • 银联 ExpressPay API
  • V2

    • Credit Card API V2(不建议使用,请对接V3版本)
  • 介绍
  • 签约
  • 支付
  • 查询订单接口
  • 回调
  • English
  • 简体中文
  • 介绍
  • 签名
  • 统一下单
  • 商户扫码收款
  • 顾客扫描二维码
  • 微信JSAPI支付集成(mobile web)
  • 微信JSAPI支付集成(微信小程序)
  • 线上安全支付
  • 商户App集成IOTPay
  • 查询订单接口
  • 异步支付结果通知
  • 获取clientIP
  • 退款接口
  • 退款查询接口
  • POS 半集成
  • WordPress WooCommerce 插件
  • V3

    • 介绍
    • 重定向集成
    • 重定向集成(支持3DS与AVS)
    • 嵌入式集成
    • 直接支付
    • 查询卡信息
    • 使用令牌进行购买
    • 数字钱包支付
    • 撤销交易
    • 退款交易
    • 查询交易
    • 银联 ExpressPay API
  • V2

    • Credit Card API V2(不建议使用,请对接V3版本)
  • 介绍
  • 签约
  • 支付
  • 查询订单接口
  • 回调
  • English
  • 简体中文
  • 指南

    • 介绍
    • 签名
    • 统一下单
    • 商户扫码收款
    • 顾客扫描二维码
    • 微信JSAPI支付集成(mobile web)
    • 微信JSAPI支付集成(微信小程序)
    • 线上安全支付
    • 商户App集成IOTPay
    • 查询订单接口
    • 异步支付结果通知
    • 获取clientIP
    • 退款接口
    • 退款查询接口
    • POS 半集成
    • WordPress WooCommerce 插件
  • 信用卡

    • V3

      • 介绍
      • 重定向集成
      • 重定向集成(支持3DS与AVS)
      • 嵌入式集成
      • 直接支付
      • 查询卡信息
      • 使用令牌进行购买
      • 数字钱包支付
      • 撤销交易
      • 退款交易
      • 查询交易
      • 银联 ExpressPay API
    • Credit Card API V2(不建议使用,请对接V3版本)
  • 代扣

    • 介绍
    • 签约
    • 支付
    • 查询订单接口
    • 回调

签名

基于安全考虑,我们要求所有的 IOTPay API 请求都必须经过签名。

此签名应作为每个 API 请求的一部分包含在内。

签名算法

示例: var ex_body= { "c":"cat", "a":"apple", "b":"boat", "d":""};

步骤 1:

从复制的请求主体对象中删除所有值为空的键值对

ex_body= { "c":"cat", "a":"apple", "b":"boat"};

步骤 2:

按升序的词典序(a,b,c,...,z)对结果主体进行排序

ex_body= {"a":"apple" "b":"boat", "c":"cat"};

步骤 3:

将结果主体连接成新字符串,格式为 URL 参数 "key1=value1&key2=value2"

mystr="a=apple&b=boat&c=cat"

步骤 4:

将您的商户密钥(在 IOTPay 入门过程中分配给您)附加到 mystr 的末尾

mystr+="&key={your_merchant_key}"

步骤 5:

对 mystr 进行 MD5 哈希,然后将哈希结果转换为全大写字母。这就是您的 sign

sign = toUpper(md5(mystr));

步骤 6:

将 sign 的值附加到原始请求主体

ex_body.sign = sign; // 现在您可以发送签名请求

//发送请求前的 ex_body
{"a":"apple", "b":"boat", "c":"cat", "sign": "DAC619FA1BC9526EBDA688A9DC842B7A"};

推荐: 使用 签名验证器 来确认您的签名结果是否正确

步骤 7 (条件性):

仅当满足以下所有条件时,您可能需要执行一个额外的步骤:

  • 您已经完成了步骤 1-6,并仍然遇到签名验证错误

  • 请求中存在 subject 且不为空

  • subject 包含非 UTF8 编码的字符

    如果所有上述条件都适用,则应对 subject 的内容进行 URL 编码,并覆盖原始值;如下所示:

    ex_body.subject = url_encode(ex_body.subject);

步骤 8 (条件性):

为 body 字段重复执行步骤 7

步骤 9:

Info

如果端点是用于信用卡,则跳过此步骤,否则必须执行。

在验证了 sign 值后,使用 json_encode 将 json 对象串联起来,然后与 param = 连接。

params={"a":"apple", "b":"boat", "c":"cat", "sign": "DAC619FA1BC9526EBDA688A9DC842B7A"}

使用头部 Content-Type: application/x-www-form-urlencoded 发送请求。

演示代码


在线签名验证器

签名验证器

上次更新: 2024/8/1 14:14
Prev
介绍
Next
统一下单