转载请标明出处: 
http://blog.csdn.net/hai_qing_xu_kong/article/details/44041241
本文出自:【顾林海的博客】

前言

这篇微信登录的文章是很早写的,看了下面评论的,一个劲的要Demo,其实我是不喜欢这样的,我们做为程序员,不应该遇到什么问题都不去自己解决,而想要速成,快速的得到想要的,写了微信登录,很多人都说resp不能获取,那我想问问,怎样才能获取这个resp呢?我在MainLoginTest里面写了WXLogin方法,但也没有显示的调用,难道大家也不懂的怎样调用吗?我看不是吧,当然,其中也有写的不好的地方,就拿resp这么获取没写明白,这也是我把这篇文章重新整理的原因,微信官网有没有更新,我不清楚,这篇文章重新整理旨在修改之前的不足之处。

最近在项目中加入微信登录,以下是微信登录实现的步骤,希望给大家有所帮助。

第一步:

登录微信开放平台,点击下图中的“创建应用”:

创建应用时需要签名,下载下图中签名工具:

应用创建完毕后会得到两个值:AppID、AppSecret,这两个值保存好,后面会用到。

第二步:

下载微信的SDK,选择下图的Android开放工具包:

将工具包下的  ----->导入你的项目工程中的-------->中。

第三步

在你的工程中创建一个包,记住你的包名格式必须是你工程AndroidManifest.xml中的package名+wxapi,如下图中的

最后包名: net.sourceforge.simcpux.wxapi

在这个包下新建一个WXEntryActivity类,并在这个类中定义下图中的回调方法:

public class WXEntryActivity extends Activity implements IWXAPIEventHandler{private IWXAPI api;private  static BaseResp mBaseResp = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);api = WXAPIFactory.createWXAPI(this, WX_APP_ID, false);api.handleIntent(getIntent(), this);}public static BaseResp getResp(){return mBaseResp;}// 微信发送请求到第三方应用时,会回调到该方法  @Overridepublic void onReq(BaseReq req) {finish();}// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法  @Overridepublic void onResp(BaseResp resp) {String result = "";if (resp != null) {this.mBaseResp = resp;}switch(resp.errCode) {case BaseResp.ErrCode.ERR_OK:result ="发送成功";Toast.makeText(this, result, Toast.LENGTH_LONG).show();finish();break;case BaseResp.ErrCode.ERR_USER_CANCEL:result = "发送取消";Toast.makeText(this, result, Toast.LENGTH_LONG).show();finish();break;case BaseResp.ErrCode.ERR_AUTH_DENIED:result = "发送被拒绝";Toast.makeText(this, result, Toast.LENGTH_LONG).show();finish();break;default:result = "发送返回";Toast.makeText(this, result, Toast.LENGTH_LONG).show();finish();break;}}@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);api.handleIntent(intent, this);finish();}
}  

在上面定义了类方法,用于获取BaseReq 实例,以上的WX_APP_ID是你创建应用时得到的AppID。

之后在你项目登录界面的Activity中加入以下代码实现登录授权界面。当你登录授权后回到你的Activity后,会执行Activity的生命周期onResume()。

在登录的Activity中添加以下方法:

