二维码支付

介绍

在网页上展示一个付款二维码, 用户用手机扫码并完成支付。支付完成后,页面跳回商户的支付成功页面。

该方式比较适合PC网站。

流程

participant 用户
用户->商户: 1. 网站下单
商户->scanforpay: 2. 创建支付订单
scanforpay->支付平台: 3. 创建支付订单
支付平台->scanforpay: 4. 返回支付相关信息
scanforpay->商户: 5. 返回支付页面地址
商户->用户: 6.跳转到支付页面,展示二维码
用户-->支付平台: 7.扫二维码,进行支付
支付平台->scanforpay: 8.回调支付结果
scanforpay->商户: 9.回调支付结果
商户->用户: 10.返回商户页面,\n显示交易结果
支付平台-->scanforpay: 11. 异步通知结果
scanforpay-->商户: 12. 异步通知结果

商家调用接口生成在线支付订单,接口会返回一个支付地址(payUrl),商家需引导用户跳转到该地址进行付款。

用户付款成功后会回调商户提供的支付回调地址。同时scanforpay后台会异步把支付结果通知到支付成功通知地址上。

请商户同时处理回调和异步通知, 以保证订单的结果正确。收到回调后, 您应该调用支付查询进行验证。

订单创建接口

请求地址

POST

https://pay.scanforpay.com/api/offline/qrcode
名称 参数名 数据类型 必填 说明
门店编号 storeNo String (15) Y 由scanforpay分配
商户订单号 partnerOrderNo String (32) Y 由商户生成
20180802100000001
支付钱包 wallet String (10) Y Wechat: 微信支付
Alipay: 支付宝
商品金额 goodsExtraAmount int N 交易币种的最小单位,如果商家币种是人民币,则100表示100分=1元;如果商家币种是日元,则100表示日元的 100元
商品附加费 goodsAmount int N 交易币种的最小单位,如果商家币种是人民币,则100表示100分=1元;如果商家币种是日元,则100表示日元的 100元
交易币种 currency String (10) Y 交易币种需与商户交易币种一致
交易金额 orderAmount int Y 交易币种的最小单位
如果商家币种是人民币,则100表示100分=1元;如果商家币种是日元,则100表示日元的 100元
交易说明 orderTitle String(100) N 对交易的说明
操作员 operatorId String(20) N 由商户填写 100001
终端编号 terminalNo String(20) N 由商户填写 100002
支付成功通知地址 notifyUrl String(200) N 如果填写,则支付成功后会通知到该地址,商户需处理重复通知的情况.
如果不填,则支付成功不会进行通知。
支付回调地址 returnUrl String(200) N 用户支付完成或者取消后跳转回商家页面
二维码过期时间 it_b_pay String(10) N 指定从用户扫描二维码开始,用户可以完成付款的时间段。时间一到,交易就会自动结束。默认情况下,此字段的值为3m。该字段的值在1m-15d的范围内。
注意:
1、 以下缩写用于表示时间单位:
m: 分钟
h: 小时
d: 天
c: 当日(无论何时创建交易,都将在0:00关闭)。
2、 该参数数值的小数点被拒绝,例如1.5h需要转换为90m。
示例:1d
二维码过期时间 qr_code_it_b_pay String(10) N 指定用户从创建二维码起可以完成付款的时间段。时间一到,交易就会自动结束。此字段的值在1m-2h的范围内。如果指定了此参数,则it_b_pay参数将无效。
注意:
1、 以下缩写用于表示时间单位:
m: 分钟
h: 小时
2、 该参数数值的小数点被拒绝,例如1.5h需要转换为90m。
示例:1m
请求示例
{
    "request": {
        "header": {
            "requestTime": "2018-07-25T18:06:05+08:00",
            "partnerNo": "10001",
            "signType": "SHA256",
            "version": "1.0",
            "reqMsgId": "fd03f269-3180-4575-8af0-8f6cf324fb0f"
        },
        "body": {
            "storeNo": "100010000000002",
            "partnerOrderNo": "p20180725180605466813",
            "wallet": "Alipay",
            "currency":"HKD",
            "orderAmount": 2100,
            "orderTitle": "Consume",
            "operatorId": "211918",
            "terminalNo": "123456",
            "notifyUrl": "http://192.168.31.72:8080/ScanForPay/notify",
            "returnUrl": "http://192.168.31.72:8080/ScanForPay/return"
        }
    },
    "signature": "2d2d5c66a67a24b5e13705cc38f34d93c395a7d9e0e4ff9425c9ce07b806a1cc"
}
响应数据
名称 数据标识 数据类型 必填 说明
响应码 code int(5) Y 1:成功 其他为交易失败
响应信息 msg varchar (100) Y 响应信息
支付地址 payUrl varchar(200) Y 由scanforpay生成,用户访问该地址并登陆进行支付
响应示例
成功响应实例
{
    "response": {
        "header": {
            "partnerNo": "10001",
            "respTime": "2018-07-25T18:06:12+08:00",
            "signType": "SHA256",
            "version": "1.0",
            "reqMsgId": "213ca19e-c75f-450d-9acf-46e860570bb9"
        },
        "body": {
            "code": 1,
            "msg": "success",
            "payUrl ": "https://www.scanforpay.com/api/online/pay/5a421395def7ffdsa610f2"
        }
    },
    "signature": "0710b2630b467c14b3d54295def7f89be61097c21472547823b43c58f3466b08"
}
错误响应报文
{
    "response": {
        "header": {
            "partnerNo": "10001",
            "respTime": "2018-07-25T17:37:14+08:00",
            "signType": "SHA256",
            "version": "1.0",
            "reqMsgId": "c11fe1c7-069b-4399-be00-31830a5de63d"
        },
        "body": {
            "code": 30
            "msg": "订单不存在",
        }
    },
    "signature": "5719065ecea463366cbf39b728b9b8cba940365c0c053dd96effde57f7edc1f8"
}
支付回调

如果用户支付成功,会将用户跳转回商户上送的回调地址上去。同时附带POST请求参数

名称 数据标识 数据类型 必填 说明
商户订单号 partnerOrderNo String (32) Y 由商户生成, 20180802100000001

商户在收到回调后应调用交易查询,核实交易的真实状态以便后续的处理。 在回调的同时,scanforpay会通过异步的方式通知商户的后台服务器, 具体可查看交易通知

results matching ""

    No results matching ""