在AppDelegate.m文件里面

1.导入微信的SDK

#import "WXApi.h"

2.声明微信SDK的代理

@interface AppDelegate ()<WXApiDelegate>

3.注册你APP的ID

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window=[[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
   
    [WXApi registerApp:@"这里填你的那一串XXXXX"];

    return YES;
}

4.处理微信支付的结果

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
    if ([url.host isEqualToString:@"pay"]){
        //处理微信的支付结果
            [WXApi handleOpenURL:url delegate:self];
    
    }
    return YES;
}

5.微信SDK自带的方法,处理从微信客户端完成操作后返回程序之后的回调方法,显示支付结果的

//微信SDK自带的方法,处理从微信客户端完成操作后返回程序之后的回调方法,显示支付结果的
-(void) onResp:(BaseResp*)resp
{
    //启动微信支付的response
    NSString *payResoult = [NSString stringWithFormat:@"errcode:%d", resp.errCode];
    if([resp isKindOfClass:[PayResp class]]){
        //支付返回结果,实际支付结果需要去微信服务器端查询
        switch (resp.errCode) {
            case 0:
                payResoult = @"支付结果:成功!";
                NSLog(@"支付结果:成功!");
                break;
            case -1:
                payResoult = @"支付结果:失败!";
                NSLog(@"支付结果:失败!");
                break;
            case -2:
                payResoult = @"用户已经退出支付!";
                NSLog(@"用户已经退出支付!");
                break;
            default:
                payResoult = [NSString stringWithFormat:@"支付结果:失败!retcode = %d, retstr = %@", resp.errCode,resp.errStr];
                break;
        }
        //发出通知
        NSNotification * notification = [NSNotification notificationWithName:@"WXPay" object:payResoult];
        [[NSNotificationCenter defaultCenter] postNotification:notification];
    }
}

在PayViewController.m里面

1.导入微信SDK

#import "WXApi.h"

2.请求数据中,必须要的字段都是后台返回的

  NSDictionary *url = [responseObject objectForKey:@"url"];
                    PayReq *request = [[PayReq alloc]init];
                    request.partnerId = [url objectForKey:@"mch_id"];
                    request.prepayId = [url objectForKey:@"prepay_id"];
                    request.package = [url objectForKey:@"wxpackage"];
                    request.nonceStr = [url objectForKey:@"nonce_str"];
                    request.timeStamp = [[url objectForKey:@"timestamp"] intValue];
                    request.sign = [url objectForKey:@"sign"];
                    [WXApi sendReq: request];
                    if ([WXApi isWXAppInstalled])
                    {
                        //监听通知
                        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getOrderPayResult:) name:@"WXPay" object:nil];
                    }else{
                        [self mbShowToast:@"请先安装微信"];
                    }

3.事件

- (void)getOrderPayResult:(NSNotification *)notification
{
    NSLog(@"userInfo: %@",notification.userInfo);
    
    if ([notification.object isEqualToString:@"支付结果:成功!"])
    {
        self.hideBackBtn=NO;
        if (self.block) {
            self.block();
        }
        [self goBack];
    }
    else if([notification.object isEqualToString:@"用户已经退出支付!"])
    {
        [self mbShowToast:@"支付取消"];
        
    }
    else
    {
        [self mbShowToast:@"支付失败"];
    }
}

4.移除通知

-(void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:YES];
    [[NSNotificationCenter defaultCenter]removeObserver:self];
 
}

还有一点就是在-----工程-----info-----URL Types里面

还有在info.plist文件里面

👌

 

posted on 2018-03-05 11:30  兰歌er  阅读(166)  评论(0编辑  收藏  举报