微信第三方登陆

一:下载SDK

https://open.weixin.qq.com/cgi-bin/frame?t=resource/res_main_tmpl&verify=1&lang=zh_CN&target=res/app_download_ios

二:配置环境

将文件拖入工程

配置URL scheme

三:DEFINE

1 #ifndef LoginDemo_Define_h 2 #define LoginDemo_Define_h 3 4 #define kAppDescription @“*******" 5 6 #define kWeiXinAppId @“wx**************" 7 #define kWeiXinAppSecret @“4f85d************011afa8a23d5a" 8 9 #define kWeiXinAccessToken @"WeiXinAccessToken"10 #define kWeiXinOpenId @"WeiXinOpenId"11 #define kWeiXinRefreshToken @"WeiXinRefreshToken"12 13 14 #endif

四:AppDelegate.h

1 #import 2 3 #import "WeChatSDK_64/WXApi.h"4 5 @interface AppDelegate : UIResponder 6 7 @property (strong, nonatomic) UIWindow *window;8 9 @end

五:AppDelegate.m

1 #import "AppDelegate.h" 2 #import "RootViewController.h" 3 #import "Define.h" 4 5 @interface AppDelegate () 6 { 7 RootViewController *root; 8 } 9 @end10 11 @implementation AppDelegate12 13 14 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions15 {16 //….17 18 root = [[RootViewController alloc]init];19 self.window.rootViewController = root;20 21 [WXApi registerApp:kWeiXinAppId withDescription:kAppDescription];22 23 return YES;24 }25 26 - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url27 {28 return [WXApi handleOpenURL:url delegate:self];29 }30 31 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation32 {33 return [WXApi handleOpenURL:url delegate:self];34 }35 36 - (void)onReq:(BaseReq*)req37 {38 41 }42 43 - (void)onResp:(BaseResp*)resp44 {45 48 [root.weixinViewController getWeiXinCodeFinishedWithResp:resp];49 }

六:发起授权请求

1 - (void)loginButtonClicked2 {3 SendAuthReq* req =[[SendAuthReq alloc ] init];4 req.scope = @"snsapi_userinfo";5 req.state = kAppDescription;6 [WXApi sendReq:req];7 }

调用方法后会弹出授权页面,完成授权后调用AppDelegate中的- (void)onResp:(BaseResp*)resp

七:处理返回数据,获取code

1 - (void)getWeiXinCodeFinishedWithResp:(BaseResp *)resp 2 { 3 if (resp.errCode == 0) 4 { 5 statusCodeLabel.text = @"用户同意"; 6 SendAuthResp *aresp = (SendAuthResp *)resp; 7 [self getAccessTokenWithCode:aresp.code]; 8 9 }else if (resp.errCode == -4){10 statusCodeLabel.text = @"用户拒绝";11 }else if (resp.errCode == -2){12 statusCodeLabel.text = @"用户取消";13 }14 }

八:使用code获取access token

