美文网首页ios实用开发技巧
iOS 集成支付宝和微信支付

iOS 集成支付宝和微信支付

作者: 雪上踏痕 | 来源:发表于2016-04-22 15:36 被阅读3420次

           最近因为项目需要,需要接入移动支付,下面就根据我们项目集成支付的过程做一个简单总结,包括集成支付宝和微信的大体流程,在集成的过程中遇到的问题以及支付宝和微信支付的简单比较,本人水平有限,如果大家觉得有不妥的地方,还望不吝赐教。

    一、支付宝的集成

    1.支付宝集成流程:

    支付宝这边集成相对于微信来说过程要简单,但是在集成的过程中可能比较容易遇到问题,支付宝官方文档写的比较粗略,有很多问题我也是从网上找了很久,最终集成成功。我在此只讲客户端的工作。

    集成前的准备工作:

    首先我们需要支付宝的商家服务平台上进行我们的产品签约,并通过审核,然后根据步骤得到PID Key等信息。

    在项目中集成支付宝SDK

    以支付宝的Demo为例,当我们在App端调用支付接口的时候,是通过以下方式进行支付的:

    所以我们客户端这边需要做的就是:构造好订单数据并且签名然后请求支付这一步,请求之后,支付宝那边会给我们返回支付的信息,并且同步会给我们的服务端返回支付信息(这一块由我们的服务端来集成),那么有的人可能问,具体是怎么支付的呢,用户支付的钱去哪了,还有demo中的那些参数怎么用?下面就详细说一下支付宝给我们开发者提供那个demo:

    向项目中集成:

    我看了一下官方Demo,结构是这样的():

    支付的时候,我们主要用到的方法是:

    -(void)payOrder:(NSString *)orderStr fromScheme:(NSString *)schemeStr callback:(CompletionBlock)completionBlock;

    这个方法的作用就是请求支付并通过回调返回结果,在用的时候我们需要传入orderStr等参数,而orderStr需要我们自己去拼接成文档中要求的格式,所以比较麻烦,我们可以直接修改demo然后放到我们的项目中即可。

    下面我们就把支付宝的SDK加到我们的项目中:

    在桌面上创建一个空文件夹,把用到的文件全拷贝里面:

    在这里,我们可以把demo中的Order类保存着,这样我们就能很方便的创建订单了。一定不要忘了libcrypto.a和libssl.a这两个.a文件!(DFProduct类是我自己创建的,因为项目需要就把demo中写成延展的Product改写成了心新类)。

    这时候把我们创建好的文件夹拖到我们项目里面,拖完之后需要做的事情:

    找到我们项目TARGETS --->Build Settings ---> Search Paths --->Header Search Paths下:把我们刚才拖到项目中的文件夹选中,然后show in Finder 然后把文件夹拖到

    Header Search Paths中:

    然后编译看看是否有错误,我这样做之后没有出现错误,按照我上面的操作应该是没有错的。看了一下,很多人在把SDk加入到项目中的时候遇到了以下错误:

    这个错误就是上面提到的Header Search Paths设置的错误,按照上述方法重新设置。

    创建我们自己的订单

    我们可以看到,demo中我们发送请求的时候,有很多参数需要我们设置:

    其中有三个参数我们需要先设置:partner、seller、privateKey

    这三个参数分别代表了PID(16为数字)、收款方的PID、和合作伙伴秘钥RSA加密后的秘钥(当然这个秘钥是有要求的,生成秘钥的方法可以参考这个:http://blog.it985.com/12276.html),当我们设置完这些参数,然后就剩下Order中的参数了,这些参数比较简单,一般都能看懂是什么意思,然后我们运行,当我们点击支付的时候发现控制台打印了以下信息:

    但是我们rsa——pravite明明已经添加了,弄了好久,才明白这是我们设置的秘钥的格式的问题,最后通过以下方法解决了:

    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-----"];

    到此,我们基本上把官方demo集成到我们的项目当中了,剩下的要做的是就是我们这边生成订单的基本信息,比如价格等,还有一个参数:order.notifyURL

    这个参数是服务器异步通知页面路径,这个需要我们服务器给我们,当我们这边发送请求支付信息之后,支付宝服务器会返回支付结果到客户端,同时也会返回支付信息到我们的服务端,这时候通过这个路径,我们的服务端就可以记录我们前端的请求信息。

    完成了这些步骤,基本的集成也就结束了,我们就能正常的发送支付请求并且支付成功了!

    二、微信支付

    下面简单说以下微信支付,我觉得微信支付的流程可能会比支付宝麻烦点,但是SDK却比支付宝好集成。

    首先也是要在微信开放平台上注册商户信息并提交审核,然后申请开通微信支付的能力,这样我们就可以集成SDK了。

    SDK很简单,下载好后拖入到我们的项目中即可,然后

    1、项目设置APPID

    商户在微信开放平台申请开发APP应用后,微信开放平台会生成APP的唯一标识APPID。在Xcode中打开项目,设置项目属性中的URL Schemes为您的APPID。

    2、注册APPID

    商户APP工程中引入微信lib库和头文件,调用API前,需要先向微信注册您的APPID,代码如下:

    [WXApi registerApp:@"wxd930ea5d5a258f4f" withDescription:@"demo 2.0"];

    与支付宝支付不同的是,微信支付在支付的时候会在我们的服务端进行一个预支付,这时候有我们的服务端来生成预付单,生成预付单之后会获得一个prepay_id,然后服务端将参数再次签名发送到App,App端请求支付即可。

    详见微信支付官方文档:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5

    三、支付过程中关于支付界面的设计:

    在支付的时候我们需要弹出一个页面,以供用户填入支付的金额信息,界面的设计是这样的:

    1.这时候选用的键盘样式:UIKeyboardTypeDecimalPad(带小数点)UIKeyboardTypeNumberPad(不带小数点)

    2.金额的填写,虽然界面挺简单,但是金额的填写要求比较高,输入的金额要求是最多小数点后两位,而且小数点输入只能有一次,这个我们可以借助textField的代理方法:

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{}

    来实现:

    _isHaveDian是Bool型的属性

    相关文章

      网友评论

        本文标题:iOS 集成支付宝和微信支付

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