iOS 支付宝

1,登录蚂蚁金服开发者平台,申请账号填写资料,登陆并成为(个人应用)商家,【注意】的一点是:支付宝app支付功能,为了确保应用的合规性合法性,需要审核应用,审核是指应用的下载地址(已上架)或者demo的下载地址(未上架),都没有怎么办?可以使用word文档写一份应用介绍,需要有三项文字注意和若干张图,三项文字分别是:1,app名称,用途,用户群体;2,所售产品价格区间;3,接口使用场景(付款页面截图3-5张),若干张图分别是:应用首页,商品列表,商品详细页,购买页面,支付页面,填写完后提交,1个工作日内应用可以被审批下来,审批下来后此账户下的这个app就算签约了支付功能

2,完善app基本信息,提交审核,在app完善界面需要上传app的320x320图标,以及设置接口加密方式,这个非常重要,需要生成RSA进行数字签名(数字签名是什么?),生成方法:这里只介绍Mac系统下的两种,一种是通过openssl生成(戳我进入OpenSSL),另一种是使用支付宝小应用(戳我进入小应用),生成后会有【商户应用私钥】和【商户应用公钥】,在app基本信息界面提交应用公钥,提交应用信息,进行审核

3,开始集成sdk,官方文档的集成步骤又问题,2017/4/13号之前,最简集成步骤如下:

  1⃣️,下载SDK,把iOS包中的压缩文件中的AlipaySDK.bundle,AlipaySDK.framework倒入到工程

  2⃣️,添加依赖库,如图:

  3⃣️,以上为环信官方给的集成步骤,但是却少了很多东西,此时正确的方式是,继续添加,如下图,DEMO里所有文件都拖过来,除了【APAppDelegate】【APViewController】【APwebviewcontroller】【base】【images。xcassets】【main】【en】这几个工程的配置文件,以及上一个页面的两个文件:如下图: 重申,只有把这些全部拉进来,你的工程才能通过正常编译,否则满是爆红!

 

4⃣️,打开DEMO的appdelegate.m,复制demo里仅有的几个方法,添加进自己工程。

5⃣️,打开DEMO的APViewController.m,复制- (void)doAlipayPay方法,这个是支付方法需要在里面修改三项,第一是appId,填写支付宝分派给你应用的appID,

第二处是appScheme,此处填写一个不会和别人重复的字符串,具体作用接下来会解释,另一处是修改PrivateKey,是你刚才申请的应用私钥,【此处放私钥是为了最简单的集成,真实App里,privateKey等数据严禁放在客户端,加签过程务必要放在服务端完成;防止商户私密数据泄露,造成不必要的资金损失,及面临各种安全风险】-----解决办法下面详谈

6⃣️开始测试,运行程序,其中笔者遇到的两个问题,

  第一处错误:运行程序点击支付按钮后无反应,看了一下控制台,打印信息为:private key is NULL,根据一步步的排查错误,发现是在密钥对商品信息加签的时候导致的异常,两种解决方法

  :
    (1)在RSADataSigner.m文件中 搜索代码 [result appendString:@"-----BEGIN PRIVATE KEY-----\n"]; 将其改成 [result appendString:@"-----BEGIN RSA PRIVATE KEY-----\n"];
    (2)在RSADataSigner.m文件中 搜索代码 [result appendString:@"\n-----END PRIVATE KEY-----"]; 将其改成 [result appendString:@"\n-----END RSA PRIVATE KEY-----"];

  另一处错误:<openssl/asn1.h'> file not found ,首先,先排查是否有pch文件未被拉入prefix header,如果未操作,点击工程,bulid seeting 搜索prefix header ,点击成可更改状态,拖住左面文件拉进框内,显示路径即可,           若加入pch路径后仍然不可行,则点击工程,bulid seeting 搜索header search paths,点进去,输入$(SRCROOT)/你工程的名字/ 即可修改此错误

7⃣️,点击工程,进入info,打开URL type,添加你刚才添加的URLschems,此处解释一下,这个字符串干什么用的,是用于调起别的应用的时候你应用的标识,如果你手机有两个具有支付功能的应用同时用的一个schem,那么当你调起支付并返回应用的时候有可能会回到另一个应用,也就是说,当你从你的app跳到支付宝之后,在返回,依据的是这个Scheme,所以尽量不要和别人重复

8⃣️,此时工程应该可以正常支付了,当然订单的各种信息(名称,金额等)都还要进行处理,不过此处如果支付成功,就要开始和后台进行对接,刚才上文也讲了,上文中的商品的加签的过程是【客户端用私钥对商品信息加签】,而真正的app在商品加签这一步一定要有后台来做,私钥绝不要放在客户端

9⃣️把第二步生成的【私钥】【appdi】【支付宝公钥】,发(邮件,qq,甚至手写)给后台,【支付宝公钥】在你的应用里,应用信息页面下

 

🔟,开始和后台对接,正式由后台加签,请注意下图,其中103行是【创建私钥】105-109行是【使用本地私钥对订单信息进行加签】,117行是【订单信息拼接】,121行是【携带urlschem 和 拼凑后的订单信息进行支付请求】

 

然而我下面要说的是,这些代码你都不用敲!(如果公司有后台),因为这些代码都是后台需要做的,我们需要做的只有121行-123行。大家应该可以看出来orderString这个参数是什么了,没错,它是【加签后的商品信息和公共信息】,而它因为安全原因,尽量让后台生成传给你,这样的话整个支付宝的支付流程为:1,你向后台传递商品信息(比如价格,数量,账号);2,后台对收到的商品信息进行加签并返回;3,调用121行-123行进行支付;4,在appdelegate里支付成功/失败的回调方法里对客户进行提示(也可以让后台设置加签参数的时候添加notif_url,那样后台可以收到支付成功信息,再传给客户端确保消息来源是真实可靠的)

上文中的繁多代码只是为了捋清头绪,并不建议使用客户端进行加签, 如果文章对你有帮助请给我点一个赞🙏,如果有任何不清楚的问题欢迎私信或者评论,看到即回复

 

 

posted @ 2017-04-12 10:03  OC大人  阅读(574)  评论(0编辑  收藏  举报