iOS 支付宝支付开发(最新版)

展菲 等级 761 0 0

1. 介绍

本文为以前做的项目总结,由于相关支付 SDK 迭代,原文已经不满足需求,故作如下更新,供大家参考,另外增加常见问题总结。

今天我们就主要介绍一下支付宝支付,其他支付介绍后面会尽快更新出来。

在做支付之前,在网上也查寻了资料,大多都说,支付接入坑太多,微信坑最多,银联文档太复杂。 其实如果接入的多的话,那些套路都可以绕着走。 网上的经验什么的大都是比较老的,比较新的能用到的文章不多(但是好文章还是有的,对我帮助也很大),下面给大家详细介绍一下,帮助大家绕开坑。

2. 交互流程

建议先把开发文档仔仔细细看一遍,一定要看,刚开始的时候没有老老实实地看完,结果遇到很多的坑,浪费的挺多的时间的,所以建议一定要好好看看,特别是交互流程这一部分。

2.1 功能流程

iOS 支付宝支付开发(最新版)

2.2 数据交互

iOS 支付宝支付开发(最新版)

支付宝支付的功能流程相比较微信支付来说简单的很,如上面两张图展示的,我们的 App(也就是商户客户端)所做的大概只有三个步骤:

  • 生成订单
  • 调用支付宝接口,发送订单
  • 返回订单支付结果并处理

3. 下载支付宝 SDK

支付宝业务众多,真想找到想要的支付sdk还是要费一番功夫的,这里给出了最新的 SDK 地址 注意的是下载出来的 SDK 包里面并没有传说中的开发文档,需要其他地方找或者看网页上的。

公钥、私钥、PID、sellerID、key这些东西的用途和获取方式在文档上都有详细的说明,这里不再赘述,一定要把概念分清楚再去做,不然一会就乱了。如果遇到问题的话咱们可以再一起探讨。

4. 导入库集成SDK

4.1 导入文件和关键库

通过 CocoaPods 导入

pod  'AlipaySDK-iOS' 

手动导入

官方 demo 截图

iOS 支付宝支付开发(最新版)

添加 framework 和其他文件 打开 iOS 工程,新版本 SDK 文件 Order 文件,你需要复制粘贴到自己工程里的有:

  • AlipaySDK.framework
  • AlipaySDK.bundle
  • Until 文件夹
  • openssl 文件夹
  • libcrypto.a 和 libssl.a

上面的一部分文件在打开的项目中是看不到的,需要打开项目文件夹找到。

在 Build Phases 选项卡的 Link Binary With Libraries 中,增加以下依赖:

iOS 支付宝支付开发(最新版)

其中,需要注意的是:

  • 如果是Xcode 7.0之后的版本,需要添加libc++.tbd、libz.tbd;
  • 如果是Xcode 7.0之前的版本,需要添加libc++.dylib、libz.dylib(如下图)。

iOS 支付宝支付开发(最新版)

此时,假如你启动工程,很大几率上你会发现报 error 的情况。

4.2 引入头文件

在需要调用 AlipaySDK 的文件中,增加头文件引用。

import <AlipaySDK/AlipaySDK.h>

4.3 调用支付接口

在支付宝的接入文档中,是将生成一个订单这步放在客户端来做了,但这个最好是放在服务器端来做。

后台生成订单然后拼接,签名,然后服务器端直接给客户端传一个加密签名过的参数就可以了,这样比较安全。

所有的订单信息,商户信息等都掌握在自己的手中,这样的话APP端就不怕被拦截数据,并且调用起来也就特别简单了,只需要调用支付的接口。

如果只需要发送订单和处理支付返回结果,只需要添加 AlipaySDK.bundle 和AlipaySDK.framework 这两个就行了,下载的SDK中很容易发现。 快捷支付方法是这个:

-(void)payOrder:(NSString *)orderStr fromScheme:(NSString *)schemeStr callback:(CompletionBlock)completionBlock;

在支付的按钮中,使用支付宝这个类,再调用这个方法就行啦!如下如:

// NOTE: 调用支付结果开始支付
[[AlipaySDK defaultService] payOrder:orderString fromScheme:@"FBYAlipayDemo" callback:^(NSDictionary *resultDic) {
    NSLog(@"reslut = %@",resultDic);
}];

4.4 配置支付宝客户端返回 url 处理方法

