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版本)
  • 代扣

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

循环扣款交易

本文档将介绍固定金额循环扣款交易的创建、查询与取消。

信息

如果循环扣款交易中的某一笔计划扣款失败(包括 startDate 当天的首次扣款),该循环扣款将被中止: 订单会被标记为失败(status = 9),系统会发送 failed 通知,并且不会再进行后续扣款。 被中止的循环扣款不会被取消,仍可通过查询接口返回,last_payment 为对应的失败订单。 如需停止循环扣款交易,请使用取消接口;如需继续向客户收款,请创建新的循环扣款。

创建循环扣款

端点

https://ccapi.iotpaycloud.com/v3/recurring/create

方法

POST

头部

Content-Type: application/json;charset=UTF-8

重要

如果请求中未包含 startDate:将把当前日期配置为该订阅的 startDate,并立即进行一次扣款,后续扣款将按循环频率进行。 如果首次扣款失败,不会创建循环扣款交易,retCode 为 FAIL,retData 中包含失败的订单(status = 9)。

如果请求中包含 startDate:创建时不会进行扣款。首次扣款将在 startDate(UTC)当天进行, retData 中包含待处理订单(status = 0),不包含支付详情。

请求
名称必需类型示例描述
mchIdyString10000701由 IOTPay 分配
mchOrderNoyString(50)1234567890abc由商户分配,每个商户下必须唯一
cardIdyString(50)添加卡端点所使用的 cardId(direct、redirect)。
frequencyyString[w,2w,4w,m]当前可选配置为 w(每周)、2w(每两周)、4w(每 4 周,28 天)或 m(每月,每月固定某一日)
startDatenInt1798761600首次循环扣款的 UNIX 时间戳(秒);例如 1798761600 => Fri Jan 01 2027 00:00:00 GMT+0000。必须是当前 UTC 日期之后,且在 10 年以内的日期。如果未提供 startDate,将立即进行首次扣款
amountyInt1500以分为单位,必须 > 0
currencyyString(3)CAD固定为:CAD
loginNameyString(12)jack123商户登录名
notifyUrlyString(200)http://sample.com/notify商户用于接收循环扣款通知的端点,必须为 http 或 https
descriptionnString(200)Test recurring order.循环扣款交易的可选描述
signyString(32)签名算法
响应
名称必需类型示例描述
retCodeyStringSUCCESS 或 FAIL
retMsgyString失败原因在此显示
retDatayJSON如果 retCode=SUCCESS,则返回订单详细信息
retData 包含订单信息:
名称必需类型示例描述
payOrderIdyString该循环扣款交易首笔订单的支付订单 Id
mchIdyString您的商户 Id
mchOrderNoyString应与请求的 mchOrderNo 一致
currencyyStringCAD
amountyInt100以分为单位,与请求 amount 一致
payTypeyStringpay固定为 pay
refundableyInt100以分为单位,与 amount 一致
statusyInt0,2,30 = 待处理订单(已提供 startDate,首次扣款尚未进行),2 或 3 = 成功
invoiceNumnString如果提供了 startDate,则不返回
paySuccTimenString2021-04-07 19:44:51支付成功的时间戳。如果提供了 startDate,则不返回
authNumnString如果提供了 startDate,则不返回
transNumnString如果提供了 startDate,则不返回
channelyStringPF_CC固定为 PF_CC
recurringIdyInt123新创建的循环扣款 Id,用于查询和取消接口
cardIdyString(50)应与请求的 cardId 一致
notifyUrlyString(200)http://sample.com/notify提供的 notifyUrl,应与请求的 notifyUrl 一致
frequencyyString[w,2w,4w,m]应与请求的 frequency 一致
startDateyString2027-01-01首次扣款日期(UTC 时间,YYYY-MM-DD)
nextPaymentyString2027-01-08下次计划扣款日期(UTC 时间,YYYY-MM-DD);如果提供了 startDate,则与 startDate 相同
descriptionnString(200)Test recurring order.循环扣款交易的可选描述,应与请求的 description 一致

按 Id 查询循环扣款

返回与所提供 recurringId 匹配的循环扣款信息,以及该循环扣款已发生的订单(分页列表)

