微信支付,我大部分参考的是在 code4app找的demo。感谢作者。www.code4app.com/ios/支付宝和微信支付两种方式集成/568e1c0fb5ad2e73288b4c0f
有很多可能多余的步骤。
参考微信官方文档微信开放平台
1 先下载 微信SDK。放在一个文件夹下,然后拖进工程里。在 Build Phases加上所需要的系统库,SystemConfiguration.framework,libz.dylib,libsqlite3.0.dylib,libc++.dylib。
2 在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序id(就是申请的 APP ID)
![](https://img.haomeiwen.com/i1644182/de7ebaec94250303.jpg)
3 开始支付
1)在AppDlegate 里面注册你的应用。在你需要使 用微信终端API的文件中import WXApi.h 头文件,并增加 WXApiDelegate 协议。
![](https://img.haomeiwen.com/i1644182/314b35c0327f5830.jpg)
2)重写AppDelegate的handleOpenURL和openURL方法:
![](https://img.haomeiwen.com/i1644182/26d54650d7159979.jpg)
![](https://img.haomeiwen.com/i1644182/b1cc9e9a3557c80b.jpg)
3)微信支付 然后按照 demo上来就可以调起微信客户端支付了(下面多摘自demo)
①、统一下单
【微信支付】APP支付开发者文档 ->API列表->统一下单 按照文档要求appid,mch_id,nonce_str,sign,body,out_trade_no,total_fee,spbill_create_ip,notify_url,trade_type这十个参数是必须的。
其中appid,mch_id是微信给的;trade_type传定值APP;nonce_str,spbill_create_ip是直接在手机上获取到的;body,out_trade_no,total_fee这三个是从服务端上获取的数据。sign根据以上键值对按照签名规则得到的。
注意
![](https://img.haomeiwen.com/i1644182/e2ccdc9a1c910e5e.jpg)
完成之后要转化成XML格式上传到微信服务器。
第一个比较坑的地方在这,如果直接使用AF的POST方式是不行的,总是会返回"XML格式错误"。必须使用NSMutableURLRequest添加method和body,然后用AFHTTPRequestOperation进行网络请求才行。
![](https://img.haomeiwen.com/i1644182/13bd9a298d927a87.jpg)
然后接收到数据的返回。其中返回数据中有用的只有prepayid,其他的要么本地就有,要么就是恶心你的值。
② 客户端调起支付
【微信支付】APP支付开发者文档 ->API列表->调起支付接口 文档要求appid,partnerid,prepayid,package,noncestr,timestamp,sign这七个参数是必须的,但是DEMO中appid根本没有用到,所以其实只需要六个参数,这是第二个坑爹的地方!!! partnerid就是第一步的mch_id,prepayid是上一步返回的最重要的数据,package传定值Sign=WXPay,noncestr就是上一步中的nonce_str,timestamp这个按照规则生成十位的。
sign是最最最坑的地方,不是上一步返回的那个sign,不是上一步返回的那个sign,不是上一步返回的那个sign。他是根据上面的五个参数进行签名得出的值。不然每次调用就只看见微信界面只有一个确定。
对于返回签名错误的,可以对照他们的签名测试工具检验。微信公众平台支付接口调试工具
4)支付结果
⑴(使用的不安全的 客户端直接向微信服务器查询,)在AppDelegate中
![](https://img.haomeiwen.com/i1644182/ddd7a773fbe2a299.jpg)
⑵接收通知的地方
![](https://img.haomeiwen.com/i1644182/f3100cc47eb84192.jpg)
最后,就是这些了。
网友评论