感谢您的反馈!
本SDK提供的所有接口均定义在AlipaySDK.h中。
SDK中提供了若干接口,H5转Native支付只用到其中一部分,本文未提到的接口无需关注。
如何调用提供的接口?
接口的调用方式是先调用defaultService获取SDK的实例,然后再调用提供的接口,以fetchOrderInfoFromH5PayUrl为例:
[[AlipaySDK defaultService]fetchOrderInfoFromH5PayUrl:url]
如何实现H5转Native支付?
步骤一: 实现UIWebViewDelegate协议,拦截H5的URL;
步骤二: 调用SDK提供的“获取订单信息接口(fetchOrderInfoFromH5PayUrl)”对拦截的URL进行处理:
接口原型
/** * url order 获取接口 * * @param urlStr 拦截的 url string * * @return 获取到的url order info */ - (NSString*)fetchOrderInfoFromH5PayUrl:(NSString*)urlStr;
接口功能
从拦截的URL中获取支付请求相关信息,然后封装成新的订单信息字符串作为返回值。如果该URL不是有效的支付宝支付URL,则返回空字符串。
参数说明
参数名称 | 类型 | 说明 |
---|---|---|
urlStr | NSString * | H5支付的请求URL |
返回值说明
返回值类型 | 说明 |
---|---|
NSString * | 1.如果是有效的支付宝支付URL,则返回非空字符串(订单信息字符串) 2.如果是无效的支付宝支付URL,则返回空字符串 |
调用本接口对拦截的URL进行处理,如果返回值为空字符串则不拦截该URL;如果返回值为非空字符串,则调用SDK提供的支付接口进行支付,使用示例如下:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSString* orderInfo = [[AlipaySDK defaultService]fetchOrderInfoFromH5PayUrl:[request.URL absoluteString]]; if (orderInfo.length > 0) { // 此处应该调用SDK提供的支付接口进行支付 // 参考后文 return NO; } return YES; }
接口原型
/** * url支付接口 * * @param orderStr 订单信息 * @param schemeStr 调用支付的app注册在info.plist中的scheme * @param compltionBlock 支付结果回调Block */ - (void)payUrlOrder:(NSString *)orderStr fromScheme:(NSString *)schemeStr callback:(CompletionBlock)completionBlock;
接口功能
完成订单支付并返回支付结果。
参数说明
参数名称 | 类型 | 说明 |
---|---|---|
orderStr | NSString * | 调用fetchOrderInfoFromH5PayUrl接口返回的订单信息 |
schemeStr | NSString * | 接入方App注册的URL scheme,供支付完成后跳回接入方App |
completionBlock | (^CompletionBlock)(NSDictionary *resultDic) |
支付结束之后的回调 其中CompletionBlock定义如下: typedef void(^CompletionBlock)(NSDictionary *resultDic); |
返回值说明
支付结束后SDK将回调completionBlock并将支付结果resultDic(NSDictionary *类型)作为参数传入该Block。resultDic中主要包含两个字段,如下所示:
参数名称 | 类型 | 说明 |
---|---|---|
resultCode | NSString * | 返回码,标识支付状态,含义如下: 9000——订单支付成功 8000——正在处理中 4000——订单支付失败 5000——重复请求 6001——用户中途取消 6002——网络连接出错 |
returnUrl | NSString * | 支付结束后应当跳转的url地址 |
调用本接口进行支付。如果返回的resultCode为9000,接入方可以提示用户支付成功;返回结果不是9000的情况,无需做任何处理。如果returnUrl不为空,建议接入方跳转到该returnUrl。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { NSString* orderInfo = [[AlipaySDK defaultService]fetchOrderInfoFromH5PayUrl:[request.URL absoluteString]]; if (orderInfo.length > 0) { // 调用支付接口进行支付 [[AlipaySDK defaultService]payUrlOrder:orderInfo fromScheme:@"alisdkdemo" callback:^(NSDictionary* result) { // 处理返回结果 NSString* resultCode = result[@"resultCode"]; //建议操作: 根据resultCode做处理 // returnUrl 代表 第三方App需要跳转的成功页URL NSString* returnUrl = result[@"returnUrl"]; //建议操作: 打开returnUrl }]; return NO; } return YES; }