最近刚使用了一次支付宝的SDK,由于第一次使用关于支付宝的坑真的不想再跳第二次,索性就记录了一下,以备后患,下面是我导入自己的工程遇到的各种问题:
1.引入支付宝的两个文件,bundle和framework,build报错:
添加支付宝所需框架(图2):
此时,Build成功;
2.导入order的两个文件和util、OpenSSL文件夹,build报错(图3):
3.导入图4两个文件,Build仍报错(图3);
4.修改build settings ->build active architecture only :No,build 报错图3;
5.打开base64.h,导入头文件#import<Foundation/Foundation.h>,运行报错图5:
6.openssl的错误需在build settings里面的header search path里面添加路径,注意这个路径本人觉得是最难跨过的坑(因为我对绝对路径和相对路径不知道怎么来判断),特此提供一种方法,很保险:在桌面上创建一个文件夹,把openssl文件夹和Util文件夹一起拷贝到新建的这个文件夹中,把这个文件夹拖到工程里面去,记住用拖的方式,拖到工程(xcode打开项目工程的时候,不是拖到项目文件夹)里面之后,使用show in finder ,把openSSL文件夹展示出来,拖到添加路径里,但要注意把openSSL文件夹及前面的斜杠去掉,即这个路径只需到OpenSSL文件夹的上一级即可;此时Build,OpenSSL错误消失(图5中最下面的错误),但仍有错误,如图6;
7.此时找到报错的文件,在里面导入Foundation框架,但是文件比较多,于是可以采用另一种方案,在pch文件中添加foundation框架,此时build成功;
8.再运行又出现错误,还是最讨厌的linker command错误(图7);
9.重新导入libssl文件,build报错(图8);
10.重新导入lcrypto文件,build成功;
11.最后在客户端进行签名的时候把URL types设为scheme里的值即可;
到这里支付宝导入工作终于结束,真是处处有玄机。
注意:我原来把OpenSSL文件夹直接从支付宝demo里使用add files方式加到工程里,发现只要支付宝demo在我的电脑上的位置有变动,我这个项目里的文件就报错,所以强烈建议大家:在引入.a文件,OpenSSL等文件夹时最好先把这些文件拷贝到一个新建文件夹内,再直接拖动到工程里即可。
总结:由于第一次引入支付宝,读文档感觉晦涩难懂,在群里问,又不能及时得到答复,过程中还是很有挫败感的,在这里把我觉得要提醒的东西列出来:
1.支付宝开发账号中的应用公钥和私钥:首先,应用公钥不是支付宝公钥,应用公钥和应用私钥是直接对应的,可使用支付宝开发文档上所说的工具进行生成,生成时两者同时产生;然后应用公钥上传支付宝账号应用信息里,支付宝私钥是服务器配置订单信息使用的,私钥只有在自己运行demo的时候才使用,否则,支付宝是建议放在服务器端的,也就是说,公钥私钥客户端一般都不需要管;
2.APPID:本人在跑支付宝demo时一直提示ALI40247错误,真是噩梦一般的错误,出现这个错误一般要排查公钥私钥签名等的问题,但是,关键是支付宝的demo,只需要改2个地方,一个appID,一个private key,demo就应该成功,服务器使用也是这个错误,排查过程不再叙述,最终错误原因:appID错误,appID写成了合作伙伴的PID,这个坑跌的太狠了,所以提示大家在报这个错误时,先检查一下appID是不是给错了,尤其是如果是后台给的话,一定要注意!注意!!注意!!!
3.demo运行:我下载demo运行的时候是其他地方都不用改的,唯二处是:appID和private key,顶多也就是再把URL types的地方改一下,这样就可以成功的,如果不成功,那就是公私钥对应的事,或者是appID写错了;
以上就是我使用支付宝SDK的错误以及解决办法了,希望对大家有所裨益。若有错误,欢迎大家指正。