IOS支付宝SDK封装管理工具 AliPayManager简单好
2020-04-23 本文已影响0人
_亻弋_石马_亻_生
前言:
开发过程中会经常用到一些第三方,我在闲暇的时候就会针对这类集成操作进行一个总结和整理,简单的封装一下,以便开发过程中减少代码量和快速调用具体功能。最近又用到支付宝,基于方便快速集成的概念,就针对支付宝的sdk进行了一个二次封装,一句代码方便全局多次调用。
如何快速使用
首先当你已经 pod 过 AlipaySDK-iOS 不用看以下这里
#source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
install! 'cocoapods', :generate_multiple_pod_projects => true
platform :ios, '8.0'
target '你的项目名称' do
use_frameworks!
# Comment the next line if you don't want to use dynamic frameworks
pod 'AlipaySDK-iOS'
end
注:按照官方文档 添加依赖库,不会的参照 客户端 iOS 集成流程
WeChatd6d268ad96e4b8cdc67bc71b5cb224d5.png废话不多说,来点正经的
第一步 先下载AliPayManager
注意完成的包内容
当你手动导入项目的时候需要注意“'openssl/asn1.h' file not found‘问题”,遇到这个问题不要慌,这是一个路径问题
接入支付宝SDK 发生错误:'openssl/asn1.h' file not found 已解决
解决办法可参考下图,如果看不懂,👆👆👆👆👆点击上面的解决办法有详细的教程
看到这,就开始开启AliPayManager体验之旅吧
- 首先看一下公开的Api,这里是以单利的设计模式创建了一个AliPayManager 管理类
+ (AliPayManager *)defaultManager;
#pragma mark - 配置(可不调用)
-(void)AlipayConfig;
#pragma mark ==============点击订单支付行为==============
-(void)payOrder:(GSBizContent *)model complete:(void (^)(NSDictionary *resultDic))complete;
#pragma mark - 唤起支付
/*
* 如果后台把OrderInfo所有的数据参数进行加密和拼接处理过后,可直接调用此方法
* 例:(将商品信息拼接成字符串)&sign=(RSA签名) = orderString
*/
-(void)payOrderWithOrderString:(NSString *)orderString complete:(void (^)(NSDictionary *resultDic))complete;
#pragma mark ==============点击授权行为==============
/*
* 调用支付宝授权
* codeback 返回 authCode
*/
-(void)new_doAPAuth:(void (^)(NSString *authCode))codeback;
-(void)new_doAPAuthComplete:(void (^)(NSDictionary *resultDic))complete codeback:(void (^)(NSString *authCode))codeback;
#pragma mark - 支付跳转支付宝钱包进行支付,处理支付结果
-(void)new_processOrderWithPaymentResult:(NSURL *)url;
-(void)new_processOrderWithPaymentResult:(NSURL *)url standbyCallback:(void (^)(NSDictionary *resultDic))standbyCallback;
#pragma mark - 授权跳转支付宝钱包进行支付,处理支付结果
-(void)new_processAuth_V2Result:(NSURL *)url;
-(void)new_processAuth_V2Result:(NSURL *)url standbyCallback:(void (^)(NSDictionary *resultDic))standbyCallback;
- 支付宝的配置信息 统一在这里处理
#pragma mark - 默认配置
-(void)AlipayConfig{
pid = @"";
appID = @"";
rsa2PrivateKey = @"";
rsaPrivateKey = @"";
appScheme = @"";//!< 应用注册scheme,在AliSDKDemo-Info.plist定义URL types
}
注:如果你写后台的兄台可以把支付的配置信息都放到服务器去处理那你可以看下面的方法
#pragma mark - 唤起支付
/*
* 如果后台把OrderInfo所有的数据参数进行加密和拼接处理过后,可直接调用此方法
* 例:(将商品信息拼接成字符串)&sign=(RSA签名) = orderString
*/
-(void)payOrderWithOrderString:(NSString *)orderString complete:(void (^)(NSDictionary *resultDic))complete;
- 记得在AppDelegate 里配置回调(写法如下)
#pragma mark - 系统回掉
//支持所有iOS系统
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
if ([url.host isEqualToString:@"safepay"]) {
[[AliPayManager defaultManager] new_processOrderWithPaymentResult:url];
}
return YES;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
{
if ([url.host isEqualToString:@"safepay"]) {
[[AliPayManager defaultManager] new_processOrderWithPaymentResult:url];
}
return YES;
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
if ([url.host isEqualToString:@"safepay"]) {
[[AliPayManager defaultManager] new_processOrderWithPaymentResult:url];
}
return YES;
}
======2020年4月26更新=======
由于事件回调处理在AppDelegate 里处理比较麻烦,新增了事件拦截以及Model映射
例:
以前-处理回调事件
图片.png
现在-处理回调事件
图片.png
新增方法
#pragma mark - 唤起支付 (自定义拦截返回回调)
-(void)payOrderWithOrderString:(NSString *)orderString
complete:(void (^)(GSAliPayModel *model))complete
failed:(void (^)(GSAliPayModel *model))failed;
方法使用
//支付宝支付
[[AliPayManager defaultManager] payOrderWithOrderString:model.aliPaySign complete:^(GSAliPayModel * _Nonnull model) {
GSLog(@"支付成功 %@",model);
} failed:^(GSAliPayModel * _Nonnull model) {
GSLog(@"支付失败 %@",model);
}];
注:与以前的使用并不冲突,只是优化了一下,增加了新的Api
AliPayManager码云下载地址
希望微不足道的贡献能够帮助到你,如有疑问请留言交流😊