美文网首页iOS开发
iOS-快速集成支付宝支付、微信支付的管理类

iOS-快速集成支付宝支付、微信支付的管理类

作者: Simple_Code | 来源:发表于2018-07-31 10:14 被阅读101次

    一:封装支付宝支付

    #import <Foundation/Foundation.h>
    
    UIKIT_EXTERN NSNotificationName const XQPAliPaySuccessNotification;
    UIKIT_EXTERN NSNotificationName const XQPAliPayFailNotification;
    
    typedef void (^XQPAliPayCompletionBlock) (BOOL);
    
    @interface XQPAliPayManager : NSObject
    /*
     单利
     */
    + (instancetype)sharedInstance;
    
    
    /**
     调起支付
    
     @param orderStr 后台签名字符串
     */
    - (void)payOrder:(NSString *)orderStr;
    
    /**
     *  支付接口
     *
     *  @param orderStr       订单信息
     *  @param completionBlock 支付结果回调Block,用于wap支付结果回调(非跳转钱包支付)
     */
    - (void)payOrder:(NSString *)orderStr
            callback:(XQPAliPayCompletionBlock)completionBlock;
    
    
    /**
     处理AppDelegate里面的回调
    
     @param url 回调的Url
     */
    - (void)processOrderWithPaymentResult:(NSURL *)url;
    @end
    
    #import "XQPAliPayManager.h"
    #import <AlipaySDK/AlipaySDK.h>
    
    NSNotificationName const XQPAliPaySuccessNotification = @"XQPAliPaySuccessNotification";
    NSNotificationName const XQPAliPayFailNotification = @"XQPAliPayFailNotification";
    
    @implementation XQPAliPayManager
    
    + (instancetype)sharedInstance {
        static dispatch_once_t onceToken;
        static XQPAliPayManager *sharedInstance;
        dispatch_once(&onceToken, ^{
            sharedInstance = [[XQPAliPayManager alloc] init];
        });
        return sharedInstance;
    }
    
    #pragma mark - 跳转网页钱包支付
    - (void)payOrder:(NSString *)orderStr {
        // NOTE: 调用支付结果开始支付
        [[AlipaySDK defaultService] payOrder:orderStr fromScheme:@"XQPParkingAliPay" callback:^(NSDictionary *resultDic) {
            NSLog(@"reslut = %@",resultDic);
            [self dealwithPayResult:resultDic];
        }];
    }
    - (void)payOrder:(NSString *)orderStr
            callback:(XQPAliPayCompletionBlock)completionBlock {
        // NOTE: 调用支付结果开始支付
        [[AlipaySDK defaultService] payOrder:orderStr fromScheme:@"XQPParkingAliPay" callback:^(NSDictionary *resultDic) {
            NSLog(@"reslut = %@",resultDic);
            completionBlock(resultDic);
        }];
    }
    
    #pragma mark - 跳转钱包支付
    - (void)processOrderWithPaymentResult:(NSURL *)url {
        //跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
            [self dealwithPayResult:resultDic];
        }];
    }
    
    // 处理支付结果
    - (void)dealwithPayResult:(NSDictionary *)resultDic {
        int statusCode = [resultDic[@"resultStatus"]  intValue];
        if (statusCode == 9000 || statusCode == 8000){
            // 支付成功
            [[NSNotificationCenter defaultCenter] postNotificationName:XQPAliPaySuccessNotification object:nil userInfo:nil];
        } else  {
            // 交易失败
            [[NSNotificationCenter defaultCenter] postNotificationName:XQPAliPayFailNotification object:nil];
        }
    }
    @end
    

    调起支付宝及其通知结果处理:

    // 支付成功的回调
    [XQPNotificationCenter addObserver:self selector:@selector(paySuccess:) name:XQPAliPaySuccessNotification object:nil];
    // 支付失败的回调
    [XQPNotificationCenter addObserver:self selector:@selector(payFail:) name:XQPAliPayFailNotification object:nil];
    // 调起支付宝
    [[XQPAliPayManager sharedInstance] payOrder:responseObject[@"result"][@"rechargeSign"]];
    
    // 支付宝支付成功的通知
    - (void)paySuccess:(NSNotification *)noti {
        [XQPNotificationCenter removeObserver:self];
    }
    // 支付宝支付失败的通知
    - (void)payFail:(NSNotification *)noti {
        [XQPNotificationCenter removeObserver:self];
    }
    

    二:封装微信支付

    #import <Foundation/Foundation.h>
    #import "WXApi.h"
    
    UIKIT_EXTERN NSNotificationName const XQPWeiXinPaySuccessNotification;
    UIKIT_EXTERN NSNotificationName const XQPWeiXinPayFailNotification;
    
    @protocol XQPApiManagerDelegate <NSObject>
    @required
    // 支付成功的代理
    - (void)managerDidRecvPaymentResponse:(PayResp *)response;
    @end
    
    @interface XQPWeiXinPayManager : NSObject<WXApiDelegate>
    /*
     单利
     */
    + (instancetype)sharedInstance;
    
    /*
     调起微信支付
     */
    - (void)weiXinPayWithDic:(NSDictionary *)wechatPayDic;
    
    /*
     代理
     */
    @property (nonatomic, assign) id<XQPApiManagerDelegate> delegate;
    
    @end
    
    #import "XQPWeiXinPayManager.h"
    
    NSNotificationName const XQPWeiXinPaySuccessNotification = @"XQPWeiXinPaySuccessNotification";
    NSNotificationName const XQPWeiXinPayFailNotification = @"XQPWeiXinPayFailNotification";
    
    @interface XQPWeiXinPayManager()
    @property(nonatomic, strong) NSDictionary *wechatPayDic;
    @end
    @implementation XQPWeiXinPayManager
    
    + (instancetype)sharedInstance {
        static dispatch_once_t onceToken;
        static XQPWeiXinPayManager *sharedInstance;
        dispatch_once(&onceToken, ^{
            sharedInstance = [[XQPWeiXinPayManager alloc] init];
        });
        return sharedInstance;
    }
    
    - (void)weiXinPayWithDic:(NSDictionary *)wechatPayDic {
        
        if (!XQPDictIsEmpty(wechatPayDic)) {
            self.wechatPayDic = wechatPayDic;
        }
        // 向微信注册您的APPID
        [WXApi registerApp:wechatPayDic[@"appid"]];
        PayReq *req = [[PayReq alloc] init];
        req.openID = [wechatPayDic objectForKey:@"appid"];
        req.partnerId = [wechatPayDic objectForKey:@"partnerid"];
        req.prepayId = [wechatPayDic objectForKey:@"prepayid"];
        req.package = [wechatPayDic objectForKey:@"packages"];
        req.nonceStr = [wechatPayDic objectForKey:@"noncestr"];
        req.timeStamp = [[wechatPayDic objectForKey:@"timestamp"] intValue];
        req.sign = [wechatPayDic objectForKey:@"sign"];
        [WXApi sendReq:req];
    }
    
    // 微信支付返回结果回调
    - (void)onResp:(BaseResp *)resp {
        
        if ([resp isKindOfClass:[PayResp class]]) {
            PayResp *response = (PayResp *)resp;
            
            if (response.errCode == WXSuccess) {
                // 支付成功
                [[NSNotificationCenter defaultCenter] postNotificationName:XQPWeiXinPaySuccessNotification object:nil userInfo:nil];
            } else {
                // 支付失败
                [[NSNotificationCenter defaultCenter] postNotificationName:XQPWeiXinPayFailNotification object:nil userInfo:nil];
            }
        }
    }
    @end
    

    调起微信及其通知结果处理:

    // 微信成功的回调
    [XQPNotificationCenter addObserver:self selector:@selector(paySuccess:) name:XQPWeiXinPaySuccessNotification object:nil];
    // 微信失败的回调
    [XQPNotificationCenter addObserver:self selector:@selector(payFail:) name:XQPWeiXinPayFailNotification object:nil];
    // 调起微信支付
    [[XQPWeiXinPayManager sharedInstance] weiXinPayWithDic:responseObject[@"result"]];
    
    // 微信支付成功的通知
    - (void)paySuccess:(NSNotification *)noti {
        [XQPNotificationCenter removeObserver:self];
    }
    // 微信支付失败的通知
    - (void)payFail:(NSNotification *)noti {
        [XQPNotificationCenter removeObserver:self];
    }
    

    最后

    微信和支付宝在Appdelegate里面回调的处理:

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
        if ([url.host isEqualToString:@"safepay"]) {//支付宝
            [[XQPAliPayManager sharedInstance] processOrderWithPaymentResult:url];
        }else if([url.host isEqualToString:@"pay"]){//微信 {
            [WXApi handleOpenURL:url delegate:[XQPWeiXinPayManager sharedInstance]];
        }
        return YES;
    }
    
    // NOTE: 9.0以后使用新API接口
    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options {
        if ([url.host isEqualToString:@"safepay"]) {//支付宝
            [[XQPAliPayManager sharedInstance] processOrderWithPaymentResult:url];
        }else if([url.host isEqualToString:@"pay"]){//微信
            [WXApi handleOpenURL:url delegate:[XQPWeiXinPayManager sharedInstance]];
        }
        return YES;
    }
    

    相关文章

      网友评论

      本文标题:iOS-快速集成支付宝支付、微信支付的管理类

      本文链接:https://www.haomeiwen.com/subject/dzscvftx.html