说道支付宝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的条件。