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