iOS微信的SDK的二次封装 WechatManager-包含授权登录,支付,分享,小程序分享等,最新更新iOS13 微信适配

前言

昨天写了一篇支付宝的封装,今年就把之前写的WechatManager微信SDK封装也拿出来,做个分享吧,本着使用简单,方便,快速的原则,它来了WechatManager。

前情提要,先去pod 微信SDK

 pod 'WechatOpenSDK'

WechatManager

  • 功能介绍
+ (WechatManager *)defaultManager;
/*
 * 获取微信授权后 用户信息 方可使用
 */
@property (nonatomic,strong)NSDictionary * weiXinIfon;

//注册微信sdk
-(void)wechatRegisterApp;
//授权唤醒Wexin
-(void)sendAuthRequest;
//获取微信授权Code回调
-(void)sendAuthRequestComplete:(void (^)(NSString * wechatCode))complete;
//获取微信授权返回用户信息
-(void)openWeChatIdComplete:(void (^)(NSDictionary * wechatUserInfo))complete;
//反回掉代理设置
-(BOOL)new_handleOpenURL:(NSURL *)url;
//制定跳转微信小程序
-(void)open_WXMiniPath:(NSString *)path userName:(NSString *)userName;
#pragma mark - 打开微信网页
-(void)open_WechatWebWithUrl:(NSString *)url;
#pragma mark - 打开微信
-(void)open_Wechat;
#pragma mark - 微信支付
-(void)wechat_pay:(WechatPayModel *)model;
//=============== 私有方法 示例==============
//商户端小程序id
-(void)open_WXMiniShopId:(NSString *)shopId;
//跳到微信小程序
-(void)open_WXMiniRegBusiness;
//跳到 微信公众号
-(void)open_WXBizProfileRegBusiness;
//市场推广 小程序
-(void)open_wXMiniMarketing;
//分享二维码到微信
-(void)share_WXpicWithImag:(UIImage *)image;

//分享微信小程序到详情页
-(void)share_WXMiniGoodsId:(NSString *)goodsId
                    traderId:(NSString *)traderId
                    goodsName:(NSString *)name
               description:(NSString *)description
                 thumImage:(NSString *)thumImage;
//分享微信小程序
-(void)share_WXMiniTraderId:(NSString *)traderId
                  goodsName:(NSString *)name
                description:(NSString *)description
                  thumImage:(NSString *)thumImage;

appId 与AppSecret 配置 在WechatManager.m的 init里,初始化一次即可

//配置
-(id)init{
    if (self = [super init]) {
        WXAPPid = @"";
        WXAppSecret = @"";
    }
    return self;
}

微信在appdelegate里 代理回调

#pragma mark - 系统回掉
 //支持所有iOS系统
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    if ([url.host isEqualToString:@"oauth"]){//微信登录
        return [[WechatManager defaultManager] new_handleOpenURL:url];
    }
    return YES;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
{
    if ([url.host isEqualToString:@"oauth"]){//微信登录
        return [[WechatManager defaultManager] new_handleOpenURL:url];
    }
    return YES;
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    if ([url.host isEqualToString:@"oauth"]){//微信登录
        return [[WechatManager defaultManager] new_handleOpenURL:url];
    }
    return YES;
}

初始化 WechatManager

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

        [[WechatManager defaultManager] wechatRegisterApp];

    return YES;
}

使用示例:

 GSLog(@"微信登录");
 [[WechatManager defaultManager] openWeChatIdComplete:^(NSDictionary *wechatUserInfo) {
                   GSLog(@"微信授权回调%@ openId:%@",wechatUserInfo,[wechatUserInfo objectForKey:@"openId"]);
               }];

//市场推广小程序
-(void)open_wXMiniMarketing{
    [self open_WXMiniPath:[NSString stringWithFormat:@"pages/logining/logining"] userName:@"gh_4db0fa077000" miniProgramType:0];
}
//跳到微信小程序商户端
-(void)open_WXMiniShopId:(NSString *)shopId{
    [self open_WXMiniPath:[NSString stringWithFormat:@"/pages/index/index?id=%@",shopId] userName:@"gh_8a4165306efd"];
}
//跳到微信小程序工商注册
-(void)open_WXMiniRegBusiness{
    [self open_WXMiniPath:[NSString stringWithFormat:@"pages/phoneVerification/phoneVerifi?id=1"] userName:@"gh_33eee0551e01" miniProgramType:0];
}
//跳到 爷爷网微信公众号 工商注册
-(void)open_WXBizProfileRegBusiness{
    [self open_WXJumpToBizProfile];
}
//分享微信小程序商户端
-(void)share_WXMiniGoodsId:(NSString *)goodsId
                  traderId:(NSString *)traderId
                 goodsName:(NSString *)name
               description:(NSString *)description
                 thumImage:(NSString *)thumImage
{
  [self share_WXMiniPath:[NSString stringWithFormat:@"/pages/details/details?id=%@&traderId=%@",goodsId,traderId] userName:@"gh_8a4165306efd" miniProgramType:2 msgTitle:name description:description thumImage:thumImage];
//    [GSUMShare shareMiniwithPath:[NSString stringWithFormat:@"/pages/details/details?id=%@&traderId=%@",goodsId,traderId] userName:@"gh_8a4165306efd" miniProgramType:2 msgTitle:name description:description thumImage:thumImage];
}

