支付宝SDK付款有两种模式:若是外部存在支付宝钱包,则直接跳转到支付宝钱包付款;不存在的场景下,在SDK内部进行H5支付。 xcode
支付宝支付的业务数据交互流程图以下。 安全
图 1 支付宝支付SDK数据交互流程图 服务器
1) 在手机客户端上,开发包客户端直接把处理的数据结果反馈给商户客户端; app
2) 支付宝服务器主动发起通知,调用商户在请求时设定好的页面路径(参数notify_url,若是商户没设定,则不会进行该操做) 异步
5. 对获取的返回结果数据进行处理 ui
商户在客户端同步通知接收模块或服务端异步通知接收模块获取支付宝返回的结果数据后,能够结合商户自身业务逻辑进行数据处理(如:订单更新、自动充值到会员帐号中等)。同步通知结果仅用于结果展现,入库数据需以异步通知为准。 url
对于同步返回和异步通知的说明 spa
支付结果必须以异步通知为准,通知结果仅供参考。通常来讲,异步通知快于同步返回,但异步返回的时间并不肯定,也有可能出现异步通知延迟的状况。如商户提供了异步通知地址,支付宝服务器端没有收到商户的确认响应(上图第9步),那么支付宝服务器端会一直重发异步通知结果。 code
步骤1 htm
在xcode中添加AlipaySDK.framework和文件夹alipayFiles
步骤2
#import <AlipaySDK/AlipaySDK.h>
步骤3
适配iOS9.0中的App Transport Security(ATS)对http的限制,在info.plist中添加
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>
步骤4
在AppDelegate的
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
方法中增长处理客户端支付返回结果的代码,代码参加DEMO程序或支付宝示例程序。
步骤5
在Xcode里的header search paths 里添加支付宝SDK文件路径(包含了openssl);格式以下 $(PROJECT_DIR)/文件夹名。
图 2 Xcode里添加支付宝SDK header search paths
路径如,$(SRCROOT)/UniPayRedPacketDEMO/alipayFile
图 3 集成支付宝文件示意图
步骤6
点击项目名称,点击“Build Phases”选项卡,在“Link Binary with Librarles”选项中,新增
系统库文件:AlipaySDK.framework,SystemConfiguration.framework
静态库:libcrypto.a,libssl.a
图 4 Xcode添加Lib库
步骤7
点击项目名称,点击“Info”选项卡,在“URL Types”选项中,点击“+”,在“URL Schemes”中输入“MYALIPAY”。“MYALIPAY”表明APP标识,用于支付宝客户端跳转回到具备该标识的APP。支付宝特别提示,
注意:实际商户的app中要填写独立的scheme,建议跟商户的app有必定的标示度,要作到和其余的商户app不重复,不然可能会致使支付宝返回的结果没法正确跳回商户app。
图 5 Xcode设置URL Schemes
https://doc.open.alipay.com/doc2/detail.htm?spm=0.0.0.0.eWwqbi&treeId=59&articleId=103660&docType=1
方法名称 |
方法原型 |
方法描述 |
快捷订单支付接口 |
-(void)payOrder:(NSString *)orderStr fromScheme:(NSString *)schemeStr callback:(CompletionBlock)completionBlock; |
支付并经过回调返回结果 |
快捷订单支付接口,接口及参数说明,请见支付宝官网连接(如上网址)。在其回调里处理的是WAP方式返回的结果。
如要处理客户端(已安装状况下)返回的结果,则使用
方法名称 |
方法原型 |
方法描述 |
处理客户端支付返回结果接口 |
-(void)processOrderWithPaymentResult:(NSURL*)resultUrl standbyCallback:(CompletionBlock)completionBlock |
设备已安装支付宝客户端状况下,处理支付宝客户端返回的url |
处理客户端支付返回结果接口,接口及参数说明,请见支付宝官网连接(如上网址)。支付宝特别提示,
注意:该方法必须实现,不然将会致使在安装手机支付宝的状况下,支付结果没法正常同步返回。
iOS引入支付宝缺乏 #include <openssl/asn1.h>,出现情况以下图所示。
图 6 集成支付宝问题1
解决方法见第2节步骤5。
这是因为iOS系统的保护机制,APP间调用须要加入白名单。
APP须要在xcode加上支付宝白名单,在Info.plist中添加LSApplicationQueriesSchemes信息,以下图所示。
图 7 集成支付宝问题2