iOS开发微信支付详解(一)

作者: Courage_SC | 来源:发表于2016-04-10 19:56 被阅读342次

    网上看了好多博客文章,与关于微信支付的我拢了拢主要的,可以看看
    这是导入的库和配置的URLType

    1869333-5a26a95263fc5956.png

    一、首先在AppDelegate.m 里

    #import "AppDelegate.h"
    #import "WXApi.h"
    #import "ViewController.h"
    @interface AppDelegate ()
    @end
    @implementation AppDelegate
    

    这里就两行代码注册微信:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    ViewController *viewVC = [[ViewController alloc] init];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewVC];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window setRootViewController:nav];
    // 向微信注册
    BOOL isOk = [WXApi registerApp:@""];
    if (isOk){NSLog(@"注册微信成功");
    }else{NSLog(@"注册微信失败");
    }return YES;
    }
    

    这里的代码就是吊起微信客户端的微信支付功能

    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options
    {
    // 跳转到URL scheme中配置的地址
    NSLog(@"跳转到URL scheme中配置的地址-->%@",url);
    return [WXApi handleOpenURL:url delegate:self];  //WXApiDelegate协议
    }
    

    微信支付结果回调

    - (void)onResp:(BaseResp *)resp
    {
    NSString *strMsg = [NSString stringWithFormat:@"-errcode:%d", resp.errCode];
    NSString *strTitle;
    if([resp isKindOfClass:[SendMessageToWXResp class]])
    {
    strTitle = [NSString stringWithFormat:@"发送媒体消息结果"];
    }
    
    if([resp isKindOfClass:[PayResp class]]){
    #warning 4.支付返回结果,实际支付结果需要去自己的服务器端查询  由于demo的局限性这里直接使用返回的结果
    strTitle = [NSString stringWithFormat:@"支付结果"];
    // 返回码参考:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=9_12
    switch (resp.errCode) {
    case WXSuccess:{
    strMsg = @"支付结果:成功!";
    NSLog(@"支付成功-PaySuccess,retcode = %d", resp.errCode);
    NSNotification *notification = [NSNotification notificationWithName:@"ORDER_PAY_NOTIFICATION" object:@"success"];
    [[NSNotificationCenter defaultCenter] postNotification:notification];
    break;
    }
    
    default:{
    strMsg = [NSString stringWithFormat:@"支付结果:失败!retcode = %d, retstr = %@", resp.errCode,resp.errStr];
    NSLog(@"错误,retcode = %d, retstr = %@", resp.errCode,resp.errStr);
    NSNotification *notification = [NSNotification notificationWithName:@"ORDER_PAY_NOTIFICATION"object:@"fail"];
    [[NSNotificationCenter defaultCenter] postNotification:notification];
    break;
    }
    
    }
    
    }
    
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:strTitle message:strMsg preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *action = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    NSLog(@"知道了");
    }];
    [alert addAction:action];
    [self.window.rootViewController presentViewController:alert animated:YES completion:nil];
    NSLog(@"title = %@ message = %@", strTitle, strMsg);
    }
    

    二、在ViewController.m里面

    #import "ViewController.h"
    #import "WXApi.h"
    @interface ViewController ()
    @end
    @implementation ViewController
    ```
    /**
    *  微信支付需要后台做大量的工作。
    *  SDK及官方Demo下载:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1
    *  官方的开发步骤参考这里:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_5
    *  这篇文档说的也挺详细:http://wenku.baidu.com/link?url=II3oeAaiH9NXWqdoO5HwXWCGcEermreHGBAqKvYfyKz_JVQ2n4NlA56e0H1HJWTNFfUsrTAgjegHBeUpMRzN0S318qcVklep7VCq0wBkpv7
    *  还有这篇:http://www.cocoachina.com/bbs/read.php?tid=303132
    
    ** 移除通知**
    ```
    - (void)dealloc
    {
    [[NSNotificationCenter defaultCenter]removeObserver:self];
    }
    ```
    ** 监听通知**
    ```
    - (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    if([WXApi isWXAppInstalled]) // 判断 用户是否安装微信
    {
    // 监听一个通知
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getOrderPayResult:) name:@"ORDER_PAY_NOTIFICATION" object:nil];
    }
    
    }
    ```
    ```
    - (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.navigationItem.title = @"微信支付";
    UIButton *payButton = [UIButton buttonWithType:UIButtonTypeCustom];
    payButton.frame = CGRectMake(50, 100, self.view.frame.size.width - 100, 60);
    payButton.backgroundColor = [UIColor lightGrayColor];
    [payButton setTitle:@"微信支付" forState:UIControlStateNormal];
    [payButton setImage:[UIImage imageNamed:@"payNow_weixin"] forState:UIControlStateNormal];
    [payButton setImageEdgeInsets:UIEdgeInsetsMake(5, -20, 0, 0)];
    payButton.layer.cornerRadius = 5;
    [payButton addTarget:self action:@selector(weChatPay) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:payButton];
    }
    ```
    **#pragma mark - 微信支付**
    ```
    - (void)weChatPay
    {
    #warning 1.向自己的服务器请求订单生成预支付订单信息
    NSString *string = [NSString stringWithFormat:@""];
    [ZqNetWork getRequestWithURLString:string Parameters:nil RequestHead:nil DataReturnType:DataReturnTypeData SuccessBlock:^(NSData *data) {
    NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
    // 具体参数根据自己后台来,这里不做示范
    // 后台可以参考:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=9_12
    NSDictionary *dict = [resultDic objectForKey:@""];
    if (dict != nil) {
    NSMutableString *stamp  = [dict objectForKey:@""];
    // 生成预支付订单信息
    PayReq *req            = [[PayReq alloc] init];
    req.openID              = [dict objectForKey:@""];
    req.partnerId          = @"";
    req.prepayId            = [dict objectForKey:@""];
    req.nonceStr            = [dict objectForKey:@""];
    req.timeStamp          = stamp.intValue;
    req.package            = [dict objectForKey:@""];
    req.sign                = [dict objectForKey:@""];
    #warning 2.调起微信支付
    if ([WXApi sendReq:req])
    {
    NSLog(@"调起成功!!!!");
    }
    
    else
    {
    NSLog(@"调起失败!!!");
    }
    
    }
    
    } FailureBlock:^(NSError *error) {
    NSLog(@"%@", error);
    }];
    }
    ```
    **#pragma mark - 收到支付成功的消息后作相应的处理**
    ```
    - (void)getOrderPayResult:(NSNotification *)notification
    {
    if ([notification.object isEqualToString:@"success"])
    {
    NSLog(@"支付成功!");
    }
    
    else
    {
    NSLog(@"支付失败!");
    }
    
    }
    ```

    相关文章

      网友评论

        本文标题:iOS开发微信支付详解(一)

        本文链接:https://www.haomeiwen.com/subject/ktoblttx.html