Website payement

Introduction

To use website payement, merchant should display a button in the webpage to users:

User clicks the button which will redirect to a checkout page, and then scan the qrcode or login to finish the payment.

After this, user will be redirected to merchant's result page. Merchant can check the result, and decide what to display next.

Meanwhile, ScanForPay will notify merchant's server the payment result asynchronously.

Flow

participant Customer
Customer->Merchant: 1. Create order
Merchant->scanforpay: 2. Create order
scanforpay->Payment\nPlatform: 3. Create order
Payment\nPlatform->scanforpay: 4. Retrun transacion\ninformations
scanforpay->Merchant: 5. Return the\npage to pay
Merchant->Customer: 6.Redirect to\nthe page
Customer-->Payment\nPlatform: 7.Pay
Payment\nPlatform->Customer: 8. Display the result
Payment\nPlatform-->scanforpay: 8.Notify the result
scanforpay-->Merchant: 9. Notify the result

Create Order API

Service URL

POST

https://pay.scanforpay.com/api/online/create
Request Body
Name Parameter Type Required Description
Store ID storeNo String (15) Y Assigned by scanforpay
Merchant Order Number partnerOrderNo String (32) Y Generated by merchant
20180802100000001
Wallet wallet String (10) Y AlipayHK: AlipayHK
Alipay: Alipay
Goods Amount goodsAmount int N The unit of the transaction amount is the smallest unit of the currency
If the currency is RMB, the unit is Fen. So if the transaction amount is 1 Yuan, 100 should be passed;if curreny is JPY, the unit is Japanese Yen
Extra Amount goodsExtraAmount int N The unit of the transaction amount is the smallest unit of the currency
If the currency is RMB, the unit is Fen. So if the transaction amount is 1 Yuan, 100 should be passed;if curreny is JPY, the unit is Japanese Yen
Currency currency String (10) Y
Transaction Amount orderAmount int Y The unit of the transaction amount is the smallest unit of the currency
If the currency is RMB, the unit is Fen. So if the transaction amount is 1 Yuan, 100 should be passed;if curreny is JPY, the unit is Japanese Yen
Transaction description orderTitle String(100) N Transaction description
Operator ID operatorId String(20) N 100001
Terminal ID terminalNo String(20) N 100002
Notify Url notifyUrl String(200) N System will call this url when payment succeed.
If this is empty, system will not notify the result
Callback Url returnUrl String(200) N This page will be called after customers pay successfully or cancel the transation
Order creation time 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
Order timeout rule 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. The following abbreviations are used to represent time units:
m:minute
h:hour
d:day
2. The decimal point of the parameter value is rejected, for example, 1.5h needs to be converted to 90m.
Sample
{
    "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"
}
Response body
Name Parameter Type Required Description
Response code code int(5) Y 1:success,Others: Fail
Response message msg varchar (100) Y Response message
Pay Url payUrl varchar(200) Y Generated by scanforpay. After created the order, user will be redirected the page to pay
Sample
Successful response sample
{
    "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"
}
Failed response sample
{
    "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"
}
Callback

When a user finishes the payment, scanforpay will call the returnUrl with POST parameters as below:

Name Parameter Type Required Description
Partner Order Number partnerOrderNo String(32) Y Generated by merchant

After receiving the callback, merchant should callPay Query to verify whether this payment is done.

Meanwhile, scanforpay will push result to the merchant's server asynchronously, more detail in Notify

results matching ""

    No results matching ""