ios-微信支付登录分享-notification通知
//
// AppDelegate.m
// NewAppBase
//
// Created by ENERGY on 2018/5/17.
// Copyright © 2018年 ENERGY. All rights reserved.
//
#import "AppDelegate.h"
#import "MainViewController.h"
#import "WXApi.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[WXApi registerApp:@"wxb853e68c5a22a756"];
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.backgroundColor = [UIColor whiteColor];
MainViewController * mainVC = [[MainViewController alloc] init];
[self.window setRootViewController:mainVC];
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
- (void)applicationWillTerminate:(UIApplication *)application {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(nonnull NSURL *)url{
return [WXApi handleOpenURL:url delegate:self];
}
- (BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(nonnull id)annotation{
return [WXApi handleOpenURL:url delegate:self];
}
- (BOOL)application:(UIApplication *)app openURL:(nonnull NSURL *)url options:(nonnull NSDictionary *)options{
[WXApi handleOpenURL:url delegate:self];
return YES;
}
-(void) onReq:(BaseReq*)req{
if ([req isKindOfClass:[GetMessageFromWXReq class]]) {
//微信终端向第三方程序请求提供内容的消息结构体
// if (self.wxDelegate
// && [self.wxDelegate respondsToSelector:@selector(WXApiUtilsDidRecvGetMessageReq:)]) {
// GetMessageFromWXReq *getMessageReq = (GetMessageFromWXReq *)req;
// [self.wxDelegate WXApiUtilsDidRecvGetMessageReq:getMessageReq];
// }
} else if ([req isKindOfClass:[ShowMessageFromWXReq class]]) {
//微信通知第三方程序,要求第三方程序显示的消息结构体
// if (self.wxDelegate
// && [self.wxDelegate respondsToSelector:@selector(WXApiUtilsDidRecvShowMessageReq:)]) {
// ShowMessageFromWXReq *showMessageReq = (ShowMessageFromWXReq *)req;
// [self.wxDelegate WXApiUtilsDidRecvShowMessageReq:showMessageReq];
// }
} else if ([req isKindOfClass:[LaunchFromWXReq class]]) {
//微信终端打开第三方程序携带的消息结构体
// if (self.wxDelegate
// && [self.wxDelegate respondsToSelector:@selector(WXApiUtilsDidRecvLaunchFromWXReq:)]) {
// LaunchFromWXReq *launchReq = (LaunchFromWXReq *)req;
// [self.wxDelegate WXApiUtilsDidRecvLaunchFromWXReq:launchReq];
// }
}
}
- (void)onResp:(BaseResp *)resp{
NSLog(@"resp:%d", resp.errCode);
if ([resp isKindOfClass:[SendMessageToWXResp class]]) {
SendMessageToWXResp *sendResp = (SendMessageToWXResp *)resp;
NSString *str = [NSString stringWithFormat:@"%d",sendResp.errCode];
UIAlertView *alertview = [[UIAlertView alloc] initWithTitle:@"回调信息" message:str delegate:self cancelButtonTitle:@"确认" otherButtonTitles:nil, nil];
[alertview show];
}
if ([resp isKindOfClass:[SendAuthResp class]]) {
SendAuthResp * rep = (SendAuthResp *)resp;
if (rep.errCode == 0) {
[[NSNotificationCenter defaultCenter] postNotificationName:WXAuthorizationSuccess object:@{@"code":rep.code}];
}
}
if([resp isKindOfClass:[PayResp class]]){
//支付返回结果,实际支付结果需要去微信服务器端查询
NSString *payResoult = [NSString stringWithFormat:@"errcode:%d", resp.errCode];
switch (resp.errCode) {
case 0:
{
payResoult = @"支付结果:成功!";
NSDictionary *dict =@{@"key":@"2"};
NSNotification *notification =[NSNotification notificationWithName:@"支付成功success" object:nil userInfo:dict];
[[NSNotificationCenter defaultCenter] postNotification:notification];
}
break;
case -1:
payResoult = @"支付结果:失败!";
break;
case -2:
{
payResoult = @"用户已经退出支付!";
}
break;
default:
payResoult = [NSString stringWithFormat:@"支付结果:失败!retcode = %d, retstr = %@", resp.errCode,resp.errStr];
break;
}
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"支付结果" message:payResoult delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
}
}
//
// FirstViewController.m
// NewAppBase
//
// Created by ENERGY on 2018/5/17.
// Copyright © 2018年 ENERGY. All rights reserved.
//
#import "FirstViewController.h"
#import "OneOneViewController.h"
#import "WXApi.h"
@interface FirstViewController()
@property (nonatomic, strong)UIButton * skipBtn;
@property (nonatomic, strong)UIButton * wxLoginBtn;
@property (nonatomic, strong)UIButton * wxShareBtn;
@property (nonatomic, strong)NSString * wxLoginCode;
@end
@implementation FirstViewController(networking)
- (void)reportWXLoginCode{
NSDictionary * dic = @{@"code":self.wxLoginCode};
[[AFAppDotNetAPIClient sharedClient] POST:@"http://test.wingfac.com/tourism/home/Wxtest/login" parameters:dic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
}
@end
@implementation FirstViewController
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
}
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.skipBtn];
[self.view addSubview:self.wxLoginBtn];
[self.view addSubview:self.wxShareBtn];
//微信登录
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(WXLogin:) name:WXAuthorizationSuccess object:nil];
//微信支付
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(paySuccess:) name:@"支付成功success" object:nil];
}
- (UIButton *)skipBtn{
if (!_skipBtn) {
_skipBtn = [[UIButton alloc] init];
[_skipBtn setTitle:@"下一页" forState:UIControlStateNormal];
// [_skipBtn setImage:[UIImage imageNamed:@"tab_bofang"] forState:UIControlStateNormal];
[_skipBtn addTarget:self action:@selector(skipBtnClick) forControlEvents:UIControlEventTouchUpInside];
[_skipBtn setBackgroundColor:[UIColor blackColor]];
[_skipBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
_skipBtn.layer.cornerRadius = 6;
_skipBtn.layer.masksToBounds = YES;
_skipBtn.frame = CGRectMake(10/WIDTH_5S_SCALE, 10/WIDTH_5S_SCALE, 65/WIDTH_5S_SCALE, 20/WIDTH_5S_SCALE);
}
return _skipBtn;
}
- (UIButton *)wxLoginBtn{
if (!_wxLoginBtn) {
_wxLoginBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.skipBtn.left, self.skipBtn.bottom + 10/WIDTH_5S_SCALE, 30/WIDTH_5S_SCALE, 30/WIDTH_5S_SCALE)];
[_wxLoginBtn setImage:[UIImage imageNamed:@"Wechat"] forState:UIControlStateNormal];
[_wxLoginBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
_wxLoginBtn.layer.cornerRadius = 6;
_wxLoginBtn.layer.masksToBounds = YES;
[_wxLoginBtn addTarget:self action:@selector(wxLoginBtnClick) forControlEvents:UIControlEventTouchUpInside];
}
return _wxLoginBtn;
}
- (UIButton *)wxShareBtn{
if (!_wxShareBtn) {
_wxShareBtn = [[UIButton alloc] initWithFrame:CGRectMake(self.skipBtn.left, self.wxLoginBtn.bottom + 10/WIDTH_5S_SCALE, 70/WIDTH_5S_SCALE, 30/WIDTH_5S_SCALE)];
[_wxShareBtn setTitle:@"微信分享" forState:UIControlStateNormal];
[_wxShareBtn setBackgroundColor:getColor(@"dcdcdc")];
[_wxShareBtn setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];
_wxShareBtn.titleLabel.font = [UIFont systemFontOfSize:14.0];
[_wxShareBtn addTarget:self action:@selector(wxShareBtnClick:) forControlEvents:UIControlEventTouchUpInside];
}
return _wxShareBtn;
}
- (void)skipBtnClick{
OneOneViewController * vc = [[OneOneViewController alloc] init];
vc.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:vc animated:YES];
}
#pragma mark - action
//分享
- (void)wxShareBtnClick:(UIButton *)sender{
NSLog(@"微信分享");
//创建发送对象实例
SendMessageToWXReq *sendReq = [[SendMessageToWXReq alloc] init];
sendReq.bText = NO;//不使用文本信息
sendReq.scene = 1;//0 = 好友列表 1 = 朋友圈 2 = 收藏
//创建分享内容对象
WXMediaMessage *urlMessage = [WXMediaMessage message];
urlMessage.title = @"aaa";//分享标题
urlMessage.description = @"bbb";//分享描述
[urlMessage setThumbImage:[UIImage imageNamed:@"testImg"]];//分享图片,使用SDK的setThumbImage方法可压缩图片大小
//创建多媒体对象
WXWebpageObject *webObj = [WXWebpageObject object];
webObj.webpageUrl = @"https://link.jianshu.com/?t=https://itunes.apple.com/us/app/hi-tian-qi/id1146330042?mt=8";//分享链接
//完成发送对象实例
urlMessage.mediaObject = webObj;
sendReq.message = urlMessage;
//发送分享信息
[WXApi sendReq:sendReq];
}
//登录
- (void)wxLoginBtnClick{
NSLog(@"微信登录");
if ([WXApi isWXAppInstalled]) {
SendAuthReq * request = [[SendAuthReq alloc] init];
//request.openID == @0;
request.state = @"wx_oauth2_authorization_state";
request.scope = @"snsapi_userinfo";
[WXApi sendReq:request];
}
}
//微信登录
- (void)WXLogin:(NSNotification *)notification{
NSDictionary * dic = notification.object;
self.wxLoginCode = dic[@"code"];
[self reportWXLoginCode];
}
//微信支付
- (void)paySuccess:(NSNotification *)notification{
NSLog(@"成功");
NSDictionary * dic = notification.userInfo;
NSString * mark = dic[@"key"];
NSLog(@"%@", mark);
}
- (void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
@end
作者:林肯的红豆
链接:https://www.jianshu.com/p/6d2a106b3206
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
ios-微信支付登录分享-notification通知的更多相关文章
- 【微信支付】分享一个失败的案例 跨域405(Method Not Allowed)问题 关于IM的一些思考与实践 基于WebSocketSharp 的IM 简单实现 【css3】旋转倒计时 【Html5】-- 塔台管制 H5情景意识 --飞机 谈谈转行
[微信支付]分享一个失败的案例 2018-06-04 08:24 by stoneniqiu, 2744 阅读, 29 评论, 收藏, 编辑 这个项目是去年做的,开始客户还在推广,几个月后发现服务器已 ...
- iOS微信支付集成
概述 iOS微信支付集成 详细 代码下载:http://www.demodashi.com/demo/10735.html 支付宝和微信都是业界的老大哥,相信大家都有所觉得文档.SDK都是各种坑吧(纯 ...
- iOS微信第三方登录实现
iOS微信第三方登录实现 一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统.在进行微信OAuth2.0授权登录接入之前,在微信开 ...
- iOS 微信支付SDK与微信友盟分享两者同时集成时,出现的问题与解决之路。
这两天改版一个旧的APP,要旧貌换新颜,拿到app后进行编译,一直报下面的错误. 报不认识的符号名PayReq错误.奇怪,啥也没动就这样,真不知道给的包是不是本来就是个报错的工程. 不管怎样,要对它修 ...
- iOS 微信支付总结
1.支付流程 https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_3 商户系统和微信支付系统主要交互说明: 步骤1:用户在商户APP中选择 ...
- iOS 微信支付
相关资料 SDK下载:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1 APP端开发步骤说明:https://pay.weixin ...
- iOS微信支付
SDK接入 服务器签名版本 官方已经是建议使用服务器签名来接入微信支付,实际上从安全上考虑,确实是每个客户端不应该知道RAS密钥,也不需要每个客户端都写一遍签名的算法. 服务端接入流程文档:https ...
- ios微信支付成功后点击左上角返回不走回调的问题
最近做微信支付发现ios9以后出现的跳转其他app后左上角有返回xxx功能会影响微信支付回调,情况如图 返回后不走下面的方法 - (BOOL)application:(UIApplication *) ...
- iOS 微信支付流程详解
背景 自微信支付.支付宝支付入世以来,移动端的支付日渐火热.虚拟货币有取代实体货币的趋向(这句纯属扯淡,不用管),支付在app开发中是一项基本的功能,有必要去掌握.从难易程度上讲,不管是微信支付还是支 ...
随机推荐
- 【SQL Server备份恢复】维护计划实现备份:每周数据库完整备份、每天差异备份、每小时日志备份
在数据库管理中,数据库备份是非常重要的. 通过维护计划向导,可以很方便的完成数据库备份. 下面的例子说明了如何实现数据库的备份,具体的备份策略是:每周日一次完整备份.每天差异备份(除周日外).每小时日 ...
- android ------- 开发者的 RxJava 详解
在正文开始之前的最后,放上 GitHub 链接和引入依赖的 gradle 代码: Github: https://github.com/ReactiveX/RxJava https://github. ...
- Matlab:导数边界值的有限元(Galerkin)法
tic; % this method is transform from Galerkin method %also call it as finit method %is used for solv ...
- springcloud-Eureka-服务注册与发现核心组件
Eureka组件 Eureka是Netfilx开源的服务发现组件,本身是一个基于rest的服务,它包含client和server两部分. Spirng Cloud将它集成在子项目Spirng Clou ...
- 在 NLTK 中使用 Stanford NLP 工具包
转载自:http://www.zmonster.me/2016/06/08/use-stanford-nlp-package-in-nltk.html 目录 NLTK 与 Stanford NLP 安 ...
- 在python程序中的进程操作
multiprocess模块 multiprocess不是一个模块而是python中一个操作.管理进程的包. 之所以叫multi是取自multiple的多功能的意思,在这个包中几乎包含了和进程有关的所 ...
- day38-多进程多线程-进程池
强大的Manage上一篇的数据共享的方式只有两种结构Value和Array.Python中提供了强大的Manage专门用来做数据共享的,其支持的类型非常多,包括,Value, Array,list,d ...
- python全栈开发笔记----基本数据类型---列表方法
#list 类中提供的方法 #参数 1.def append(self, *args, **kwargs)原来值最后追加#对象..方法(..) #li对象调用append方法 li = [11,22, ...
- 关于空指针NULL、野指针、通用指针 (转)
reference:https://www.cnblogs.com/losesea/archive/2012/11/16/2772590.html 首先说一下什么是指针,只要明白了指针的含义,你就明白 ...
- Jsの练习-数组常用方法 -splice()
splice() 功能:1.可以实现删除,插入和替换. 删除:可以删除任意数量的项,只需指定2个参数:要删除的第一项的位置和要删除的项数. 例如:splice(0,2)会删除数组中的前2项. 插入:可 ...