# Merchant scan barcode

This document is for offline merchant, eg. restaurant, supermarket, retailer etc. Merchant scan user's barcode or qrcode(Alipay,Wechat or UnionPay) to launch payment.

# Request URL

Endpoint: https://api.iotpaycloud.com/v1/create_order

Request method:

  • POST
  • Content-Type: application/x-www-form-urlencoded

# Parameters

name required type sample description
mchId y String(30) 20001222 merchant id assigned by IOTPay
mchOrderNo y String(30) 20160427210604000490 order id assigned by merchant
need to be unique
channelId y String WX_MICROPAY or
ALIPAY_MICROPAY
only support these two options
currency y String(3) CAD 3 letter representation for currency,eg:CAD
amount y int 100 payment amount in cents,eg. $28.65 is 2865
clientIp y String(32) 210.73.10.148 client ip
device y String(64) V1-B18 The type of the scaning device
deviceId y String(64) V102219391901 The ID of the scaning device
notifyUrl y String(200) http://xxx.com/notify.php need to pass this value,but not used for now
subject y String(64) product1 product title
body y String(255) this product is good product description
codeType y String(64) "barcode" Fill in "barcode" here
identityCode y String(64) 352645673847987656 Personal payment code number
obtained by scanning
extra n String(512) {"productId":"100005761557771065",
"pos_flag":"yes"}
jobNo y String(50) merchant login name
remarks n String(200) remarks
sign y String(32) C380BEC2BFD727A4B6845133519F3AD6 signature

# parameter sample

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"}

# return result

Variable name Required Type Sample value Description
retCode Yes String SUCCESS SUCCESS/FAIL,either retCode or resCode is FAIL, the transaction failed
resCode Yes String SUCCESS SUCCESS/FAIL,either retCode or resCode is FAIL, the transaction failed
retMsg No String Signature Failed The returned information is the cause of the error if not blank.
Signature failure or parameter format verification error
payOrder No JSON order detail if resCode and retCode are SUCCESS, payOrder will be returned

The following fields are returned in payOrder:

Variable name Required Type Sample value Description
payOrderId Yes String 'AM20210727205735526962718926' unique pay order id assigned by IOT Pay
mchOrderNo Yes String '1627419455' unique pay order id assigned by merchant
status Yes Int 2 2 or 3 means transaction success

# polling order status

Even retCode and resCode are both SUCCESS, it doesn't mean user has finished the payment successfully. You still need to check status value, if the status = 2 or 3, it means the transaction is successful. Or else you need to use order query to poll the order status, eg, query status per 2 seconds, the max retries can be 30 times. If the status is not success in one minute, you can deem the transaction failed.

# order status

0: created but not paid
1: user is paying, e.g. user is typing password
2: paid
3: paid and notified the merchant(if notifyUrl used)
4: cancelled by system
9: cancelled by user
when polling order status, only 2 or 3 is success, if status > 3, the order won't be success again, the polling can be stopped.

# demo and source code

Demo

Source code

Last Updated: 7/27/2021, 3:02:32 PM