支付宝使用流程和踩坑小记(附Demo)

支付宝使用流程和踩坑整理

官方开发指南

本文记录了我使用支付宝的一些过程
第一部分是一些我根据官方文档中摘录的可用的重要信息
第二部分是整理的 iOS/Android App 接入主要流程 && Demo
第三部分是遇到的几个坑,比较重要,特别记录一下



第一部分


应用创建及使用流程:

01_liucheng.jpg

1.创建应用

开发者使用支付宝账号登录开放平台(需实名认证的支付宝账号),根据实际需求创建应用(如“支付应用”)。
备注:创建应用时的应用状态为“开发中”,无法在线上正式调用接口。如您已经了解应用的基本功能,可点击此处跳过此步骤;

2.填写应用基础信息

名称 && 图标 将来会作为审核依据,审核规则

3. 配置应用环境

字段名称 字段描述
应用网关
对应下图1
用于接收支付宝异步通知,例如口碑开店中,
需要配置此网关来接收开发者门店被动通知
授权回调地址
对应下图2
第三方授权或用户信息授权后回调地址。
授权链接中配置的redirect_uri的值必须与此值保持一致。
(如:https://www.alipay.com) 注:当填入该地址时,系统会自动进行安全检测,
详情请参考安全检测
RSA(SHA256)密钥
(对应下图3)
开发者要保证接口中使用的私钥与此处的公钥匹配,
否则无法调用接口。可参考密钥的生成与配置,且接口参数sign_type=RSA2。
RSA(SHA1)密钥
(对应下图4)
同上,且接口参数sign_type=RSA。

UI 页面参考

02_peizhi.png

签名与生成密钥

如何生成与配置密钥详见签名专区
TIPS:必须填写“接口加密方式”(加密方式只需填写一个),才可以提交审核。

4.接入沙箱环境

开发中的应用无法调用线上正式环境的接口,蚂蚁提供了沙箱环境帮助开发者进行开发调通工作,沙箱环境自动为开发者分配沙箱应用,不依赖线上环境的应用创建;
点击“开放平台-开发者中心-沙箱环境”。进入沙箱环境页面,系统已经自动为你创建一个应用。与线上流程一致,只要配置了沙箱应用的密钥即可开始开发。

应用安全性开发指南

《开放平台第三方应用安全开发指南》给出常见开发场景下,帮助开发人员完善应用安全性的开发建议,同时也对常见的安全漏洞进行描述,并提供对应的修复方案。

各种官方Demo下载

各种版本Demo体验与下载 https://docs.open.alipay.com/399/106844/

开发上线指南

上线和使用指南https://docs.open.alipay.com/399/106853/



<center> 第二部分 </center>

iOS端接入指南

Android端接入指南



<center> 第三部分 </center>

遇到的坑和解决

这部分是集成Demo过程中主要遇到的三个问题解决,下面是我解决的方法,希望能帮到有缘人

  • 集成支付宝 报错 “openssl/asn1.h file not found”
  • 集成支付宝 报错 “library not found for -xxx”
  • 集成支付宝 报错 "duplicate symbol _base64_encode"
  • 集成支付宝 报错 "No matching function for call to PEM_read_bio_RSAPrivateKey / EVP_encode_Block"

下面分别说一下这三个问题

1.集成支付宝 报错 “openssl/asn1.h file not found”

03_q1.jpg

这个问题应该是最常见的问题,官方文档中也说了是查找头文件路径问题,解决方案如下:
点击项目名称,点击“Build Settings”选项卡,在搜索框中,以关键字“search”搜索,对“Header Search Paths”增加头文件路径:$(SRCROOT)/项目名称。如果头文件信息已增加,可不必再增加。

这里着重说一下原理

Build Setting 下面 Search 主要分三个类型

  • Framework Search Paths
  • Header Search Paths
  • Library Search Paths

这三个类别在官方文档里解释很清楚(如图)


03_q12.jpg
  • Framework Search Paths

在编译C、Objective-C、c++或objective - c++,以及产品使用的框架的链接器时,这是一个目录列表,其中包含了包含或导入头文件的编译器的目录。路径是由空格分隔的,因此任何带有空格的路径都必须正确引用。

  • Header Search Paths

这是在编译C、Objective-C、c++或objective - c++时,编译器要搜索的文件夹的路径列表。路径是由空格分隔的,因此任何带有空格的路径都需要正确引用。

  • Library Search Paths

这是一个目录列表,用于为该产品使用的库进行链接搜索。路径是由空格分隔的,因此任何带有空格的路径都需要正确引用。

小结
懂了原理就变的很清楚了,找不到文件实际上就是我们的路径没有配置正确

  • 路径可以根据我们的项目分层自己设置,相应的路径配置也要配置正确
  • 经测试,openssl文件夹,Utils文件夹,和支付宝SDK的文件夹要配置在同一级
  • Framework Search Paths 和 Library Search Paths 是编译器和连接器找库和头文件的路径,配置内容是一致的
  • 支付宝SDK的文件夹内部文件可以放一起,Header Search Paths 配置中只需要找到对应文件夹上一级即可

最终配置方式:


03.q13.jpg
03_q14.jpg

2.集成支付宝 报错 “library not found for -xxx”

04_q1.jpg

这个问题就是上面说的 Library Search Paths 配置问题。
原因就是项目中使用的第三方库,Xcode找不到对应的静态库,根据上面原理配置即可

3.集成支付宝 报错 "duplicate symbol _xxxxxx"

05_q1.jpg

这个问题是我项目中在集成支付宝的同时也有其他的支付相关库,仔细看报错会发现其中有两个路径。一个是支付宝下面 libcrypto.a 一个LLPayUtils下的libRsaCrypto.a 两者在编译过程中生成了同样的连接符号 gost_sign.o 导致连接器在连接过程中无法正确连接。

实际上就是两个库中都定义了 gost_sign.m 这样的源文件,文件内部有符号_unpack_cp_signature_gost94_compute_public 等等

解决办法

  1. 如果是自己写的文件直接修改内部符号
  2. 如果是三方静态库自己看不了实现,就删除一个吧(欢迎补充更好的方法)

4.集成支付宝 报错 "No matching function for call to PEM_read_bio_RSAPrivateKey / EVP_encode_Block"

15322809976388.jpg

15322810291735.jpg

这两个报错,实际指向一个问题:找不到对应的需要调用的函数。但实际上这里就是正确的源文件。
具体原因是在混编的过程中,一些类型不匹配导致的报错

解决办法
第一个改成: PEM_read_bio_RSAPrivateKey(bio_private, NULL, NULL, NULL);
第二个改成: EVP_EncodeBlock(outputBuffer, (unsigned char *)[signature bytes], signatureLength);

小结

  1. 支付宝有些坑,但是如果懂原理,其实是很好解决的。要多学习

最后献上一个自己集成的小Demo欢迎下载查看
支付宝集成Demo:https://github.com/xiaoyouPrince/AliPayDemo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,569评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 实现支付宝支付的准备工作: 1.向支付宝签约,成为支付宝的商户 签约完成后,支付宝会提供一些必要的数据给我们 商户...
    Anson杨春安阅读 8,111评论 0 6
  • 作者:杜家熙 (高新一中初中校区八年级D4班) 2018的到来,终赶走了笼罩的烟霾,带来今冬的第一场雪。 ...
    是1吗阅读 516评论 5 10
  • 发现蘑菇真的很漂亮!
    悠闲的小谁阅读 263评论 1 3