iOS微信支付流程及实现

来源:互联网 发布:java培训工资 编辑:程序博客网 时间:2024/05/02 00:34

文章出自http://www.iashes.com/2015-07-722.html   在此鸣谢~~

1,首先下载微信的Demo,不用下载静态库等文件,这个demo不仅有静态库等文件,还有人写好的获取随机串,加密加签,获取时间戳等方法。 下载完之后需要导入两个文件夹: 1>,lib 2>,SDKExport 文件夹名可以自己随便改,add到自己的project里边就行了。 SDKExport里边主要是微信的静态库和一些对象,用来分配和请求分享,登陆,支付等。如果原来的项目中有微信的这个skd,就不用再导入的,三个文件:libWeChatSDK.a,WXApi.h,WXApiObject.h。 lib里边主要又一些XML的解析和上传,因为微信支付是给服务器发xml文件的,还有payRequsestHandler.mm文件主要处理加签和随机随机串的生成,IP的生成等。 微信支付时候必须安装客户端,而且需要给微信服务器传递一个当前机器DNS所分配的IP地址。所以要获取当前的IP地址,payRequsestHandler文件里边都有。 下载完之后会发现payRequsestHandler.mm是MRC的,所以需要修改一下,让它的状态在arc中运行。 TARGETS->Build Phases->Compile Sources下边找到payRequsestHandler.mm文件,然后Flags里边修改成-fno-objc-arc (如果里边没有发现这个mm文件,在sources里边add -> Other添加一下) 然后将即便alloc的aoturelease都改成init,ARC不需要自己自动释放。

XMLHelper *xml  = [[XMLHelperallocinit];

PayReq* req = [[PayReqallocinit];

我这里整理了skd可处理库,下载:http://pan.baidu.com/s/1pJBpz9x

2,然后添加几个系统依赖库:

libc++.dylib

SystemConfiguration.framework

libz.dylib

libsqlite3.0.dylib

完了在工程TARGETS->INFO->URL Types下边添加微信appkey,appke是自己在开放平台申请应用时候微信生成的,每一个应用对应一个appkey,也就是bundle ID。

B9E60331-7EF5-4488-9375-23D3B77AC68A

3,

 

4,在自己要支付的页面viewcontroller.h文件里边:

点击按钮进行支付:

按钮方法:

 

//支付已经完成了,主要是好多细节,看看payRequsestHandler类中怎么分配支付配置的,例如商户ID,商户的KEY,等:

.mm文件里边主要是给微信设置的规则进行遵循,例如:

支付成功返回页面在delegate里边进行判断。

切记在微信开发平台申请应用的Bundle ID和自己工程的Bundle ID必须是相同的。

微信支付是双重加签的,返回的结果是:
99071C72-7FCC-4E4D-91C4-5ED7E729E08D

 

官网列出了微信的支付流程:

商户系统和微信支付系统主要交互说明:

步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。

步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【统一下单API】。

步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay

步骤4:商户APP调起微信支付。api参见本章节【app端开发步骤说明】

步骤5:商户后台接收支付通知。api参见【支付结果通知API】

步骤6:商户后台查询支付结果。,api参见【查询订单API】


1 0
原创粉丝点击