-(void)share_WXMiniTraderId:(NSString *)traderId
                 goodsName:(NSString *)name
               description:(NSString *)description
                  thumImage:(NSString *)thumImage
{
        [self share_WXMiniPath:[NSString stringWithFormat:@"/pages/index/index?id=%@",traderId] userName:@"gh_8a4165306efd" miniProgramType:2 msgTitle:name description:description thumImage:thumImage];
//    [GSUMShare shareMiniwithPath:[NSString stringWithFormat:@"/pages/index/index?id=%@",traderId] userName:@"gh_8a4165306efd" miniProgramType:2 msgTitle:name description:description thumImage:thumImage];
}
//分享二维码到微信
-(void)share_WXpicWithImag:(UIImage *)image{
    [self WXSendImage:image withShareScene:0];
}

注: 以上示例拓展性还是很强的,方便定制属于你的微信Api,在使用时,一行代码解决你的问题

WechatManager 码云下载地址 :
https://gitee.com/Gsohnago/WechatManager.git

IOS 13 微信支付踩的坑,整理如下 ,必须升级微信OpenSDK 1.8.6

1401588728138_.pic.jpg

WechatOpenSDK 1.8.6 注意事项

  • 1 代理回调 无响应 注意查看 url.host 如下
 //支持所有iOS系统
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    if ([url.host isEqualToString:@"pay"]||[url.host isEqualToString:@"oauth"]){//微信登录
        return [[WechatManager defaultManager] new_handleOpenURL:url];
    }
    if ([url.host isEqualToString:@"safepay"]) {
           [[AliPayManager defaultManager] new_processOrderWithPaymentResult:url];

    }
//    BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url sourceApplication:sourceApplication annotation:annotation];
    return YES;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
{
    if ([url.host isEqualToString:@"pay"]||[url.host isEqualToString:@"oauth"]){//微信登录

        return [[WechatManager defaultManager] new_handleOpenURL:url];
    }
    if ([url.host isEqualToString:@"safepay"]) {
         [[AliPayManager defaultManager] new_processOrderWithPaymentResult:url];
    }
    return YES;
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    if ([url.host isEqualToString:@"pay"]||[url.host isEqualToString:@"oauth"]){//微信登录

        return [[WechatManager defaultManager] new_handleOpenURL:url];
    }
    if ([url.host isEqualToString:@"safepay"]) {
        [[AliPayManager defaultManager] new_processOrderWithPaymentResult:url];
    }
//    BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
    return YES;
}
  • 2 向微信发送消息 方法替换
    原来是这样的
    [WXApi sendReq:req];
    现在是这样的
    [WXApi sendReq:req completion:^(BOOL success) {
    if (success == YES) {
    GSLog(@"成功");
    }else{
    GSLog(@"失败");
    }
    }];
WechatManager 中新增了
#pragma mark - 统一通信入口
-(void)sendReq:(id)req{
    [WXApi sendReq:req completion:^(BOOL success) {
        if (success == YES) {
                  GSLog(@"成功");
              }else{
                  GSLog(@"失败");
              }
    }];
}
  • 3 注册方法
    原来
    [WXApi registerApp:@"wxXXXXXXXXXX"];
    现在(这里注意 universalLink :https,否则注册失败)
    [WXApi registerApp:@"wxXXXXXXXXXX" universalLink:@"https://www.XXXXXX.com"];
  • 4 微信支付签名失败
    这里请注意 传参的大小写 如下


    1311588246232_.pic.jpg

对于sign 的签名这里新增里一个校验方法 如下


1601588741621_.pic_hd.jpg

(注意检查参数!!!)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,943评论 0 15
  • 最近接受了一个新的需求,希望制作一个基于微信的英语语音评价页面。即点击录音按钮,用户录音说出预设的英文,根据用户的...
    ReeCode阅读 9,247评论 7 15
  • 如今的应用的开始偏向社交化发展了,以产生粘性,也可以让用户登录进App体验更多的功能,而传统的注册登录的流程就稍显...
    FarmGuo阅读 2,490评论 1 22
  • 前言:本篇文章目的在于梳理知识,巩固思想,学习总结。有什么好的建议,都可以留言。互相促进!总观,微信支付,也没心思...
    麦穗0615阅读 10,087评论 8 70
  • MQTT定义了14种类型的控制消息;MQTT中只规定了整数数据采用大端字节序,所以要注意像【剩余长度(Remain...
    向水一生阅读 654评论 0 0