V2版本和V3版本存在很大的差异。
1. 从成功通过微信支付商户的资料审核返回的邮件开始:
你可以获得这些参数 appid,appSecret,partnerID, partnerKey(从平台上获得) 。
在v3中你获得不到v2所谓的“paySignKey”,--------- 这个把我害残了。当然在v3你真的不需要这个参数了。
2.在做微信支付的时候你要抛弃v2版本的做法,你不需要获得access_token,你不需要用sha1加密。我就是结合v2去做,然后越陷越深。
3. 首先我在做支付之前集成了shareSDK,因为里面有微信的sdk,然后就用sharesdk中的wxSDK了
4.在appdelegate.m中做些东西,这个就不罗嗦了。但要留意下
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
这个方法,等下要用到。
5.打开微信的开放平台:http://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_1 , 记得一定要抛弃v2版本的思想,跟着“文档”走,因为这是最官方的了。
不得不承认这个文档有点渣。但大体步骤还是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