iOS开发之支付宝集成

作者: Ke_Wang | 来源:发表于2016-02-17 10:36 被阅读20245次

项目中要用到支付功能,需要支付宝,微信,银联三大支付,所以打算总结一下,写两篇文章,方便以后的查阅, 大家在做的时候也能稍微参考下,用到的地方避免再次被坑。这是第二篇支付宝集成,第一篇银联支付在这里。本来要用那个ping++的神器,可以集成各种支付手段,异常的方便,但是考虑到安全性问题的话,支付的渠道还是不让第三方参与的好,不然会不安全,于是就苦逼地慢慢的一个一个集成了。。。。这里就代理支付宝的集成过程:

刚开始以为支付宝集成还是比较简单的,看了几个文章,网上的各位大神也是各种秀操作,说集成很简单,但是,真正做起来就不是那回事了, 特别是新版的1月11号更新的,我正好是这一天开始看的,网上的经验什么的 大都是比较老的,比较新的能用到的文章不多(但是好文章还是有的,对我帮助也很大),现在我就来一步一步说一下自己集成支付宝的血泪史!

下载支付宝SDK

首先是开发包下载,还是比较难发现的,网上以前文章中的链接都打不开,我找了好久才找到的。最新的地址在这里(注意的是下载出来的SDK包里面并没有传说中的开发文档,需要其他地方找或者看网页上的)。
公钥、私钥、PID、sellerID、key这些东西的用途和获取方式在文档上都有详细的说明,这里不再赘述,一定要把概念分清楚再去做,不然一会就乱了。如果遇到问题的话咱们可以再一起探讨。

支付流程理解

开发文档、开发文档、开发文档,重要的事情一定要说三遍!!!建议先把开发文档仔仔细细看一遍,一定要看,本小白刚开始的时候没有老老实实地看完,结果遇到很多很多的坑,以血和泪劝解大家,浪费的挺多的时间的,所以建议一定要好好看看,特别是交互流程这一部分

调用这个方法

在调用支付宝接口的时候,我们需要两个参数,orderStringAPPScheme, APPScheme是app在info.plist注册的scheme。
orderstring 这个是一个订单的字符串,由后台拼接生成的,还需要签名的。例如:
partner="2088101568358171"&seller_id="xxx@alipay.com"&out_trade_no="0819145412-6177"&subject="测试"&body="测试测试"&total_fee="0.01"&notify_url="http://notify.msp.hk/notify.htm"&service="mobile.securitypay.pay"&payment_type="1"&input_charset="utf-8"&it_bpay="30m"&sign="lBBK%2F0w5LOajrMrji7DUgEqNjIhQbidR13GovA5r3TgIbNqv231yC1NksLdw%2Ba3JnfHXoXuet6XNNHtn7VE%2BeCoRO1O%2BR1KugLrQEZMtG5jmJIe2pbjm%2F3kb%2FuGkpG%2BwYQYI51%2BhA3YBbvZHVQBYveBqK%2Bh8mUyb7GM1HxWs9k4%3D"&sign_type="RSA".

流程就这么简单,接下来是集成SDK的时间,这部分很坑,因为是我们是商品的数据签名什么的都在后台做的,所以客户端做的时候遇到的坑就不多说了,可以参考这篇文章,基本上遇到的坑都能找到。
还有这篇是有人对这个进行的一个简单的封装,如果签名,数据部分需要在APP上做的话,可以直接用这个,封装很简单,也是加了个类目进行做出来的,实现很简单。大家可以参考一下。

支付宝的SDK给了一个处理返回结果的方法,就是那个openURL的那个,在demo的appdelegate里面有。

if ([url.host isEqualToString:@"safepay"]) {
[[AlipaySDK defaultService] processOrderWithPaymentResult:url
 standbyCallback:^(NSDictionary *resultDic) {
       NSLog(@"result = %@",resultDic);
​
}]; 
}

关于签名(主要是在客户端签名时候注意的)

支付宝上要用那个RSA,这是个算法,所以为了方便,可以使用第三方的方法,或者找demo上的代码粘贴上去!不过还是那句话,为了安全,最好还是后台的做,不怕被拦截了 。
签名的时候,涉及到了RSA公钥、私钥的生产,RSA的签名、验证签名,SHA1值的计算,base64和URL编码等等等等烦人的东西,估计支付的程序猿也不想麻烦,就用了一个开源的代码来统一解决这些问题,就是openssl这个文件夹。
如果你执意要在客户端上签名(前面说过,并不安全),也可以用demo中的openssl这个文件夹,那你需要导入这几个文件夹:DEMO中的openssl目录头文件,两个库文件libcrypto.a libssl.a,DEMO里支付宝自己写的Util目录,如下图:


用到的文件

支付宝文档上的集成流程详解,写的很详细了,一般遇到的问题都有提到。

推荐几篇好文章,可以参考下,减少点坑(1、4、5务必看看,很有启发的):
1.集成支付宝钱包支付iOS SDK的方法与经验
2.IOS集成到支付宝的步骤及问题
3.这个也是遇到的一些问题和解决方法
4.iOS应用之支付宝集成总结
5.iOS 集成支付宝


