iOS SDK接口说明
类: ScanForPayTask
定义: @interface ScanForPayTask : NSObject
方法:- pay
调用此方法发起支付
定义:
-(void) pay:(NSString *)orderInfo // 支付订单信息字串
appScheme:(NSString *)scheme. //调用支付的app注册的scheme, 从钱包返回app时使用
callback:(CallBackBlock)callback; //支付结果回调Block,支付方式为支付宝时:wap支付(如果没有安装支付宝)结果会进入该回调
orderInfo-请求数据说明
将下面的字段按照请求格式的说明组装在业务数据里,并在服务端签名,然后转换为JSON格式的字符串传入orderInfo字段。
名称 | 参数名 | 数据类型 | 必填 | 说明 |
---|---|---|---|---|
门店编号 | storeNo | String (15) | Y | 由scanforpay分配 |
商户订单号 | partnerOrderNo | String (32) | Y | 由商户生成 20180802100000001 |
钱包 | wallet | String (10) | C | Wechat: 微信支付 Alipay: 支付宝 AlipayHK: 支付宝香港 |
商品金额 | 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 | 10001 |
支付成功通知地址 | notifyUrl | String(200) | N | 如果填写,则支付成功后会通知到该地址,商户需处理重复通知的情况。如果不填,则支付成功不会进行通知。 |
完整请求串示例
{"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"}
方法:- payH5
用于拦截内嵌在WebView里去支付宝支付宝的URL,自动转换并拉起支付宝App进行支付。用户可以减少在H5上登陆等繁琐的步骤。
具体用法可以见demo里的WebviewController.m
里的调用
定义:
-(void) payH5:(NSString *)url。 // 被拦截的url
appScheme:(NSString *)scheme // 调用支付的app注册的scheme, 从钱包返回app时使用
callback:(CallBackBlock)callback; //支付结果回调Block
方法:- handleOpenURL
该方法用于处理支付后跳回商户app携带的支付结果Url,需要在AppDelegate.m
中的openURL
回调中调用,将返回的URL串传给该方法,该方法会将对应的支付订单信息返回。App拿到订单信息后,需要判断是否成功,并将信息交给服务端校验签名以确保数据真实性。服务端还可以来ScanForPay服务端查询交易状态。
定义:
- (BOOL)handleOpenURL:(NSURL *)url callback:(CallBackBlock)callback;
回调返回NSDictionary *dictResult
, 格式形如:
{
"code": 1, //返回码,1为成功,其他为失败。负数为支付宝返回的错误,一般是用户取消等,可以不处理
"msg": '', // 返回信息
"data": {
"status": 1, // 支付状态,1为支付成功,其他为支付未成功
"params": "" // 返回的订单信息,字段见下表
}
}
订单信息数据说明
名称 | 参数名 | 数据类型 | 必填 | 说明 |
---|---|---|---|---|
响应码 | code | int(5) | Y | 1:成功 其他为交易失败 |
响应信息 | msg | varchar (100) | Y | 响应信息 |
支付订单号 | orderNo | varchar(32) | Y | 由scanforpay生成 |
商户订单号 | partnerOrderNo | String (32) | Y | 由商户生成 20180802100000001 |
交易金额 | orderAmount | int | Y | 交易币种的最小单位 如果商家币种是人民币,则100表示100分=1元;如果商家币种是日元,则100表示日元的 100元 |
支付钱包 | wallet | String (10) | Y | Wechat: 微信支付 Alipay: 支付宝 |
订单状态 | status | int | Y | 0:待支付 1:支付成功 2:支付失败 3:已退款 |
支付时间 | payTime | String(25) | N | Date time with timezone, see RFC 3339 Section 5.6 for details. 2018-07-25T17:54:00+08:00 |
支付币种 | currency | varchar(5) | Y | JPY |
付款人账号 | buyer | varchar(30) | N | c*@gmail.com |
付款ID | buyerId | varchar(30) | N | 208xxxxxxxxxx012 |
订单信息数据示例
{"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"}