iOS第三方支付集成-支付宝支付

吐槽一下支付宝的文档和demo,文档真是找的我眼花缭乱,demo写的也是看的捉急,没有微信的简单明了。不过全部找到后,静下心来研究,也还是可以的。

一 进入官方下Demo,看文档

工欲善其事必先利其器,先看下demo总不是坏处,也可以学习一下支付宝大佬编码风格。除了不好找之外,其它还是可以的。
支付宝支付demo下载
支付宝支付iOS集成文档
支付宝支付通知参数说明

二 正式接入准备工作

1.导入demo中以下文件
iOS第三方支付集成-支付宝支付_第1张图片

2.导入以下依赖库
iOS第三方支付集成-支付宝支付_第2张图片

3.Project-Info中,添加支付宝的AppKey
这里写图片描述

4.设置支付宝白名单
这里写图片描述

三 正式接入

1.AppDelegate设置
这里写图片描述
iOS第三方支付集成-支付宝支付_第3张图片

2.接入PayManager支付工具类,也可以自己写一个。仅供参考
PayManager.h

//
//  PayManager.h
//
//  Created by superButton on 2018/9/5.
//  Copyright © 2018年 com.from. All rights reserved.
//

#import 
#import "WXApi.h"

@protocol PayManagerDelegate 

@optional

@end

@interface PayManager : NSObject

/**
 代理
 */
@property (nonatomic, assign) id delegate;

/**
 单例

 @return 单例
 */
+ (instancetype)sharedManager;

/**
 微信支付

 @param orderID 订单ID
 @param success 成功回调
 @param fail 失败回调
 */
- (void)payWithWeChatMethod:(NSString*)orderID successBlock:(GetBackBoolBlock)success failBlock:(GetBackBoolBlock)fail;

/**
 支付宝支付

 @param orderID 订单ID
 @param success 成功回调
 @param fail 失败回调
 */
- (void)payWithZhifubaoMethod:(NSString*)orderID successBlock:(GetBackBoolBlock)success failBlock:(GetBackBoolBlock)fail;

/**
 支付宝支付回调

 @param resultDict 回调字典参数
 */
- (void)handleOpenURL:(NSDictionary *)resultDict;

@end

PayManager.m

//
//  PayManager.m
//
//  Created by superButton on 2018/9/5.
//  Copyright © 2018年 com.from. All rights reserved.
//

#import "PayManager.h"
#import 

@interface PayManager ()

@property (copy,nonatomic) GetBackBoolBlock successBlock;
@property (copy,nonatomic) GetBackBoolBlock failBlock;

@end

@implementation PayManager

+(instancetype)sharedManager {
    static dispatch_once_t onceToken;
    static PayManager *instance;
    dispatch_once(&onceToken, ^{
        instance = [[PayManager alloc] init];
    });
    return instance;
}

#pragma mark - 微信支付
- (void)payWithWeChatMethod:(NSString*)orderID successBlock:(GetBackBoolBlock)success failBlock:(GetBackBoolBlock)fail{
}

#pragma mark - 支付宝支付
- (void)payWithZhifubaoMethod:(NSString*)orderID successBlock:(GetBackBoolBlock)success failBlock:(GetBackBoolBlock)fail{

    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    params[@""] = orderID;

    kWeakSelf(weakSelf)
    //请求自己的后台,拿到订单支付宝的重要参数,具体参数见支付宝Demo,反正都是后台返回,前端不用处理
    [[NetWorkingUtil netWorkingUtil] postDataWithPath:@"" parameters:params result:^(id obj, int status, NSString *msg) {

        if (status == 1) {

            weakSelf.successBlock = success;
            weakSelf.failBlock = fail;

            if(obj != nil){

                //前面自定义的URL Scheme
                NSString *appScheme = @"demoAliPay";

                // NOTE: 将签名成功字符串格式化为订单字符串,请严格按照该格式
                NSString *sdkParam = obj[@"sdkParam"];
                NSString *orderString = [NSString stringWithFormat:@"%@",sdkParam];
                // NOTE: 调用支付结果开始支付
                [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
                    NSLog(@"payOrder reslut = %@",resultDic);
                    //注,网页回调不会走AppDelegate代理方法。只能通过这里来处理回调
                }];

            }else{
                fail(NO);
            }
        }else{
            fail(NO);
        }
    }];
}

#pragma mark - WXApiDelegate
//收到微信回调
- (void)onResp:(BaseResp *)resp {

}

///给微信发回调
- (void)onReq:(BaseReq *)req {

}

#pragma mark = 支付宝客户端支付后回调
- (void)handleOpenURL:(NSDictionary *)resultDict {

    NSString *resultStatus = [NSString stringWithFormat:@"%@", [resultDict objectForKey:@"resultStatus"]];
    NSInteger statusCode = [resultStatus integerValue];

    switch (statusCode) {
        case 9000://成功
        {
            if (_successBlock) {
                _successBlock(YES);
            }
        }
            break;
        case 4000://失败
        {
            if (_failBlock) {
                _failBlock(NO);
            }
        }
            break;
        default://其它
        {
            if (_failBlock) {
                _failBlock(NO);
            }
        }
            break;
    }
}

@end

四 注意

1.调起支付宝SDK时传入的orderPay字符串参数是按一定顺序拼接起来的加过签的参数串,通常由服务端拼接好传给前端。
2.调起支付宝SDK时的fromScheme是支付宝回调app的重要依据,通常为app在info中配置的URL Scheme.

iOS第三方支付集成-微信支付
iOS第三方支付集成-踩坑处理合集

欢迎给为志同道合的朋友入群交流、分享。高级iOS开发交流群:855808379
iOS第三方支付集成-支付宝支付_第4张图片

你可能感兴趣的:(iOS开发,移动端+大前端+后台学习整合)