前言
昨天写了一篇支付宝的封装,今年就把之前写的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
(注意检查参数!!!)