端点

https://ccapi.iotpaycloud.com/v3/recurring/query

方法

POST

头部

Content-Type: application/json;charset=UTF-8

请求
名称必需类型示例描述
mchIdyString10000701由 IOTPay 分配
loginNameyString(12)jack123商户登录名
recurringIdyInt123创建循环扣款接口 返回的 recurringId。
pagenInt1要返回的 orders 的页码,默认为 1
pageSizenInt20每页订单数量,默认为 20,最大为 100
signyString(32)签名算法
响应
名称必需类型示例描述
retCodeyStringSUCCESS 或 FAIL
retMsgyString
retDatayJSON如果 retCode 为 SUCCESS,返回循环扣款详细信息
retData 包含以下循环扣款信息:
名称必需类型示例描述
idyInt123循环扣款 Id
amountyInt100以分为单位
midyString商户 id
currencyyStringCAD固定为 CAD
start_dateyString2027-01-01扣款开始日期(UTC 时间,YYYY-MM-DD)
frequencyyString[w,2w,4w,m]当前可选配置为 w(每周)、2w(每两周)、4w(每 4 周,28 天)或 m(每月,每月固定某一日)
descriptionnString(200)Test recurring order.循环扣款交易的可选描述
last_paidyString2027-01-01上次成功扣款日期(UTC 时间,YYYY-MM-DD),若尚未成功扣款则默认为 "1970-01-01"
last_paymentyString上次扣款(成功或失败)的 payorderid,若尚未发生扣款则为待处理首笔订单的 payorderid
next_paymentyString2027-01-08下次计划扣款日期(UTC 时间,YYYY-MM-DD)。如果上次扣款失败,则保持为该次扣款的日期,且不再进行后续扣款
cardIdyString(50)与该循环扣款关联的 cardId
ordersyJSON该循环扣款已发生订单的分页列表,最新的在前
orders 包含以下分页信息:
名称必需类型示例描述
pageyInt1当前页码
pageSizeyInt20每页订单数量
totalyInt45该循环扣款的订单总数
lastPageyInt3最后一页的页码
listyList当前页的订单;如果 page 超出 lastPage 则为空
orders.list 中每个 JSON object 包含以下订单信息:
名称必需类型示例描述
payOrderIdyString由 IOTPay 分配的订单号
mchIdyString您的商户 Id
mchOrderNoyString首笔订单为请求的 mchOrderNo,其后订单与 payOrderId 相同
originalOrderIdyString该循环扣款上一笔订单的支付订单 Id,首笔订单为空
currencyyStringCAD
amountyInt100以分为单位
payTypeyStringpay固定为 pay
refundableyInt100以分为单位
statusyInt0,1,2,3,90 = 待处理订单,1 = 未知,2 或 3 = 成功,9 = 失败
invoiceNumyString
paySuccTimeyString2021-04-07 19:44:51支付成功的时间戳,如果订单尚未扣款则为空
authNumyString
transNumyString
channelyStringPF_CC固定为 PF_CC
recurringIdyInt123应与请求的 recurringId 一致
capturenStringY固定为 Y
notifyUrlyString(200)http://sample.com/notify创建该循环扣款时提供的 notifyUrl

按 CardId 查询循环扣款

列出使用所提供 cardId 的客户的全部循环扣款

端点

https://ccapi.iotpaycloud.com/v3/recurring/query_by_card

方法

POST

头部

Content-Type: application/json;charset=UTF-8