public class MainLoginTest extends Activity {public static IWXAPI WXapi;private String weixinCode;private final static int LOGIN_WHAT_INIT = 1;private static String get_access_token = "";// 获取第一步的code后,请求以下链接获取access_tokenpublic static String GetCodeRequest = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";//获取用户个人信息public static String GetUserInfo="https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID";@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);}/*** 登录微信*/private void WXLogin() {WXapi = WXAPIFactory.createWXAPI(this, WX_APP_ID, true);WXapi.registerApp(WX_APP_ID);SendAuth.Req req = new SendAuth.Req();req.scope = "snsapi_userinfo";req.state = "wechat_sdk_demo";WXapi.sendReq(req);}@Overrideprotected void onResume() {super.onResume();/** resp是你保存在全局变量中的*/if(null==WXEntryActivity.getResp()){return;}if (resp.getType() == ConstantsAPI.COMMAND_SENDAUTH) {// code返回weixinCode = ((SendAuth.Resp) WXEntryActivity.getResp()).code;/** 将你前面得到的AppID、AppSecret、code,拼接成URL*/get_access_token = getCodeRequest(weixinCode);Thread thread=new Thread(downloadRun);thread.start();try {thread.join();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}/*** 获取access_token的URL(微信)* @param code 授权时,微信回调给的* @return URL*/public static String getCodeRequest(String code) {String result = null;GetCodeRequest = GetCodeRequest.replace("APPID",urlEnodeUTF8(AppConstants.WX_APP_ID));GetCodeRequest = GetCodeRequest.replace("SECRET",urlEnodeUTF8(AppConstants.WX_APP_SECRET));GetCodeRequest = GetCodeRequest.replace("CODE",urlEnodeUTF8( code));result = GetCodeRequest;return result;}/*** 获取用户个人信息的URL(微信)* @param access_token 获取access_token时给的* @param openid 获取access_token时给的* @return URL*/public static String getUserInfo(String access_token,String openid){String result = null;GetUserInfo = GetUserInfo.replace("ACCESS_TOKEN",urlEnodeUTF8(access_token));GetUserInfo = GetUserInfo.replace("OPENID",urlEnodeUTF8(openid));result = GetUserInfo;return result;}public static String urlEnodeUTF8(String str) {String result = str;try {result = URLEncoder.encode(str, "UTF-8");} catch (Exception e) {e.printStackTrace();}return result;}public  Runnable downloadRun = new Runnable() {@Overridepublic void run() {WXGetAccessToken();}};/*** 获取access_token等等的信息(微信)*/private  void WXGetAccessToken(){HttpClient get_access_token_httpClient = new DefaultHttpClient();HttpClient get_user_info_httpClient = new DefaultHttpClient();String access_token="";String openid ="";try {HttpPost postMethod = new HttpPost(get_access_token);HttpResponse response = get_access_token_httpClient.execute(postMethod); // 执行POST方法if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {InputStream is = response.getEntity().getContent();BufferedReader br = new BufferedReader(new InputStreamReader(is));String str = "";StringBuffer sb = new StringBuffer();while ((str = br.readLine()) != null) {sb.append(str);}is.close();String josn = sb.toString();JSONObject json1 = new JSONObject(josn);access_token = (String) json1.get("access_token");openid = (String) json1.get("openid");} else {}} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (JSONException e) {e.printStackTrace();}String get_user_info_url=getUserInfo(access_token,openid);WXGetUserInfo(get_user_info_url);}/*** 获取微信用户个人信息* @param get_user_info_url 调用URL*/private  void WXGetUserInfo(String get_user_info_url){HttpClient get_access_token_httpClient = new DefaultHttpClient();String openid="";String nickname="";String headimgurl="";try {HttpGet getMethod = new HttpGet(get_user_info_url);HttpResponse response = get_access_token_httpClient.execute(getMethod); // 执行GET方法if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {InputStream is = response.getEntity().getContent();BufferedReader br = new BufferedReader(new InputStreamReader(is));String str = "";StringBuffer sb = new StringBuffer();while ((str = br.readLine()) != null) {sb.append(str);}is.close();String josn = sb.toString();JSONObject json1 = new JSONObject(josn);openid = (String) json1.get("openid");nickname = (String) json1.get("nickname");headimgurl=(String)json1.get("headimgurl");} else {}} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (JSONException e) {e.printStackTrace();}}
}

根据以上程序,可以获取用户信息、code、openid、access_token

最后一步:

在AndroidManifest中添加以下配置代码:

  <activityandroid:name="net.sourceforge.simcpux.wxapi.WXEntryActivity"android:configChanges="orientation|keyboardHidden"android:exported="true"android:launchMode="singleTop"android:screenOrientation="portrait"android:theme="@android:style/Theme.Translucent.NoTitleBar" ><intent-filter><action android:name="android.intent.action.VIEW" ></action><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>

至此微信登录完毕

最后想说的是文章内容如有不对,请查看微信官网是否有改动

