商户扫码收款
此文档适用于在商户扫描用户的微信,支付宝的条码或银联云闪付二维码的支付方式。 主要应用场景是线下餐饮门店,零售商超等。
提示
如果您的销售系统具备条码扫描功能,可以自主研发应用程序以利用该端点功能。
您也可以通过电子邮件 info@iotpay.ca 或直接致电 +1 (604) 283-3268 来了解我们的预编程销售系统。
工作原理

API 请求
端点
https://api.iotpaycloud.com/v1/create_order
方法
POST
头部
Content-Type: application/x-www-form-urlencoded
! 提示
在收到访问凭证(商户 ID、登录名、商户密钥)之后, 您可以按照演示商户扫码收款进行测试。 这可能在阅读文档时对您有所帮助。
参数说明
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 商户ID | mchId | 是 | String(30) | 20001222 | 支付中心分配的商户号 |
| 商户订单号 | mchOrderNo | 是 | String(30) | 20160427210604000490 | 商户生成的订单号 请保证唯一性 |
| 支付通道 | channelId | 是 | String | WX_MICROPAY or ALIPAY_MICROPAY | 仅支持示例中的这两种渠道 |
| 币种 | currency | 是 | String(3) | CAD | 三位货币代码,仅支持加币:CAD和美金:USD |
| 支付金额 | amount | 是 | int | 100 | 支付金额,单位分 |
| 客户端IP | clientIp | 是 | String(32) | 210.73.10.148 | 客户端IP地址 |
| 设备 | device | 是 | String(64) | V1-B18 | The type of the scanning device |
| 设备Id | deviceId | 是 | String(64) | V102219391901 | The ID of the scanning device |
| 支付结果回调URL | notifyUrl | 是 | String(200) | http://xxx.com/notify.php | 支付结果回调URL,需要传值,但是没有notify |
| 商品主题 | subject | 是 | String(64) | 测试商品 | 商品主题 |
| 商品描述信息 | body | 是 | String(255) | xxpay测试商品描述 | 商品描述信息 |
| 条码类型 | codeType | 是 | String(64) | "barcode" | Fill in "barcode" here |
| 条码值 | identityCode | 是 | String(64) | 352645673847987656 | Personal payment code number obtained by scanning |
| 附加参数 | extra | 否 | String(512) | {"productId":"100005761557771065", "pos_flag":"yes"} | |
| 子账号 | jobNo | 是 | String(50) | 商户登录名 | |
| 附言 | remarks | 否 | String(200) | 商户的附言 | |
| 签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名值,详见签名算法 |
提示
由于兼容性要求,我们要求参数被包装如下:
params={"mchId":"10000576","mchOrderNo":1557771065,"extra":"{\"productId\":\"100005761557771065\",\"pos_flag\":\"yes\"}","channelId":"WX_MICROPAY","currency":"CAD","amount":1,"clientIp":"207.216.193.72","notifyUrl":"http:\/\/localhost\/testTool\/test\/notify.php","subject":"test","body":"payTest","device":"V1-B18","deviceId":"V102174C02773","codeType":"barcode","identityCode":"352645673847987656""sign":"DF1B222C8A482231E485DAA3D1A8F685"}返回结果
| 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|
| retCode | 是 | String | SUCCESS | SUCCESS/FAIL,无论retCode或resCode为FAIL, 订单都视为失败 |
| resCode | 是 | String | SUCCESS | SUCCESS/FAIL,无论retCode或resCode为FAIL, 订单都视为失败 |
| retMsg | 否 | String | Signature Failed | 请求失败理由 |
| payOrder | 否 | JSON | order detail | 如果resCode和retCode都为 SUCCESS,payOrder将被返回 |
payOrder的返回值:
| 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|
| payOrderId | 是 | String | 'AM20210727205735526962718926' | IOT Pay 分配的订单识别码 |
| mchOrderNo | 是 | String | '1627419455' | 商户生成的订单号 |
| status | 是 | Int | 2 | 2或3 代表订单成功 |
轮询订单状态
注意
即使retCode和resCode返回SUCCESS, 也不能保证用户已经成功支付。
商户需要判断返回的status字段值,如果status=2或3,表示订单成功。 否则的话,需要使用 order query 发起轮询确保订单状态成功。例如,每2秒钟查询订单状态一次,最多查30次。
订单状态列表
| 状态码 | 简介 |
|---|---|
| 0 | 创建成功但未付款 |
| 1 | 用户正在付款界面, 如用户正在输入密码 |
| 2 | 已支付成功 |
| 3 | 已支付成功并且已通知商家 |
| 4 | 被系统取消 |
| 9 | 被用户取消 |
提示
轮询订单状态时,仅当状态码为2或3时代表订单成功,若状态码大于3,此订单将再无成功可能,此时可停止轮询。
