//

//  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通知的更多相关文章

  1. 【微信支付】分享一个失败的案例 跨域405(Method Not Allowed)问题 关于IM的一些思考与实践 基于WebSocketSharp 的IM 简单实现 【css3】旋转倒计时 【Html5】-- 塔台管制 H5情景意识 --飞机 谈谈转行

    [微信支付]分享一个失败的案例 2018-06-04 08:24 by stoneniqiu, 2744 阅读, 29 评论, 收藏, 编辑 这个项目是去年做的,开始客户还在推广,几个月后发现服务器已 ...

  2. iOS微信支付集成

    概述 iOS微信支付集成 详细 代码下载:http://www.demodashi.com/demo/10735.html 支付宝和微信都是业界的老大哥,相信大家都有所觉得文档.SDK都是各种坑吧(纯 ...

  3. iOS微信第三方登录实现

    iOS微信第三方登录实现   一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统.在进行微信OAuth2.0授权登录接入之前,在微信开 ...

  4. iOS 微信支付SDK与微信友盟分享两者同时集成时,出现的问题与解决之路。

    这两天改版一个旧的APP,要旧貌换新颜,拿到app后进行编译,一直报下面的错误. 报不认识的符号名PayReq错误.奇怪,啥也没动就这样,真不知道给的包是不是本来就是个报错的工程. 不管怎样,要对它修 ...

  5. iOS 微信支付总结

    1.支付流程 https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_3 商户系统和微信支付系统主要交互说明: 步骤1:用户在商户APP中选择 ...

  6. iOS 微信支付

    相关资料 SDK下载:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1 APP端开发步骤说明:https://pay.weixin ...

  7. iOS微信支付

    SDK接入 服务器签名版本 官方已经是建议使用服务器签名来接入微信支付,实际上从安全上考虑,确实是每个客户端不应该知道RAS密钥,也不需要每个客户端都写一遍签名的算法. 服务端接入流程文档:https ...

  8. ios微信支付成功后点击左上角返回不走回调的问题

    最近做微信支付发现ios9以后出现的跳转其他app后左上角有返回xxx功能会影响微信支付回调,情况如图 返回后不走下面的方法 - (BOOL)application:(UIApplication *) ...

  9. iOS 微信支付流程详解

    背景 自微信支付.支付宝支付入世以来,移动端的支付日渐火热.虚拟货币有取代实体货币的趋向(这句纯属扯淡,不用管),支付在app开发中是一项基本的功能,有必要去掌握.从难易程度上讲,不管是微信支付还是支 ...

随机推荐

  1. CAM(Content Addressable Memory)介绍

    CAM是一种特殊的存储器.所谓CAM,即内容寻址存储器.CAM存储器在其每个存储单元都包含了一个内嵌的比较逻辑,写入CAM的数据会和其内部存储的每一个数据进行比较,并返回与端口数据相同的所有内部数据的 ...

  2. android -------- 获取手机设备信息

    最近在开发中,需要用到一些系统信息,总结了一下 /** * Created by zhangqie on 2019/2/26 * Describe: 系统工具类 */ public class Equ ...

  3. 【Mybatis】【1】generate批量生成实体类,数据库接口类和mapper

    前言: 1,实体类之类如果自己写的话,比较繁琐,还容易出错,所以用generate自动生成 2,int类型可能会生成为short类型,建议不要手动改回int类.因为下次生成又是short类型了,可能会 ...

  4. Django框架(三)

    六.Django的视图层 视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML ...

  5. python操作redis集群

    strictRedis对象方法用于连接redis 指定主机地址,port与服务器连接,默认db是0,redis默认数据库有16个,在配置文件中指定database 16 上代码 .对redis的单实例 ...

  6. 【Java集合系列一】ArrayList解析

    一.基础简介 1.ArrayList继承关系 2.底层用数组来存储数据,数据会在ArrayList创建的时候一并初始化.如果创建ArrayList的时候,没有设置容量,则会delay到第一次add数据 ...

  7. 基于vue的实战步骤

    1.脚手架vue-cli安装 npm install -g vue-cli (npm init -f 生成package.json文件) vue init webpack myapp cd myapp ...

  8. List集合1

    一.List接口介绍 List继承自Collection接口,是单列集合的一个重要分支,习惯性的会将实现List接口的对象称为List集合 二.List接口3个特点 1.有序(有序不是顺序,有序指的是 ...

  9. 一、JAVA变量类型:①类变量与实例变量的异同点

    在JAVA中,变量使用前必须声明,格式如下: int a; //单个变量声明 int b, c, d; //多个变量一起声明 int e = 1, f = 2, g = 3; //声明时同时赋值(初始 ...

  10. ubuntu下安装php7

    apt-cache pkgnames | grep php7.0 sudo apt-get install -y php7.0 libapache2-mod-php7.0 php7.0-cli php ...