Android之集成微信登录相关推荐

  1. android客户端集成微信登录

    客户端集成微信登录 1.WXEntryActivity public class WXEntryActivity extends WeCareActivity implements IWXAPIEve ...

  2. Android集成微信登录

    Android集成微信登录是比较常见的了,此次我把自己集成的过程总结出来,供大家学习参考. 1.首先需要你去微信开放平台申请对应的APPID,地址https://open.weixin.qq.com/ ...

  3. android 第三方登录界面,Android App集成第三方登录与换肤指南

    Android App集成第三方登录与换肤指南 文档编辑 概述 本文主要是介绍了如何通过开源框架快速支持QQ和微信登录,并介绍了如何实现app快速换肤 QQ登录接入 APP要支持QQ登录,需要先到腾讯 ...

  4. 利用WxJava实现PC网站集成微信登录功能,核心代码竟然不超过10行

    最近网站PC端集成微信扫码登录,踩了不少坑,在此记录下实现过程和注意事项. 本文目录 一.微信开放平台操作步骤1.创建"网站应用"2.获取AppID和AppSecret二.开发指南 ...

  5. Android app集成微信支付

    Android app集成微信支付 鉴于微信支付的文档入口不太容易找到.以及文档中有些逻辑不通或者容易产生歧义或者缺失一些信息的情况,记录下此次接入的流程和需要关注的一些点. 使用的是app支付-&g ...

  6. php asp.net core,ASP.NET Core集成微信登录的实例图解

    这篇文章主要介绍了ASP.NET Core集成微信登录的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 工具: Visual Studio 2015 update 3 Asp.Net Co ...

  7. Android应用实现微信登录与分享

    Android应用实现微信登录与分享 1. 闲话(可直接无视 项目慢慢的推进,逐渐的做到了微信第三方登录的功能模块了.其实我想说Orz,我等这一天等了好久了,想做个微信验证登录都等了两个多星期咧(其实 ...

  8. android 微信登陆功能,Android集成微信登录

    现在的项目中几乎都会用到微信登录分享支付之类的,我现在做的这个项目正好用到了微信登录功能,再次记录下我的使用过程: 1.第一步  先去微信开放平台注册账号,填写应用信息,提交审核,大概需要三到五天的时 ...

  9. 安卓开发之集成微信登录以及分享群聊,朋友圈功能。

    准备工作 先申请应用的各种ID,官网地址:https://open.weixin.qq.com 集成 添加依赖. implementation 'com.tencent.mm.opensdk:wech ...

最新文章

  1. [新手-数据分析师]numpy学习笔记(2nd)
  2. 基于概率论的分类方法—朴素贝叶斯
  3. 把对象转换成JSON字符串 第二稿支持移动设备
  4. java 封装 继承 堕胎_Java的继承、封装和多态
  5. restlet_Restlet框架– Hello World示例
  6. JavaScript中Object.keys、Object.getOwnPropertyNames区别
  7. 西南在线平台教育计算机应用基础答案,西南交《计算机应用基础》在线作业一...
  8. 结对-贪吃蛇游戏-需求分析
  9. PAT A1096 质因子分解
  10. java获取网页的内容_java获取网页内容
  11. Day46:数据库引擎、索引、pymysql
  12. JavaScript纯前端上传和下载文件
  13. 电压比较器工作原理 -----运放入门,重点!!!
  14. 利用雪碧图及css自制的动态变色导航栏
  15. mac 安装virtualbox虚拟机
  16. masked_fill_() - masked_fill() - v1.5.0
  17. ESXI6.7.0 升级到7.0U3f(2022年7月12 更新)
  18. 如何利用Vue3管理系统实现动态路由和动态侧边菜单栏
  19. 计算机专业想进国企考研可以考什么,毕业后想进国企,可以报考这些专业,更容易拿到铁饭碗,前途无量...
  20. 如何让服务端同时支持WebSocket和SSL加密的WebSocket(即同时支持ws和wss)?

热门文章

  1. ol xyz 加载天地图_OpenLayer学习之加载天地图
  2. arcgis 快速制图插件_51GIS学院|ArcGIS空间数据分析系列课程的27个视频
  3. adb cannot connect to daemon_手机触屏失效的抢救办法,以及如何利用adb实现PC与手机交互...
  4. [js]可折叠的框架效果
  5. 初识linux之文件管理
  6. android 多用户管理UserManager
  7. OpenGL的几何变换4之内观察全景图
  8. 【转】java提高篇(十)-----详解匿名内部类
  9. 网站安全--又一种防盗链的措施!
  10. [转载] New Concept English 1——Lesson 14 What colour's your…?