吐槽一下支付宝的文档和demo,文档真是找的我眼花缭乱,demo写的也是看的捉急,没有微信的简单明了。不过全部找到后,静下心来研究,也还是可以的。
一 进入官方下Demo,看文档
工欲善其事必先利其器,先看下demo总不是坏处,也可以学习一下支付宝大佬编码风格。除了不好找之外,其它还是可以的。
支付宝支付demo下载
支付宝支付iOS集成文档
支付宝支付通知参数说明
二 正式接入准备工作
1.导入demo中以下文件
![这里写图片描述](https://img-blog.csdn.net/20180910135915284?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hqX2xvdmU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
2.导入以下依赖库
![这里写图片描述](https://img-blog.csdn.net/20180910140249937?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hqX2xvdmU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
3.Project-Info中,添加支付宝的AppKey
![这里写图片描述](https://img-blog.csdn.net/20180910140700578?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hqX2xvdmU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
4.设置支付宝白名单
![这里写图片描述](https://img-blog.csdn.net/20180910140840877?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hqX2xvdmU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
三 正式接入
1.AppDelegate设置
![这里写图片描述](https://img-blog.csdn.net/20180910141231130?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hqX2xvdmU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
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
![这里写图片描述](https://img-blog.csdn.net/20180910142018863?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hqX2xvdmU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)