AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 向微信终端程序注册第三方应用 APPID: wxb4ba3c02aa476ea1
[WXApi registerApp:@"wxb4ba3c02aa476ea1" withDescription:@"QWeChatPayDemo 1.0"];
return YES;
}
// 微信支付回调,当用户通过其他应用启动本应用时,会回调这个方法
// NS_DEPRECATED_IOS(2_0, 9_0)
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [WXApi handleOpenURL:url delegate:self];
}
// NS_DEPRECATED_IOS(2_0, 9_0)
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
return [WXApi handleOpenURL:url delegate:self];
}
// NS_AVAILABLE_IOS(9_0) 9.0 以后使用新 API 接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options {
return [WXApi handleOpenURL:url delegate:self];
}
- (void)onResp:(BaseResp *)resp {
if([resp isKindOfClass:[PayResp class]]){
// 支付返回结果,实际支付结果需要去微信服务器端查询
NSString *strMsg;
switch (resp.errCode) {
case WXSuccess:
strMsg = @"支付成功!";
NSLog(@"支付成功:retcode = %d", resp.errCode);
break;
default:
strMsg = [NSString stringWithFormat:@"支付失败!retcode = %d, retstr = %@", resp.errCode, resp.errStr];
NSLog(@"支付失败:retcode = %d, retstr = %@", resp.errCode, resp.errStr);
break;
}
// 显示提示信息
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"支付结果"
message:strMsg
preferredStyle:UIAlertControllerStyleAlert];
[self.window.rootViewController presentViewController:alert
animated:YES
completion:^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[alert dismissViewControllerAnimated:YES completion:nil];
});
}];
}
}
ViewController.m
// 判断是否安装了微信
if (![WXApi isWXAppInstalled]) {
NSLog(@"没有安装微信");
return;
}
// 判断是否支持微信支付
if (![WXApi isWXAppSupportApi]) {
NSLog(@"不支持微信支付");
return;
}
NSMutableDictionary *params = [NSMutableDictionary dictionary];
// 在此设置商户服务端需要的参数
params[WXTOTALFEE] = @"1";
params[WXEQUIPMENTIP] = [self fetchIPAddress];
// 向商户微信支付服务器端请求微信预支付信息
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
[sessionManager POST:QCUrlUserWeChatPay
parameters:params
progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// 解析商户微信支付服务器端返回的数据,获得预支付信息和签名等
NSLog(@"responseObject = %@",responseObject);
if (responseObject != nil) {
// 发起微信支付
PayReq *request = [[PayReq alloc] init];
// 设置参数
request.openID = [responseObject objectForKey:WXAPPID];
request.partnerId = [responseObject objectForKey:WXMCHID];
request.prepayId= [responseObject objectForKey:WXPREPAYID];
request.nonceStr= [responseObject objectForKey:WXNONCESTR];
request.timeStamp= [[responseObject objectForKey:@"timestamp"] intValue];
request.package = @"Sign=WXPay";
request.sign = [responseObject objectForKey:@"sign"];
NSLog(@"%@--%@--%@--%@--%@--%d--%@",request.openID,request.partnerId,request.prepayId,
request.package,request.nonceStr,request.timeStamp,request.sign);
// 调用微信发起支付
[WXApi sendReq:request];
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"向商户微信支付服务器端请求预支付信息失败:%@", error.localizedDescription);
}];