第一步:

在微信开放平台创建安卓应用,需要输入的包名和签名就不用再提吧,不知道的自行百度。 
应用创建完毕后会得到两个值:AppID、AppSecret,用这两个值来请求微信。 
然后去微信开放平台的资源中心 ,选择安卓资源包 ,如图: 

注意:输入的包名和签名要和项目中的一致!

第二步:

将安卓资源包中的libammsdk.jar 导入到项目中的libs文件夹下面。 
并在项目中的创建一个包 ,包名必须为 package+wxapi,比如你的包名是com.xxx.Android,那就要创建一个 com.xxx.android.wxapi。然后在这个 包下面 建一个类 ,类名为WXEntryActivity。 
在AndroidManifest.xml 注册这个类

    <activity
android:name="com.xxx.android.wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>

下面是WXEntryActivity中的代码:

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private IWXAPI api;
private BaseResp resp = null;
private String WX_APP_ID = "创建应用后得到的APP_ID";
// 获取第一步的code后,请求以下链接获取access_token
private String GetCodeRequest = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
// 获取用户个人信息
private String GetUserInfo = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID";
private String WX_APP_SECRET = "创建应用后得到的APP_SECRET"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, WX_APP_ID, false);
api.handleIntent(getIntent(), this);
} // 微信发送请求到第三方应用时,会回调到该方法
@Override
public void onReq(BaseReq req) {
finish();
} // 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
@Override
public void onResp(BaseResp resp) {
String result = "";
if (resp != null) {
resp = resp;
}
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
result = "发送成功";
Toast.makeText(this, result, Toast.LENGTH_LONG).show();
String code = ((SendAuth.Resp) resp).code; /*
* 将你前面得到的AppID、AppSecret、code,拼接成URL 获取access_token等等的信息(微信)
*/
String get_access_token = getCodeRequest(code);
AsyncHttpClient client = new AsyncHttpClient();
client.post(get_access_token, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, JSONObject response) {
// TODO Auto-generated method stub
super.onSuccess(statusCode, response);
try { if (!response.equals("")) {
String access_token = response
.getString("access_token");
String openid = response.getString("openid");
String get_user_info_url = getUserInfo(
access_token, openid);
getUserInfo(get_user_info_url);
} } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}); 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;
}
} /**
* 通过拼接的用户信息url获取用户信息
*
* @param user_info_url
*/
private void getUserInfo(String user_info_url) {
AsyncHttpClient client = new AsyncHttpClient();
client.get(user_info_url, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, JSONObject response) {
// TODO Auto-generated method stub
super.onSuccess(statusCode, response);
try { System.out.println("获取用户信息:" + response); if (!response.equals("")) {
String openid = response.getString("openid");
String nickname = response.getString("nickname");
String headimgurl = response.getString("headimgurl"); } } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
} @Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
finish();
} /**
* 获取access_token的URL(微信)
*
* @param code
* 授权时,微信回调给的
* @return URL
*/
private String getCodeRequest(String code) {
String result = null;
GetCodeRequest = GetCodeRequest.replace("APPID",
urlEnodeUTF8(WX_APP_ID));
GetCodeRequest = GetCodeRequest.replace("SECRET",
urlEnodeUTF8(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
*/
private 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;
} private String urlEnodeUTF8(String str) {
String result = str;
try {
result = URLEncoder.encode(str, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return result;
} }

第三步:

在Activity中调起访问微信

public class LoginActivity extends Activity implements OnClickListener {

    private Button login;

    // 微信登录
private static IWXAPI WXapi;
private String WX_APP_ID = "创建应用后得到的APP_ID"; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
// 启动activity时不自动弹出软键盘
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.login);
init();
} private void init() {
login = (Button) findViewById(R.id.bt_login); login.setOnClickListener(this);
} @Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) { case R.id.login:
WXLogin();
break;
default:
break;
} } /**
* 登录微信
*/
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); } }