如示例 AliSDKDemo\APAppDelegate.m 文件中,增加引用代码:

import <AlipaySDK/AlipaySDK.h>

@implementation AppDelegate 中以下代码中的 NSLog 改为实际业务处理代码:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
    if ([url.host isEqualToString:@"safepay"]) {
        //跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
    }
    return YES;
}

4.5 项目配置

最后,不要忘了还要写一个 URL Scheme,在 Targets -> Info 下最后一个即可找到, 点击 “Info” 选项卡,在 “URL Types ”选项中,点击 “+”。

iOS 支付宝支付开发(最新版)

5. 常见问题汇总

5.1 支付后无法返回 App

一般是由于白名单没有设置正确

// NOTE: 调用支付结果开始支付
[[AlipaySDK defaultService] payOrder:orderString fromScheme:@"FBYAlipayDemo" callback:^(NSDictionary *resultDic) {
    NSLog(@"reslut = %@",resultDic);
}];

上方代码中 appScheme 参数需要和文章 4.5 项目配置中设置的 URL Schemes 相同,这样才能对应返回 App。

5.2 #include <openssl/opensslconf.h> not find

这是一个神奇的大坑,我Google了好久,也不得其解,然后经网友提醒之后想起来#import ""和#import <>的区别。

解决方法:Targets -> Build Settings 下的 Header Search Paths。 添加如下目录 "$(SRCROOT)/项目名称/文件的绝对地址" 如图:

iOS 支付宝支付开发(最新版)

5.3 'openssl/asn1.h' file not found

iOS 支付宝支付开发(最新版)

由于在项目中引入 openssl 库,出现这个问题是因为库文件项目无法找到,只需要在 Header Search Paths 中加入 $(PROJECT_DIR)/项目名称/openssl 即可,如下图操作:

iOS 支付宝支付开发(最新版)

5.4 Undefined symbol: OBJC_METACLASS$_WKWebView

iOS 支付宝支付开发(最新版)

出现上面的问题,需要在项目配置中添加系统类库:WebKit.framework

iOS 支付宝支付开发(最新版)

5.5 如果遇到运行后报错,类似于以下提示信息:

Cannot find interface declaration for 'NSObject', superclass of 'Base64'

那么需要打开报错了的文件,增加头文件。

# import <Foundation/Foundation.h>

5.6 Swift 中接入 SDK 遇到的问题

如果项目使用 Swift 为开发语言,需要添加桥接文件,如 Bridging-Header.h

同时,在项目 Build Settings 中设置桥接文件的位置。

运行时如果发生以下报错,则在桥接文件中,写入#import <UIKit/UIKit.h>

iOS 支付宝支付开发(最新版)

5.7 点击支付跳转至支付宝卡在启动页面

出现这个情况被卡在的页面会出现相应错误提示,一般有以下几种情况:

  • 商品信息拼接字符串错误
  • 支付账号过期待续费状态
  • 商户 ID 错误
  • 订单信息验签失败

希望可以帮助大家 如果哪里有什么不对或者不足的地方,还望读者多多提意见或建议 iOS技术交流群:668562416

源码Demo获取方法

获取源码方式:关注「网罗开发」回复 “支付宝支付” 即可获取

转载

本文已在公众号「网罗开发」发布,如果转载长白请加微信:FBY-fan,备注转载长白

福利

iOS 支付宝支付开发(最新版)

扫码加微信:FBY-fan 回复「面试题」,领取 11 类面试题,包含:多线程、内存管理、设计模式、数据安全及加密、数据结果与算法、网络、性能优化、Block、RunLoop、Runtime、UI 相关

收藏
评论区

相关推荐

