说道支付宝SDK集成就让人感觉到头疼,找个集成包都不好找,原来旧版本的支付宝SDK现在依然可以使用,但是
不支付64位,现在新版本的已经支付64位了。
这个是快捷支付SDK的位置,https://b.alipay.com/order/productDetail.htm?productId=2014110308141993&tabId=1#ps-tabinfo-hash
点击 技术集成,就有一个集成开发包,下载后会有SDK。
把集成包全部放到同一个文件夹中,如AlipaySDK2.1.2,
那么需要在工程配置中header path 中添加AlipaySDK2.1.2相对于工程的路径,否则会提示openssl/rsa.h不存在之类的提示。
接下来就是集成代码了。
我这里写了一个支付宝helper类
// // HYBAliapayHelper.h // // Created by 黄仪标 on 14/12/10. // Copyright (c) 2014年 xiaoyaor. All rights reserved. // #import <Foundation/Foundation.h> /*! * @brief 支付宝支付功能封装类,此类提供一键式调起支付宝功能,方便快捷 * * @author haungyibiao */ @interface HYBAliapayHelper : NSObject // 先调这个方法来获取服务器的数据 + (AFHTTPRequestOperation *)requestWithParams:(NSDictionary *)params completion:(HYBSuccessDictBlock)completion errorBlock:(HYBErrorBlock)errorBlock; // 再调这个方法来调起支付宝 // 参数:一,调用- (void)requestWithParams:(NSDictionary *)params // completion:(HYBSuccessDictBlock)completion // errorBlock:(HYBErrorBlock)errorBlock 所返回来的参数 // resultNumber 有以下几种状态: + (void)alixPayWithResponse:(NSDictionary *)response completion:(HYBSuccessIdBlock)completion; // 在appdelegate中调用 + (void)handleOpenURL:(NSURL *)url application:(UIApplication *)application; @end
这里使用的是AFN网络库。
@implementation HYBAliapayHelper + (AFHTTPRequestOperation *)requestWithParams:(NSDictionary *)params completion:(HYBSuccessDictBlock)completion errorBlock:(HYBErrorBlock)errorBlock { return [HYBHttpManager aliapayMerchantInfoParams:params completion:^(NSDictionary *resultDict) { if (completion) { completion(resultDict); } } errorBlock:^(NSError *error) { errorBlock(error); }]; } // resultNumber 有以下几种状态: // 0 表示成功,1表示未安装,2表示签名错误,3表示参数错误,4,失败原因,字符串类型 + (void)alixPayWithResponse:(NSDictionary *)responseObject completion:(HYBSuccessIdBlock)completion { // 此处省略与SDK无关的代码 /* 9000 订单支付成功 8000 正在处理中 4000 订单支付失败 6001 用户中途取消 6002 网络连接出错 */ // 这个callback是使用HTML5网页版支付时的回调,如果是用客户端支付,是不会回调到这里的 [[AlipaySDK defaultService] payOrder:payRequest fromScheme:@"XiaoYaoUserUrlSchemes" callback:^(NSDictionary *resultDic) { if (delegate.alipayResultBlock) {// html5回调处理 NSNumber *number = @([resultDic[@"resultStatus"] integerValue]); delegate.alipayResultBlock(number);// 这里的Delegate是AppDelegate } }]; } // 跳到支付宝应用后回调,这个是调用支付宝客户端时,会通过这个方法回调 + (void)handleOpenURL:(NSURL *)url application:(UIApplication *)application { [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) { AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate; DDLogVerbose(@"resultDic = %@", resultDic); if (delegate.alipayResultBlock) {// 跳到支付宝应用后回调 NSString *status = resultDic[@"resultStatus"]; DDLogVerbose(@"%@", status); NSNumber *number = @([status integerValue]); delegate.alipayResultBlock(number); } }]; return; } - (NSError *)errorWithMessage:(NSString *)message { NSError *error = [[NSError alloc] initWithDomain:message code:0 userInfo:nil]; NSLog(@"%@", [error description]); return error; } @end
这里需要特别注意的是两个callback的条件。