大概說一下流程重抖。
1.去微信開放平臺注冊應(yīng)用票编。https://open.weixin.qq.com/(大概需要5天左右才能通過玫锋。)
2.應(yīng)用審批后進一步去獲得支付能力。(需要提供營業(yè)資格垦江,法人或者負責人的身份證以及開戶許可證,如果應(yīng)用沒有上線需要上傳應(yīng)用截圖搅方,具體的截圖根據(jù)指示即可比吭。)
3.微信審核后會在第二步提供的銀行卡賬戶扣除小額不等的money绽族,然后會把商戶號、密碼等等一些重要的信息發(fā)到提供的郵箱里衩藤。
4.登錄微信商戶平臺吧慢。https://pay.weixin.qq.com/ 在商戶平臺里安裝證書,配置一個秘鑰(Key
必須是32
位的赏表,服務(wù)器簽名要用)娄蔼。
簽名建議放在后端,前端不存放私鑰底哗。
1.配置QueriesSchemes
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
<string>wechat</string>
</array>
2.配置URL Types.
工程 --- 》 Targets
---->info
---->URL Types
,填寫在微信中申請的應(yīng)用id岁诉。(跳轉(zhuǎn)需要)
3.常用依賴庫的添加。
4.如果項目跑不起來跋选,報錯需要設(shè)置bitcode
為NO
涕癣,那么設(shè)置即可。
前面的配置如果配置好前标,
//注冊微信支付信息
第一步注冊
[WeiXinPayTool RegistApp];
第二步設(shè)置好跳轉(zhuǎn)
#pragma mark - IOS9.0以后廢棄了這兩個方法的調(diào)用
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
//微信處理
if ([[WeiXinPayTool shareTool] handleOpenURL:url]) {
return YES;
}
return YES;
}
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
//微信處理
if ([[WeiXinPayTool shareTool] handleOpenURL:url]) {
return YES;
}
return YES;
}
接下來只需要調(diào)用拿到后臺傳的一些參數(shù)(比如appid坠韩,partnerid,prepayid炼列,package只搁,noncestr
等,微信支付需要的參數(shù))調(diào)起微信支付即可俭尖。
如果sendReq
為NO氢惋,可能是簽名不對,或者是參數(shù)有誤稽犁。
NSMutableString *stamp = [programs objectForKey:@"timestamp"];
//調(diào)起微信支付
PayReq* req = [[PayReq alloc] init];
req.partnerId = [programs objectForKey:@"partnerid"];
req.prepayId = [programs objectForKey:@"prepayid"];
req.nonceStr = [programs objectForKey:@"noncestr"];
req.timeStamp = [stamp intValue];
req.package = [programs objectForKey:@"package"];
req.sign = [programs objectForKey:@"sign"];
if (![WXApi isWXAppInstalled]) {
self.failed(ErrorCodeWXAppNotInstalled);
}
BOOL isSuccess = [WXApi sendReq:req];
NSLog(@"%d",isSuccess);
正常支付和取消支付都會走下面的回調(diào)焰望。
- (void)onResp:(BaseResp *)resp{
if([resp isKindOfClass:[PayResp class]]){
//支付返回結(jié)果,實際支付結(jié)果需要去微信服務(wù)器端查詢
NSLog(@"%@",resp);
switch (resp.errCode) {
case WXSuccess:{
if (self.success) {
self.success();
}
}
break;
case WXErrCodeCommon:{
self.failed(ErrorCodeWxPayError);
}
break;
case WXErrCodeUserCancel:{
self.failed(ErrorCodeWxPayCancle);
}
break;
default:
break;
}
}
}
關(guān)于iOS9 之后應(yīng)用左上角的返回按鈕對微信支付的影響
iOS 9
之后為了方便應(yīng)用之間跳轉(zhuǎn)已亥,系統(tǒng)增加了左上角的返回按鈕熊赖。可是在微信支付時虑椎,中途點擊了左上角的返回按鈕震鹉,此時我們就拿不到微信的回調(diào)。
我們需要的就是在下面兩個方法里面其中一個方法里面發(fā)送通知捆姜,然后在通知頁面調(diào)用微信的接口查詢訂單通知传趾。如果生成的訂單參數(shù)都是后臺來負責簽名的,查詢訂單也可以由后臺來做娇未,我們只需要傳一個微信訂單號(transaction_id
)即可墨缘。
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
發(fā)送通知星虹,在通知頁面查詢微信的支付訂單
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}