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