【Flutter 实战】安装Flutter
1.3 搭建Flutter开发环境工欲善其事必先利其器,本节首先会分别介绍一下在Windows和macOS下Flutter SDK的安装,然后再介绍一下配IDE和模拟器的使用。 1.3.1 安装Flutter由于Flutter会同时构建Android和IOS两个平台的发布包,所以Flutter同时依赖Android SDK和iOS SDK,在安装Fl
IOS 6 自动布局 入门 2
来自Ray:恭喜各位!你们已经通过宣传[ios feast](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fwww.raywenderlich.com%2F20912%2Fintroducing-the-ios-6-feast)提前解锁了第一个有关IOS6的教程。 目前这份教程只是我们的新
IOS 屏幕适配
[APP界面设计——IOS字体规范与多屏幕适配](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fwww.jianshu.com%2Fp%2F45d48c164b0e) [iOS 关于字体根据不同屏幕尺寸等比适配的问题](https://www.oschina.net/action/GoT
java编程中使用二进制进行权限或状态控制
直接看代码以及注释吧。 @Test public void main() { // PC WEB端 int pc = 1 << 0;// ...0001=1 // Android端 int android = 1 <<
unity sharesdk 采坑
sharesdk  ios下打包后 点击分享 无响应 , 解决方法: 1.确认一下 info.plist 文件的URL Schemes 是否正确  qq weixin weChat 的appkey都要添加 数字是16进制的 2.导入SDK的时候 从官方下载IOS版本的SDK 而不是导入unitypackage里面自带的, 3.打开后图标名字显示的是英
(转)直接拿来用!最火的iOS开源项目(二)
“每一次的改变总意味着新的开始。”这句话用在iOS上可谓是再合适不过的了。GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7,有的项目已经被弃用,即使曾经的它很受开发者喜爱,有的项目则继续发扬光大,新项目更是层出不穷。在本文中,我们将继续为大家介绍20个在GitHub上非常受开发者欢迎
Bugly接入指南
接入: 下载官网unity 包, 按照demo示例,文档说明  来接入即可, 很简单 ![](https://static.oschina.net/uploads/space/2017/1220/110418_kCAr_1391394.png) 测试OK 符号: Android:同文档 IOS:https://bugly.qq.com/docs/
Flutter Swiper制作轮播效果
![](https://oscimg.oschina.net/oscnet/71c82559e8c6c5a42d6e3420594398793d7.png) #### 1、引入flutter\_swiper插件 flutter最强大的siwiper, 多种布局方式,无限轮播,Android和IOS双端适配. Flutter\_swiper的GitHub
GitHub 上有哪些完整的 iOS
**1\. Coding iOS 客户端** Coding官方客户端. 笔者强烈推荐的值得学习的完整APP. [GitHub - Coding/Coding-iOS: Coding iOS 客户端源代码](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Flink.zhihu.com%2
OSChina 技术周刊第二十六期 —— 未来 Docker 的安全
**每周技术抢先看,总有你想要的!** **移动开发** 1. 【博客】[JFinal + Jquery Mobile 日志记录webapp效果图](http://my.oschina.net/realfighter/blog/387477) 2. 【博客】[IOS 开发— App 在 IOS 8 的 simulator 运行时,定位卡死
Qt Mac OS、iOS和X11的Retina显示支持
[Mac OS、iOS和X11的Retina显示支持](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fblog.qt.digia.com%2Fcn%2F2013%2F05%2F02%2Fretina-display-support-for-mac-os-ios-and-x11%2F) ---
ReactNative运行IOS在Xcode 11.0编译报错
前段时间项目时间紧张,ios端因为pod文件冲突,没有使用ios模拟器开发,今天打算搞一下这个问题。 解决过程主要是如下两个步骤:首先删除项目ios目录下的Pods文件夹,然后进入项目的ios 文件,执行命令pod install,等待pod文件安装完成,重新运行模拟器即可。 以为这样就完了?我真是Too Young Too Simple。 !
Shop Online with AR Quick Look
> 作者: Chafferer,iOS 开发者,目前就职于手百 iOS 基础研发组。 > > > > Sessions: https://developer.apple.com/videos/play/wwdc2020/10604/ 前言 -- 从 iOS 12 开始,苹果引入了 `AR Quick Look`,这是 3D 内容的内置全系统的
Sign in with Apple 新变化:强制与安全
> 作者:ZUBIN,iOS 开发者,目前就职于阿里 > > > > Session: https://developer.apple.com/videos/play/wwdc2020/10173/ ![](https://oscimg.oschina.net/oscnet/04f009dd-339d-4407-b8bd-7e1092e5818e
The Artist‘s AR Toolkit
> 作者: Chafferer,iOS 开发者,目前就职于手百 iOS 基础研发组。 > > > > Sessions: https://developer.apple.com/videos/play/wwdc2020/10601/ 前言 -- Reality Converter 和 Reality Composer 可以更加容易地为你的 iO

热门文章

iOS 微信支付开发(最新版)

最新文章

iOS 微信支付开发(最新版)