请求
名称必需类型示例描述
mchIdyString10000701由 IOTPay 分配
loginNameyString(12)jack123商户登录名
cardIdyString(50)添加卡端点所使用的 cardId(direct、redirect)。
signyString(32)签名算法
响应
名称必需类型示例描述
retCodeyStringSUCCESS 或 FAIL
retMsgyString
retDatayList如果 retCode 为 SUCCESS,返回使用该 cardId 作为支付方式的循环扣款列表(若无则返回空列表)
retData 中的每个 JSON object 包含以下循环扣款信息:
名称必需类型示例描述
idyInt123循环扣款 Id
amountyInt100以分为单位
midyString商户 id
currencyyStringCAD固定为 CAD
start_dateyString2027-01-01扣款开始日期(UTC 时间,YYYY-MM-DD)
frequencyyString[w,2w,4w,m]当前可选配置为 w(每周)、2w(每两周)、4w(每 4 周,28 天)或 m(每月,每月固定某一日)
descriptionnString(200)Test recurring order.循环扣款交易的可选描述
last_paidyString2027-01-01上次成功扣款日期(UTC 时间,YYYY-MM-DD),若尚未成功扣款则默认为 "1970-01-01"
last_paymentyString上次扣款(成功或失败)的 payorderid,若尚未发生扣款则为待处理首笔订单的 payorderid
next_paymentyString2027-01-08下次计划扣款日期(UTC 时间,YYYY-MM-DD)。如果上次扣款失败,则保持为该次扣款的日期,且不再进行后续扣款
cardIdyString(50)应与请求中提供的 cardId 一致

取消循环扣款

用于停止循环扣款交易。后续不再进行扣款,被取消的循环扣款也不会再出现在查询接口的返回结果中

端点

https://ccapi.iotpaycloud.com/v3/recurring/cancel

方法

POST

头部

Content-Type: application/json;charset=UTF-8

请求
名称必需类型示例描述
mchIdyString10000701由 IOTPay 分配
loginNameyString(12)jack123商户登录名
recurringIdyInt123创建循环扣款接口 返回的循环扣款 id
signyString(32)签名算法
响应
名称必需类型示例描述
retCodeyStringSUCCESS 或 FAIL
retMsgyStringSuccessfully deleted recurring #255
retDatayJSON如果 retCode 为 SUCCESS,返回循环扣款的详细信息
retData 包含循环扣款信息:
名称必需类型示例描述
idyInt123循环扣款 Id
amountyInt100以分为单位
midyString商户 id
currencyyStringCAD固定为 CAD
start_dateyString2027-01-01扣款开始日期(UTC 时间,YYYY-MM-DD)
frequencyyString[w,2w,4w,m]当前可选配置为 w(每周)、2w(每两周)、4w(每 4 周,28 天)或 m(每月,每月固定某一日)
descriptionnString(200)Test recurring order.循环扣款交易的可选描述
last_paidyString2027-01-01上次成功扣款日期(UTC 时间,YYYY-MM-DD),若尚未成功扣款则默认为 "1970-01-01"
last_paymentyString上次扣款(成功或失败)的 payorderid,若尚未发生扣款则为待处理首笔订单的 payorderid
next_paymentyString2027-01-08下次计划扣款日期(UTC 时间,YYYY-MM-DD)。如果上次扣款失败,则保持为该次扣款的日期,且不再进行后续扣款
cardIdyString(50)与该循环扣款关联的 cardId

循环扣款通知

循环扣款交易的每笔扣款完成后,IOTPay 会向创建请求中提供的 notifyUrl 发送通知。 这包括未提供 startDate 时的首次扣款(仅在成功时发送),以及之后的每一次计划扣款(无论成功与否)。 扣款失败会中止该循环扣款,因此 failed 通知将是该循环扣款发送的最后一次通知。

重要

收到通知后请以纯文本 SUCCESS 作出响应。 否则通知会再次发送,总共最多 3 次,每次间隔 60 秒。

方法

POST

头部

Content-Type: application/json;charset=UTF-8

请求
名称必需类型示例描述
payOrderIdyString本次扣款的支付订单 Id
mchOrderIdyString首次扣款为请求的 mchOrderNo,其后扣款与 payOrderId 相同
channelyStringPF_CC固定为 PF_CC
amountyInt1500以分为单位
statusyStringsuccesssuccess 表示扣款成功;failed 表示扣款未成功且该循环扣款已被中止。其他任何值(pending、paying、returned)均视为未扣款
recurringIdyInt123本次扣款所属的循环扣款 id
previousOrderyString该循环扣款上一笔订单的支付订单 Id,首次扣款为空
paySuccessTimenString2021-04-07 19:44:51支付成功的时间戳,仅在扣款成功时返回
signyString(32)使用您的商户密钥按签名算法进行验证
上次更新: 2026/10/9 13:07
Prev
数字钱包支付
Next
撤销交易