iOS SDK API
Class: ScanForPayTask
Definition: @interface ScanForPayTask : NSObject
Method: - pay
Call this to create payment
Definition:
-(void) pay:(NSString *)orderInfo // request string of order infomartion
appScheme:(NSString *)scheme. // url scheme registered by app
callback:(CallBackBlock)callback; // callback when wap payment return
orderInfo-Request Body
Build the orderInfo
According to Request Format, and put the following fields in the body of the request, and sign on ther server.
Name | Parameter | Type | Required | Description |
---|---|---|---|---|
Store ID | storeNo | String (15) | Y | Assigned by scanforpay |
Partner Order No. | partnerOrderNo | String (32) | Y | Generated by merchant 20180802100000001 |
Wallet | wallet | String (10) | C | Wechat: wechat pay Alipay: Alipay AlipayHK: AlipayHK |
Goods extra amount | goodsExtraAmount | int | N | Optional 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 |
Goods amount | goodsAmount | int | N | Optional 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 | The transaction currency must be the same as the merchant transaction currency |
Trasaction 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 | Description |
Operator Id | operatorId | String(20) | N | 10001 |
Notify url | notifyUrl | String(200) | N | System will call this url when payment succeed. If this is empty, system will not notify the result |
Request Example
{"request":{"header":{"requestTime":"2018-07-25T18:06:05+08:00","partnerNo":"10001","signType":"SHA256","version":"1.0","reqMsgId":"fd03f269-3180-4575-8af0-8f6cf324fb0f"},"body":{"merchantId":"100010000000002","partnerOrderNo":"p20180725180605466813","orderAmount":2100,"orderTitle":"Consume","barcode":"284447106610060508","operatorId":"211918","terminalNo":"123456","notifyUrl":"http://192.168.31.72:8080/ScanForPay/notify"}},"signature":"2d2d5c66a67a24b5e13705cc38f34d93c395a7d9e0e4ff9425c9ce07b806a1cc"}
Method:- payH5
It is used to intercept the URL of Alipay payment request when using WebView, and will automatically pull up the Alipay App for payment. It's more simple for users to pay by native Alipay.
For specific usage, see the code in WebviewController.m
in the demo.
Definition:
-(void) payH5:(NSString *)url。 // url to intercept
appScheme:(NSString *)scheme // url scheme registered by app
callback:(CallBackBlock)callback; // payment result callback
Method:- handleOpenURL
The method is used to process the payment result, and needs to be called in the openURL
in AppDelegate.m
. This method will return payment result and order information. When receive the order information, you give the information to the server to check signature and ensure the authenticity of the data. Server can also query the payment status from the ScanForPay server.
Definition:
- (BOOL)handleOpenURL:(NSURL *)url callback:(CallBackBlock)callback;
The result passed by the callback is formatted as:
{
"code": 1, // 1:success,others: fail
"msg": '', // error messages
"data": {
"status": 1, // payment status,1:payment sucess,others: unsuccess
"params": "" // order information, its body described in the follow table
}
}
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 |
Order Number | orderNo | varchar(32) | C | Generated by scanforpay |
Merchant Order Number | partnerOrderNo | String (32) | Y | Generated by merchant 20180802100000001 |
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 |
Wallet | wallet | String (10) | Y | Wechat: Wechat Pay Alipay: Alipay |
Transaction Status | status | int | Y | 0:To be Paid 1:Success 2:Fail 3:Refunded |
Transation Time | payTime | String(25) | N | Date time with timezone, see RFC 3339 Section 5.6 for details. 2018-07-25T17:54:00+08:00 |
Currency | currency | varchar(5) | Y | JPY |
Buyer account | buyer | varchar(30) | N | c*@gmail.com |
Buyer ID | buyerId | varchar(30) | N | 208xxxxxxxxxx012 |
Response example
{"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","orderNo":"2018072518060757","partnerOrderNo":"p20180725180605466813","payTime":"2018-07-25T18:06:12+08:00","orderAmount":2100,"wallet":"Alipay","currency":"JPY","status":1,"buyer":"cd****@qq.com","buyerId":"208xxxxxxxxxx012"}},"signature":"0710b2630b467c14b3d54295def7f89be61097c21472547823b43c58f3466b08"}