这篇文章是在客户端做签名的,写的也很详细


今天又遇到个问题:调起了支付宝客户端,但是支付不了。


支付失败

这个是因为,如果订单来自服务器此错误表示后台返回的签名订单含有特殊字符 ,需要编码。
由于RSA签名机制每次生成的签名都不一样,也就是是二进制数,后台返回签名的订单时,是基于base64位编码的 。可能基于base64位编码生成带有+=/等在url序列中不被允许的字符。当我们拿着后台不进行特殊字符处理的订单作为参数去调用支付宝的接口时,便会出现由于支付宝客户端吊起支付宝服务器是URL有问题,导致错误ALI64 。
解决办法是 让后台处理一下参数中的特殊字符,具体的这里有示例.

相关文章

  • 集成支付、第三方登录知识总结

    1、玩转iOS开发:集成 WeChat SDK - 支付篇2、玩转iOS开发:集成 AliPay - 支付宝

  • ## [iOS 支付宝支付]

    [iOS开发系列-支付宝支付] 概述 开发中支付通常都会集成支付宝支付,下面讲解支付宝的整体流程。 集成支付宝支付...

  • ios-支付集成

    iOS开发之第三方支付支付宝支付教程,史上最新最全第三方支付宝支付方式实现、支付宝集成教程,支付宝实现流程 iOS...

  • iOS Alipay -支付宝

    iOS 集成Alipay -支付宝支付 集成 AliPay - 支付宝

  • iOS开发支付集成之微信支付

    iOS开发支付集成之微信支付

  • ios支付宝签名

    支付宝: iOS 支付功能概述 - 简书 1.iOS集成支付宝 - 简书 2.iOS 集成支付宝 - 简书 3.i...

  • 文章汇总

    ios iOS 网络篇 网络基础总结 支付宝集成 iOS支付宝支付集成 - demo例子集 - 博客园 理解 iO...

  • 支付宝支付流程(I)

    参考资料:支付宝支付集成支付宝支付集成实现蚂蚁金服iOS支付集成

  • iOS开发支付集成之微信支付

    这一篇是《iOS开发之支付》这一部分的继支付宝支付集成,银联支付集成第三篇,微信支付。在集成的时候建议都要去下载最...

  • iOS开发支付集成之微信支付

    这一篇是《iOS开发之支付》这一部分的继支付宝支付集成,银联支付集成第三篇,微信支付。在集成的时候建议都要去下载最...

网友评论

  • 0x00chen:楼主在吗 “APPScheme是app在info.plist注册的scheme。” ,支付宝需要在infoplist中注册吗?这个怎么写啊
  • 我爱WSP:在后台签名后发送到APP的数据不需要再次验证一下么 如果数据在网络传输过程中被整体篡改了怎么办?
    我爱WSP:@WangK_Dev 我的意思是是否需要再次对加密的数据进行验证 还是直接用后台发的签名内容调用支付宝?
    Ke_Wang:@我爱WSP 一般发的数据都是 加密的啊。。。
  • d0ab8ef28fa2:你写的东西很好啊,希望楼主能不断的更新一下这个系列的文章
  • 纳兰怮翌:楼主交个朋友呗,发现你写的这篇文章已经过时了,现在的支付宝demo里面的内容有变化了,我的qq707431492
  • chen文:楼主,集成支付宝遇到密钥总是报错 rsa_private read error : private key is NULL,遇到这个问题吗?
    chen文:@WK_IOSDevelpoer 恩,解决了
    Ke_Wang:@上海灬一人 我没有遇到,你这个好像说的是 私钥 为空,你看一下你电脑上生成的私钥是不是有问题
  • 912aef2f5ffa:楼主,你项目中用到支付宝,可以通过审核吗
    Ke_Wang:@一星半点 虚拟货币不行的,苹果得收点钱的:joy::joy::joy:
    912aef2f5ffa:我的是充值业务的,好像虚拟货币,苹果审核不通过的,你是购买实物的吗
    Ke_Wang:@一星半点 可以呀,你的不行么?
  • Ke_Wang:嗯 是啊
    我是姑姑思密达:@WK_IOSDevelpoer 就是跟你截图时一样的 在输入付款密码结束后。方便加一下QQ联系嘛
    Ke_Wang:@我是姑姑思密达 你的 交易订单处理失败是什么情况下发生的呀?
    我是姑姑思密达:亲 我遇到到了 你最后面写的 交易订单处理失败 的问题 除了 编码错误还有别的原因吗 或者有没有其他的解决办法 有点急 求回复
  • 73d928a3a8be:订单签名交给后台处理,意思就是向后台发送一请求,从后台获取AliSDKDemo里面的signedString字符串,然后再调用-(void)payOrder:(NSString *)orderStr fromScheme:(NSString *)schemeStr callback:(CompletionBlock)completionBlock方法是吧?

本文标题:iOS开发之支付宝集成

本文链接:https://www.haomeiwen.com/subject/kyqmkttx.html