1 - (void)getAccessTokenWithCode:(NSString *)code 2 { 3 NSString *urlString =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",kWeiXinAppId,kWeiXinAppSecret,code]; 4 NSURL *url = [NSURL URLWithString:urlString]; 5 6 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 7 8 NSString *dataStr = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; 9 NSData *data = [dataStr dataUsingEncoding:NSUTF8StringEncoding];10 11 dispatch_async(dispatch_get_main_queue(), ^{12 13 if (data)14 {15 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];16 17 if ([dict objectForKey:@"errcode"])18 {19 //获取token错误 20 }else{ 21 //存储AccessToken OpenId RefreshToken以便下次直接登陆22 //AccessToken有效期两小时,RefreshToken有效期三十天 23 [self getUserInfoWithAccessToken:[dict objectForKey:@"access_token"] andOpenId:[dict objectForKey:@"openid"]];24 }25 }26 });27 });28 29 37 38 43 }

九:使用AccessToken获取用户信息

1 - (void)getUserInfoWithAccessToken:(NSString *)accessToken andOpenId:(NSString *)openId 2 { 3 NSString *urlString =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@",accessToken,openId]; 4 NSURL *url = [NSURL URLWithString:urlString]; 5 6 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 7 8 NSString *dataStr = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; 9 NSData *data = [dataStr dataUsingEncoding:NSUTF8StringEncoding];10 11 dispatch_async(dispatch_get_main_queue(), ^{12 13 if (data)14 {15 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];16 17 if ([dict objectForKey:@"errcode"])18 {19 //AccessToken失效20 [self getAccessTokenWithRefreshToken:[[NSUserDefaults standardUserDefaults]objectForKey:kWeiXinRefreshToken]];21 }else{22 //获取需要的数据 23 }24 }25 });26 });27 28 41 42 47 }

十:使用RefreshToken刷新AccessToken

该接口调用后,如果AccessToken未过期,则刷新有效期,如果已过期,更换AccessToken。

1 - (void)getAccessTokenWithRefreshToken:(NSString *)refreshToken 2 { 3 NSString *urlString =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=%@&grant_type=refresh_token&refresh_token=%@",kWeiXinAppId,refreshToken]; 4 NSURL *url = [NSURL URLWithString:urlString]; 5 6 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 7 8 9 NSString *dataStr = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];10 NSData *data = [dataStr dataUsingEncoding:NSUTF8StringEncoding];11 12 dispatch_async(dispatch_get_main_queue(), ^{13 14 if (data)15 {16 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];17 18 if ([dict objectForKey:@"errcode"])19 {20 //授权过期 21 }else{22 //重新使用AccessToken获取信息23 }24 }25 });26 });27 28 29 36 37 42 }

时间: 2024-10-14 06:58:28

微信第三方登陆的相关文章

适配iOS9时候,qq和微信第三方登陆一直失败-canOpenURL: failed for URL:

我当时采用的shareSDK集成的第三方登陆功能,我先将白名单添加到一个info.plist文件里面,微博和人人的可以登陆,而qq和微信无法登陆,于是我将白名单等写在了TARGETS的info里面.发现可以进行登陆了.

微信第三方登陆,无需注册一键登录,获取用户信息,PHP实现方法.

今天讲讲利用微信oauth2实现第三方登陆的实现方法. 先说说前提吧! 首先你得是服务号,并且是经过认证的.这样微信会给你很多第三方接口的权限,如果是订阅号或者没有认证的服务号那就不用想了! 一开始你需要进入微信公众平台开启开发模式,并且填写oauth2的回调地址,地址填写你项目的域名就可以了.比如:www.baidu.com或zhidao.baidu.com.如果你的项目在二级域名就写二级域名 前端url授权地址,在url中填写appid与你项目中方法中的oauth的地址,具体在下面的代码中可

Android App实现微信第三方授权登陆

下载官方SDK 在微信开放平台,下载微信的官方SDK,以及签名生成工具. 地址:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&token=&lang=zh_CN 2.导入官方SDK 把Android开发工具包里面的libammsdk导入到你的项目中如下图: 这里要注意的是,应用签名不是在Ecl

微信授权登陆接入第三方App(步骤总结)Android

微信授权登陆接入第三方App(步骤总结)Android

第三方登陆:微信官方登陆

微信官方登陆 一.首先进入微信授权登陆之前的一个验证,在微信开放平台注册开发者账号,并拥有一个已经审核通过的移动应用,获得相应的AppID和AppSecrect,申请微信通过审核后(如下如)可开始植入工程的相关流程. 二.下载最新的SDK,链接如下:iOS SDK下载 下载下来的SDK如下图: 1.libWeChatSDK.a  : 静态库,直接拖入工程中使用的: 2.README.txt : 重要内容,一些最新SDK版本的说明和安装配置 3.WechatAuthSDK.h :授权SDK 4.W

微信授权登陆接入第三方App(步骤总结)Android。

这几天开发要用到微信授权的功能,所以就研究了一下.可是微信开放平台接入指南里有几个地方写的不清不楚.在此总结一下,以便需要的人. 很多微信公众平台的应用如果移植到app上的话就需要微信授权登陆了. 目前移动应用上微信登录只提供原生的登录方式,需要用户安装微信客户端才能配合使用.也就是如果第三方应用需要微信授权登陆的话就必须在本机上安装了微信.而后续授权登陆或调用接口之类的相当于app和微信两个应用之间通话. 1.首先需要注册微信开放平台,然后获取开发者认证.审批通过之后再创建一个移动应用同样还是

uni-app第三方登陆-微信

结合上文全局登陆校验,实现微信授权登录官方手册地址: https://uniapp.dcloud.io/api/plugins/login?id=getuserinfo 一.书写两个界面 login.vue 用于用户登陆 my.vue 我的界面,存放校验登陆的函数 1.1 my.vue <script>    var loginRes;    export default {        onLoad:function(){            loginRes = this.checkL

微信第三方平台授权登陆OAuth 2.0学习

微信的项目也做过一两个了,由于主要是负责添加功能,所以关于微信的登陆这一块还挺糊涂,稍微整理一下自己看. 总的流程是 获取code function get_code(){ $code = $_GET["code"]; $User = M('User'); if($_SESSION['uid'] && $_SESSION['openid'] && empty($code)){ $member = $User->where('uid = '.$_SE

Android 中实现分享和第三方登陆---以新浪微博为例

尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38781957 第三方登陆和分享功能在目前大部分APP中都有,分享功能可以将自己觉得有意义的东西分享给身边的朋友,而第三方登陆可以借助已经有巨大用户基础的平台(如QQ和新浪微博)的账号,让用户在使用自己APP的时候不用注册,直接使用第三方账号登陆,从而避免了注册的过程(其实是服务器端帮你注册),这对于吸引更多的用户非常有意义.下面我们就以新浪微博为例,讲解如何实现分享功能和第三方登陆.首先你