ios微信支付 v3

V2版本和V3版本存在很大的差别。php

1. 从成功经过微信支付商户的资料审核返回的邮件开始:算法

你能够得到这些参数  appid,appSecret,partnerID,    partnerKey(从平台上得到) 。api

在v3中你得到不到v2所谓的“paySignKey”,--------- 这个把我害残了。固然在v3你真的不须要这个参数了。微信

2.在作微信支付的时候你要抛弃v2版本的作法,你不须要得到access_token,你不须要用sha1加密。我就是结合v2去作,而后越陷越深。app

3. 首先我在作支付以前集成了shareSDK,由于里面有微信的sdk,而后就用sharesdk中的wxSDK了post

4.在appdelegate.m中作些东西,这个就不罗嗦了。但要留意下微信支付

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation 

加密

这个方法,等下要用到。url

5.打开微信的开放平台:http://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_1 , 记得必定要抛弃v2版本的思想,跟着“文档”走,由于这是最官方的了。spa

不得不认可这个文档有点渣。但大致步骤仍是ok的。

6. 用统一下单的api生成预支付单,获取prepay_id.  根据文档的api以及相应的api必传参数  

去作,这样才能得到prepay_id。

注意:

1. 签名生成算法 根据文档来,注意要md5后 转化为  大写

2.发送post 请求的时候,参数不是NSDictionary,而是xml格式  

,记得把NSDictionay 转化为文档上的xml格式。

NSURL *url = [NSURL URLWithString:strUrl];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setValue:@"application/xml" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/xml" forHTTPHeaderField:@"Accept"];
[request setHTTPBody:[xml dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPMethod:@"POST"];

3. 而后解析返回的数据。获取prepay_id.

7. 构造支付请求。

8. 接收返回的响应。但在这里我又遇到了一个坑。就是我在本身的 WXPayEngine.m 设置微信的delegate,实现

- (void)onResp:(BaseResp *)resp ,能够当我去真正run的时候,这个东西就没被调用。而后我想在appdelegate.m 实现这个方法,但仍是不被鸟。    ???why

我太想固然了。

记得在4中我说咱们会用到的

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation 

你就会发现缘由了, 一直返回的都是no,而后就没调用你的delegate了 。可是我并不care这个no,这个delegate。

我只关注这个url 。 

打印这个url,你会神奇 的发现这里有你想要的东西。这里我就不作在多解释了。你能够根据这个url作你要的逻辑:支付是否成功。

 

that‘s all ,thaks to read

相关文章
相关标签/搜索