ios项目中需用到支付宝支付功能,特此来记录一次完整的爬坑过程。
1.使用cocpod集成支付宝SDK时到项目中出现报错,和友盟 UTDID出现冲突,解决办法:
1>移除掉友盟
2>手动下载支付宝不含UTDID版本的SDK文件并手动集成
当然选择第二种方式啦!
2.下载支付宝官方demo输入自己准备好的支付宝账户号以及密钥,发现调不起支付宝,并出现的一个错误信息:
**********rsa_private read error : private key is NULL*************
解决办法:转成PKCS8格式即可 ,私钥本应该只在服务器端使用,此处只是为了运行demo ,在前端模拟生成订单信息而用到。
转换步骤:拿到.pem后缀格式的私钥文件 终端CD到它的目录下 执行命令:
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
复制转换后的字符串填写到demo中的私钥 运行demo即可
3.ALIN10146错误
在支付宝后台注册app之后,并且确定已经开通了app支付功能以及签约并且app为上线状态下(appa在支付后台中状态,不是app上架状态)
继续排查私钥是否被设置为rsa,需要和后台保持一致,后台(支付宝后台设置)提供的如果是rsa2格式,app端就要设置成rsa2格式。
4._RSA_free", referenced from: _rsa_sign_with_private_key_pem in openssl_wrapper.o "_RSA_sign"
在app端生成订单以及签约模拟支付的时候,将官方demo中的一些列库文件导入自己的app中测试支付流程,出现的如上错误,解决办法:添加libcrypto.a 和 libssl.a 第三方库 这几个库文件在官方demo中都有提供,可能在自己的导入过程中漏掉了。
5.在支付完成后发现app没有跳转回自己的app
需要设置自己的URL Types,不要抄写官方demo中的字段,可以设置成自己的项目名称, 但是在提交支付宝支付请求的时候需要拼接这个字段,需要和设置的对应上,以便支付宝支付之后以及取消时候能调回自己的app。
6.'openssl/asn1.h' file not found
在app端生成订单以及签约模拟支付的时候,将官方demo中的一些列库文件导入自己的app中测试支付流程,发现自己明明导入了一些列头文件,但是仍出现的如上错误,这是由于系统未识别到头文件,需要设置Header Search Path路径设置到openssl文件夹的上一层即可
7.了解一下公钥私钥的用处
8.支付宝支付完成之后从SDK返回的签名数据拿到后台验证签名的过程一直无法验证通过
正常情况下一般支付宝返回的签名我们为了安全起见要进行一次同步的验证签名过程 才向用户展示支付成功 这个时候如果成功 后台也可以将用户的支付状态标记为完成 不一定完全依赖支付宝异步回调给自己的后台 但是这一步也是必不可少的一步,但是一直卡在这里无法通过验证,将支付宝SDK返回的信息解析之后拼接完传给后台让后台传给支付宝,最后发现是编码问题一些特殊字符拼接之后传给后台被转义成了其它字符,使用了ios系统提供的很多转码方法都无效,最后将SDk返回的json信息缘分不动传给后台去处理便OK了。
9.自己后台一直收不到支付宝后台的异步通知信息
明明已经设置了回调地址而且也能支付成功,但是一直收不到支付宝的异步通知回调通知,这是很重要的一个步骤,最后发现是后台在验签过程中用的是app 公钥,这里应该用的是支付宝的后天公钥。
网友评论