商户扫码收款
此文档适用于在商户扫描用户的微信,支付宝的条码或银联云闪付二维码的支付方式。 主要应用场景是线下餐饮门店,零售商超等。
工作原理
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,此订单将再无成功可能,此时可停止轮询。