iOS 集成支付宝和微信支付

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

一、支付宝的集成

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型的属性


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

推荐阅读更多精彩内容

  • 1. 支付宝SDK集成 实现思路:1.下载支付宝SDK2.集成SDK到项目中,参考官方集成文档。3.调起支付宝SD...
    木小土阅读 5,706评论 4 15
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,231评论 25 707
  • 1.前言软件界面如下: 分为官方测试和真实开发项目的两种情况 2.导入微信和支付宝的sdk 3.导入依赖库 4.编...
    cj2527阅读 1,430评论 1 3
  • 实现支付宝支付的准备工作: 1.向支付宝签约,成为支付宝的商户 签约完成后,支付宝会提供一些必要的数据给我们 商户...
    Anson杨春安阅读 8,176评论 0 6
  • 早上,喝了三粒咖啡豆冲的咖啡,这个时间的我华丽丽的失眠了。开着窗,听着窗外的知了声,轮胎与地面的摩擦声,狗狗被炒到...
    小鱼儿咕嘟阅读 544评论 0 3