网页支付
介绍
网页支付需在商家网站中展示各个钱包的支付按钮给用户。
点击不同的按钮,买家将被重定向到相应钱包的支付页面。支付页面上展示相应的二维码,用户需要用App扫描二维码或者登陆进行付款。
一旦付款完成后,买家将被重定向到商家网站的支付结果页面。商家可以检查结果,并决定如何进行下一步操作。
同时支付宝会将支付结果以异步通知发送给商家。
流程
participant 用户
用户->商户: 1. 网站下单
商户->scanforpay: 2. 创建支付订单
scanforpay->支付平台: 3. 创建支付订单
支付平台->scanforpay: 4. 返回支付相关信息
scanforpay->商户: 5. 返回支付页面地址
商户->用户: 6.跳转到支付页面
用户-->支付平台: 7.扫码或者登陆进行支付
支付平台->scanforpay: 8.回调支付结果
scanforpay->商户: 9.回调支付结果
商户->用户: 10.返回商户页面,\n显示交易结果
支付平台-->scanforpay: 11.异步通知结果
scanforpay-->商户: 12. 异步通知结果
商家调用接口生成在线支付订单,接口会返回一个支付地址(payUrl)。商家需引导用户跳转到该地址进行付款,系统会根据用户客户端自动跳转PC或手机端网页.
用户付款成功后会回调商户提供的支付回调地址。同时scanforpay后台会异步把支付结果通知到支付成功通知地址上。
请商户同时处理回调和异步通知, 以保证订单的结果正确。收到回调后, 您应该调用支付查询进行验证。
订单创建接口
请求地址
POST
https://pay.scanforpay.com/api/online/create
名称 | 参数名 | 数据类型 | 必填 | 说明 |
---|---|---|---|---|
门店编号 | storeNo | String (15) | Y | 由scanforpay分配 |
商户订单号 | partnerOrderNo | String (32) | Y | 由商户生成 20180802100000001 |
支付钱包 | wallet | String (10) | Y | AlipayHK: 支付宝香港 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 | 用户支付完成或者取消后跳转回商家页面 |
订单创建时间 | orderCreate | String(20) | N | The time when the payment transaction is created. This field is used together with timeout_rule to control the transaction valid time. The time is in milliseconds, which can be obtained by using the Java method System.currentTimeMillis(), since the epoch (January 1, 1970 00:00:00 GMT). Use Beijing time to synchronize with Alipay system.
Example:1586497520310 |
订单超时规则 | timeoutRule | String(10) | N | This parameter specifies the valid time from login to completion. The default value is 12h. If the time in hour is non-integer, convert the value to the time in minutes.
Example:12h 1、 以下缩写用于表示时间单位: m:分钟 h: 小时 d: 天 2、 该参数数值的小数点被拒绝,例如1.5h需要转换为90m。 |
请求示例
{
"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会通过异步的方式通知商户的后台服务器, 具体可查看交易通知