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

Posted xj_love

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS第三方支付集成-支付宝支付相关的知识,希望对你有一定的参考价值。

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

一 进入官方下Demo,看文档

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

二 正式接入准备工作

1.导入demo中以下文件

2.导入以下依赖库

3.Project-Info中,添加支付宝的AppKey

4.设置支付宝白名单

三 正式接入

1.AppDelegate设置

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

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

#import <Foundation/Foundation.h>
#import "WXApi.h"

@protocol PayManagerDelegate <NSObject>

@optional

@end

@interface PayManager : NSObject<WXApiDelegate>

/**
 代理
 */
@property (nonatomic, assign) id<PayManagerDelegate> 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 <AlipaySDK/AlipaySDK.h>

@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第三方支付集成-支付宝支付的主要内容,如果未能解决你的问题,请参考以下文章

iOS支付宝,微信,银联支付集成封装调用(下)

cocos2d-x C++ iOS工程集成第三方支付宝支付功能

iOS开发之支付宝集成

集成支付宝钱包支付iOS SDK的方法与经验

iOS之支付

iOS开发之支付宝集成