博客> iOS支付宝集成与各种坑
iOS支付宝集成与各种坑
2019-12-11 07:25 评论:0 阅读:1166 yujieace
ios 支付宝

App要集成第三方支付,基本上绕不过支付宝这个坑。最近的项目中用到了支付宝,踩了无数坑,从账号到签名到回调。

步骤

1、申请支付权限,这个是由公司和运营相关人员申请的,开通移动支付权限就好,获取相应的Key和ID。

2、上传密钥,支付宝通过RSA验签,这个也是最坑的一个地方,通过openssl生成RSA公钥和私钥 如下 openssl genrsa -out rsa_private_key.pem 1024

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

openssllist text here pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt //Java需要的Pkcs8格式密钥

在当前目录下可以看到生成的密钥文件,文本编辑器打开,将公钥复制到支付宝的合作伙伴,RSA公钥中即可。 支付宝公钥用于对支付宝的返回值进行验签,防止伪造。 私钥用于己方对报文的签名,支付宝会对其进行验签。所以需要自己保存好。

签名有两种方案:

一、服务端下发支付信息和签名,这也是支付宝推荐的做法,更安全也更规范,客户端只需要访问服务器获取支付信息,调用支付宝sdk即可。

二、客户端自行签名,是支付宝Demo的做法,这种做法需要将私钥保存到客户端中,安全性差,如被反编译,很容易泄露私钥。另外,支付宝的自行签名的坑很多,下面会重点说。

3、集成:支付宝的SDK只有很少的几个文件,但需要手动配置。如下:  屏幕快照 2016-07-22 下午1.29.56.png 将这两个文件拖入项目中,同时Target中配置Linked Framework and Libraies,必须配置,否则编译报错  屏幕快照 2016-07-22 下午1.32.08.png

其中libssl.a libcrypto.a是需要自行签名是才需要集成的,后面会仔细说,服务端签名这两个不用集成。

如果是服务器签名,到这里,其实支付宝的集成已经完成了,不需要进一步的配置了。 只需要在需要调用支付宝的地方进行相关的设置和调用就好了

但是,事情一般不会这么简单的结束.......

需要客户端本地签名或者验签,那么还需接下来的步骤

4、openssl的集成,支付宝的demo中实现了签名和验签的完整工具类,从demo中复制Util和openssl、Order.h .m文件到项目中 很多同学这里就开始浪了。。。直接编译,结果傻眼了,报错了。。。 支付宝的demo虽然完整,但配置的说明写的不怎么样 以下步骤照着做不用编译

首先先添加一个pch文件,添加如下内容

#ifdef __OBJC__

#import <UIKit>

#import <Foundation>

#endif

在项目设置中添加这个pch文件即可。  屏幕快照 2016-07-22 下午1.40.40.png

配置Header Search Paths 很多同学发现找不到rsa.h基本就是个问题 Build Settings里面搜搜header即可找到 按照如下配置即可,添加$(SRCROOT)/项目名称 即可

 屏幕快照 2016-07-22 下午1.41.58.png

此时再编译,应该不会报错了,愉快的开始支付的流程吧。 ps:博主第一次配置openssl的时候调了一上午,还是报错,严格照着支付宝demo配置,一遍成功,就三个点:1.类库有没有加,2.pch有没有加,3.header search paths有没有加

pss:博主所在的公司的后台攻城狮现在还在折腾为什么签名验不过的问题,总是报ALI64错误。更新:后来发现是签名没有URLEncode。。。。

psss:讲真,第一次玩支付宝真难用,熟悉了就好了。。。

收藏
0
sina weixin mail 回到顶部