Android集成第三方微信登录的更多相关文章

  1. cocos2d-x C++ (Android)集成第三方微信分享

    ShareSDK Android for cocos2d-x 此文档为ShareSDK Android for cocos3.x的版本,如您集成的是2.X的版本文档请到这里:cocos2.x集成文档 ...

  2. android app使用微信登录接口回调没有被执行的问题研究

    本人开发的一个app使用了sharesdk集成微信登录功能,在测试的过程中微信授权登录界面有调用,但是授权后原应用的回调没有被执行 应用的包名是com.kimi.searcher 首先,确认微信点击授 ...

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

    目前很多的网站中都会存在很多的交互功能,从而降低用户的操作难度,特此带来微信的第三方登录的项目实战功能开发.对于本实例中的开发内容,就不在使用原生的内容,而是直接使用别人写好的封装的类库. 1. 安装 ...

  4. Android app 第三方微信支付接入详解

    微信支付做了好几遍了,都没有出现什么棘手的问题,下面一一为大家分享一下,欢迎吐槽. 还是老样子,接入微信的支付要第一步添加微信支付官方的包libammsdk.jar 首先就处理略坑的一个问题,app应 ...

  5. cocos2d-x C++ (iOS)集成第三方微信分享

    1.新建项目并下载 ShareSDK 1.Cocos2d-x项目环境搭建,不会的童鞋自行面壁哈: 网页链接. 2.ShareSDK iOS版本的 Cocos2d-x 插件是在ShareSDK iOS版 ...

  6. dedecms织梦第三方登录插件-QQ登录、微博登录、微信登录

    织梦程序集成第三方QQ登录.微博登录.微信登录,获取QQ.微博.微信,并存储至数据库,一键注册为网站会员,不用再次填写绑定信息,方便粘贴用户更强. 织梦第三方登录效果 第三方登录插件特点 1.所有文件 ...

  7. Android 支付宝以及微信支付快速接入流程

    简介 随着移动支付的普及,越来越多的App采用第三发支付,在这里我们以支付宝为例,做一个快速集成! 一.Android快速实现支付宝支付 1.首先,我们需要前往支付宝开放平台,申请我们的支付功能:ht ...

  8. APP微信登录 服务器处理代码

    采用框架THINKPHP5 需要客户端传的参数有  udid openid nickname avatar_path /* * @param 第三方微信登录 * @param openid udid ...

  9. Android应用之——微信微博第三方sdk登录分享使用过程中的一些常见问题

    前言 近期在使用第三方登录和分享的过程中遇到了非常多问题,一方面能够归结为自己经验的不足,还有一方面事实上也说明了官方文档的含糊不清.这篇博文不会写关于怎样使用第三方登录分享,由于官方文档已经写明了步 ...

随机推荐

  1. 关于jquery文件上传插件 uploadify 3.1的使用

    要使用uplaodify3.1,自然要下载相应的包,下载地址http://www.uploadify.com/download/,这里有两种包,一个是基于flash,免费的,一个是基于html5,需要 ...

  2. vue2.0中关于active-class

    一.首先,active-class是什么, active-class是vue-router模块的router-link组件中的属性,用来做选中样式的切换: 相关可查阅文档:https://router ...

  3. Python3之时间模块详述

    Python3之时间模块  time & datetime & calendar 一. 概述 python 提供很多方式处理日期与时间,转换日期格式是一个常见的功能. 时间元组:很多p ...

  4. struts2中各个jar包的具体作用

    -----------------------------------struts2的核心包-------------------------------------- struts2-core-2. ...

  5. asp实现阿里大鱼短信API接口的方法

    阿里大鱼是阿里推出的产品,官方提供JAVA..NET.PHP等版本的SDK下载,不知为何,唯独不提供ASP版本的SDK. 不提供没关系,自己写就是了,参照官方提供的API写一个就是了. 本来以为无非是 ...

  6. PHP单词表

    输出语句printechovar_dumpprint_rprintf变量的操作unset预定义变量$_SERVER$_GET$_POST$_REQUEST$_COOKIE,$_SESSION 会话技术 ...

  7. 为什么叫Unity3d为脚本语言

    初接触Unity,看到大家说的都是工作主要是写脚本语言. 一直纳闷为什么说脚本语言呢,c#可不是脚本语言啊. -- -- 后来释然,说它是脚本语言是因为传统程序都是由代码构成的(像iOS.Androi ...

  8. ZBrush中2.5D笔刷

    ZBrush®是一个数字雕刻和3维建模软件,它不仅有着强大的3D雕刻功能,对于2.5D笔刷的应用也毫不逊色.本文主要讲解2.5D笔刷的一些使用方法,2.5D笔刷是针对贴图绘画的增效画笔工具和其他一些工 ...

  9. 洛谷1613 跑路 倍增 + Floyd

    首先,我们一定要认识到本题中的最短时间所对应的道路不一定是在起点到终点的最短路.例如,起点到终点的最短路为 151515 ,那么对 151515 进行二进制拆分的话是 111111111111 ,这时 ...

  10. 火狐浏览器安装接口测试工具RESTClient方法