iOS--微信支付
iOS--微信支付
指尖流年 发表于5个月前
iOS--微信支付
  • 发表于 5个月前
  • 阅读 37
  • 收藏 1
  • 点赞 1
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

不多说,直接上代码

一.集成微信

1 使用Cocopods 导入SDK,pod 'WechatOpenSDK'

2.设置URL Scheme,APPID,如图

3.在info里配置http网络请求和微信白名单,如图

二.项目代码

在AppDelegate.m里面:头文件#import "WXApi.h"//微信授权,遵守协议WXApiDelegate,注册微信

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

[WXApi registerApp:UIWeiXin_APPKEY];

}

//微信回调

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

{

//友盟分享    

BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url sourceApplication:sourceApplication annotation:annotation];

    if (result == FALSE) {

        //调用其他SDK,例如支付宝SDK等

            //微信支付

               [WXApi handleOpenURL:url delegate:(id<WXApiDelegate>)self];

               return YES;

    }

    return result;

}



// 这个方法是用于从微信返回第三方App

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

{

    return [WXApi handleOpenURL:url delegate:(id<WXApiDelegate>)self];

}

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(nonnull NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options

{

    return [self handleOpenURL:url];

}



-(BOOL) handleOpenURL:(NSURL *)url

{

   //微信

    if([url.description hasPrefix:UIWeiXin_APPKEY]){

        return [WXApi handleOpenURL:url delegate:(id<WXApiDelegate>)self];

     }else{

      //友盟

        return [[UMSocialManager defaultManager] handleOpenURL:url];

    }

}

//微信回调

- (void)onResp:(BaseResp *)resp {

    // 向微信请求授权后,得到响应结果----微信登录,可忽略

    if ([resp isKindOfClass:[SendAuthResp class]]) {

           SendAuthResp *temp = (SendAuthResp *)resp;  

        if((resp.errCode == 0)){//确认授权时调用

        [self getWXUserInfo:temp.code WithBaseRespErrorCode:resp.errCode];

          }else{        }

    }else if ([resp isKindOfClass:[PayResp class]]){//微信支付

            //启动微信支付的response

        NSString *payResoult = [NSString stringWithFormat:@"errcode:%d", resp.errCode];

        //支付返回结果,实际支付结果需要去微信服务器端查询

        switch (resp.errCode) {

            case 0:

                payResoult = @"支付结果:成功!";

                break;

            case -1:

                payResoult = @"支付结果:失败!";

                break;

            case -2:

                payResoult = @"用户已经退出支付!";

                break;

            default:

          payResoult = [NSString stringWithFormat:@"支付结果:失败!retcode = %d, retstr = %@", resp.errCode,resp.errStr];

            break;

        }

    }

}

在Controller中

-(void)pay:(UIButton *)sender

{

  [[HTTPRequest sharedInstance] GET:url parameters:param succeed:^(id responseObject) {

NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];

            if([dict[@"code"] isEqualToString:@"200"]){

            //微信支付调用

                [self WXWithDict:dict];       

           }

        } failure:^(NSError *error) {

            NSLog(@"error:%@",error);

              }];

}

-(void)WXWithDict:(NSDictionary *)dict

{    //需要创建这个支付对象

    PayReq *req   = [[PayReq alloc] init];

    // 商家id,在注册的时候给的

    req.partnerId = dict[@"partnerid"];

     // 预支付订单这个是后台跟微信服务器交互后,微信服务器传给你们服务器的,你们服务器再传给你

    req.prepayId  = dict[@"prepayid"];

     // 根据财付通文档填写的数据和签名

    //这个比较特殊,是固定的,只能是即req.package = Sign=WXPay

    req.package  = dict[@"package"];

       // 随机编码,为了防止重复的,在后台生成

    req.nonceStr  = dict[@"noncestr"];

       // 这个是时间戳,也是在后台生成的,为了验证支付的

    NSString * stamp = dict[@"timestamp"];

    req.timeStamp = stamp.intValue;

       // 这个签名也是后台做的

    req.sign = dict[@"sign"];

    NSLog(@"req--partnerId:%@,prepayId:%@,package:%@,nonceStr:%@,timeStamp:%d,sign:%@",req.partnerId,req.prepayId,req.package,req.nonceStr,req.timeStamp,req.sign);

    

    //发送请求到微信,等待微信返回onResp

    [WXApi sendReq:req];

}

注:后台返回的dict 中字段必须小写,如图

 

标签: ios 微信支付
共有 人打赏支持
粉丝 4
博文 48
码字总数 19224
×
指尖流年
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: