1.简介本文是对以往项目的总结。由于相关支付SDK迭代,原文章不满足需求,更新如下供大家参考,并增加了常见问题总结。今天主要介绍支付宝支付,其他支付介绍会尽快更新。付款前,我也在网上查了资料。大多表示支付接入坑太多,微信坑最多,银联单证太复杂。其实如果连接很多的话,那些套路是可以绕过的。网上的经验大多比较老,比较新的可以借鉴的文章不多(不过还是有不错的文章,对我很有帮助)。下面就为大家详细介绍一下,帮助大家避坑。2.交互过程,建议先仔细阅读开发文档,一定要看。刚开始的时候没有老老实实看,结果坑了很多,浪费了很多时间,一定要认真看。看,尤其是交互流程部分。2.1功能流程2.2数据交互支付宝支付的功能流程相对于微信支付来说非常简单。如上两张图,我们的App(即商户客户端)只有三步:生成订单调用支付宝接口,发送订单,返回订单支付结果并处理3.下载支付宝SDK那里有很多支付宝业务。费了九牛二虎之力才找到自己想要的支付SDK。这里是最新的SDK地址。注意,下载的SDK包中没有传说中的开发文档,需要到别处找或者在网页上阅读。公钥、私钥、PID、sellerID、key的使用和获取方法在文档中都有详细的介绍,这里不再赘述,但是在做之前一定要分清楚概念,不然一会儿就乱了。如果有问题,我们可以一起讨论。4、导入库集成SDK4.1导入文件和关键库通过CocoaPods导入pod'AlipaySDK-iOS'手动导入官方demo截图打开iOS工程,新版SDK文件命令文件,需要复制粘贴到自己的项目:AlipaySDK.frameworkAlipaySDK.bundle直到文件夹openssl文件夹libcrypto.a和libssl.a上面的一些文件在打开的项目中看不到,需要打开项目文件夹才能找到。在BuildPhases选项卡的LinkBinaryWithLibraries中,添加如下依赖:其中需要注意的是:如果是Xcode7.0之后的版本,需要添加libc++.tbd、libz.tbd;如果是Xcode7.0之前的版本,需要添加Addlibc++.dylib,libz.dylib(如下图)。此时如果启动项目,大概率会发现报错。4.2导入头文件对需要调用AlipaySDK的文件添加头文件引用。import4.3调用支付接口在支付宝的接入文档中,生成订单的步骤是在客户端完成的,但最好在服务器端完成。订单在后台生成然后拼接、签名,然后服务端直接传递一个加密签名的参数给客户端,比较安全。订单信息、商户信息等全部掌握在自己手中,让APP端不怕数据被截取,调用起来也非常简单,只需要调用支付接口即可。如果只需要发送订单和处理支付返回结果,只需要添加AlipaySDK.bundle和AlipaySDK.framework,在下载的SDK中很容易找到。快速支付方式是这样的:-(void)payOrder:(NSString*)orderStrfromScheme:(NSString*)schemeStrcallback:(CompletionBlock)completionBlock;在支付按钮中,使用支付宝类,然后调用这个方法!如下://NOTE:调用支付结果开始支付;4.4配置支付宝客户端终端返回的url处理方式如示例AliSDKDemo\APAppDelegate.m文件中,添加参考代码:import在@implementationAppDelegate中,将NSLog改成如下代码到实际业务处理代码:-(BOOL)application:(UIApplication*)appopenURL:(NSURL*)urloptions:(NSDictionary*)options{if([url.hostisEqualToString:@"safepay"]){//跳转到支付宝钱包进行支付,处理支付结果[[AlipaySDKdefaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary*resultDic){NSLog(@"result=%@",resultDic);}];}returnYES;}4.5ProjectConfiguration最后别忘了写一个URLScheme,你可以在Targets->Info下找到最后一个,点击“Info”选项卡,并在“URL类型”选项中单击“+”。5.常见问题汇总5.1支付后无法返回App,一般是因为白名单设置不正确(@"reslut=%@",resultDic);}];上面代码中的appScheme参数需要和4.5项目配置中设置的URLSchemes一致,这样才能返回对应的App。5.2#includenotfind这是一个神奇的坑。我用谷歌搜索了很长时间,但我无法弄清楚。后来在网友的提醒下才想起#import""和#import<>的区别。解决方案:Targets->BuildSettings下的HeaderSearchPaths。添加如下目录“$(SRCROOT)/项目名称/文件的绝对地址”如图:5.3'openssl/asn1.h'filenotfound由于项目中引入了openssl库,出现此问题找不到库文件项目。只需在HeaderSearchPaths中添加$(PROJECT_DIR)/projectname/openssl即可,如下图:5.4Undefinedsymbol:OBJC_METACLASS$_WKWebView存在以上问题,需要在项目配置中添加系统类库:WebKit。框架5。5如果运行后报错,类似如下信息:Cannotfindinterfacedeclarationfor'NSObject',superclassof'Base64',那么需要打开报错的文件,添加头文件。#import5.6Swift中访问SDK遇到的问题如果项目使用Swift作为开发语言,需要添加一个桥接文件,比如Bridging-Header.h,同时设置位置项目BuildSettings中的桥接文件。如果运行时出现如下错误,在bridge文件中写入#import5.7,点击Pay,跳转到支付宝卡。如果这种情况发生在启动页面上,卡住的页面将显示相应的错误消息。一般有以下几种情况:商品信息拼接字符串错误支付账号逾期续费状态商户ID错误订单信息签名验证失败