×

iOS 手机网站支付转Native支付(H5支付页面调起支付宝客户端(app))

96
展菲
2017.07.04 13:33* 字数 418

为了节约开发成本,很多Native-H5混合App采用手机网站支付的方式去实现支付模块。但手机网站支付的网络依赖比较严重,也通常需要经过更多的验证,这种种原因导致手机网站支付的成功率比Native支付低,对商户的利益造成影响。

一:导入sdk流程如下:
1.下载sdk,把iOS包中的压缩文件中以下文件拷贝到项目文件夹下,并导入到项目工程中。

AlipaySDK.bundle
AlipaySDK.framework

2.在Build Phases选项卡的Link Binary With Libraries中,增加以下依赖:

h5alipay.png

注意:
如果是Xcode 7.0之后的版本,需要添加libc++.tbd、libz.tbd;
如果是Xcode 7.0之前的版本,需要添加libc++.dylib、libz.dylib。

二:使用说明:
1.在需要调用AlipaySDK的文件中,增加头文件引用。

#import <AlipaySDK/AlipaySDK.h>

2.调用接口

[[AlipaySDK defaultService]fetchOrderInfoFromH5PayUrl:url]

3.实现UIWebViewDelegate协议,拦截H5的URL(如果使用WKUIDelegate协议,请点击查看)
如果返回的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;
}

4.支付宝客户端返回url处理方法,在AppDelegate.m文件中,增加头文件引用

#import <AlipaySDK/AlipaySDK.h>

在@implementation AppDelegate中增加如下代码:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
 
    //如果极简开发包不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给开发包
    if ([url.host isEqualToString:@"safepay"]) {
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
    //【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
            NSLog(@"result = %@",resultDic);
        }];
    }
    if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回authCode
  
        [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
            //【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
            NSLog(@"result = %@",resultDic);
        }];
    }
    return YES;
}

希望可以帮助大家
如果哪里有什么不对或者不足的地方,还望读者多多提意见或建议
iOS技术交流群:668562416

iOS干货集
Web note ad 1