android开发实现微信三方登录

android开发实现微信三方登录

标签: 微信开放平台三方登录微信开放平台android开发HttpClient

2016-03-22 11:13 2077人阅读 评论(0) 收藏 举报

 分类:

android开发(26) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

需要了解的知识:OATH2的简单机制。http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html这篇文章写得很清晰(谢谢作者)。

基本流程(从微信官方文档截图):(说的很详细)

自己理解:首先使用appId在手机客户端向微信开放平台发起请求---->返回code零时票据,让后客户端请求自己的服务器端(code作为参数)---->服务器使用code加上app ID河appSecret(不能放在客户端,容易泄露)向微信开放平台发起请求---->返回access_token。然后服务器端就可以根据access_token获取到授权用户的一些信息。

下面是我的代码实现:

第一部分:(客户端)

第一个页面:

/**

* 发起请求的页面,只有一个按钮

* @author ylh

*

*/

public class YlhActivity extends Activity {

String APP_ID = "******";//改成你自己的APP_ID

private IWXAPI api;

private Button btn_sanfangLogin_activity_main;

public static String uuid = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btn_sanfangLogin_activity_main = (Button) findViewById(R.id.btn_sanfangLogin_activity_main);

api = WXAPIFactory.createWXAPI(this, APP_ID);

api.registerApp(APP_ID);

btn_sanfangLogin_activity_main

.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

if (!api.isWXAppInstalled()) {

Toast.makeText(YlhActivity.this, "未安装微信客户端,请先下载",

Toast.LENGTH_LONG).show();

return;

}

uuid = UUID.randomUUID().toString();

final SendAuth.Req req = new SendAuth.Req();

req.scope = "snsapi_userinfo";

req.state = uuid;

System.out.println("state: " + uuid);

boolean b = api.sendReq(req);

System.out.println(b);

}

});

}

}

第二个页面:

/**

* 授权后,微信客户端调用的页面( Android:exported="true")

* @author ylh

*

*/

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {

String APP_ID = "*****";//改成你自己的APP_ID

private IWXAPI api;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

api = WXAPIFactory.createWXAPI(this, APP_ID);

api.registerApp(APP_ID);

api.handleIntent(getIntent(), this);

}

@Override

public void onReq(BaseReq arg0) {

System.out.println("onRep");

}

@Override

public void onResp(BaseResp resp) {

System.out.println("onResp");

switch (resp.errCode) {

case BaseResp.ErrCode.ERR_OK:

System.out.println("成功");

SendAuth.Resp response = (SendAuth.Resp) resp;

System.out.println(response.state);

if (response.state == null

|| !response.state.equals(YlhActivity.uuid))

return;// 判断请求是否是我的应用的请求

System.out.println(response.code);

System.out.println(response.country);

break;

case BaseResp.ErrCode.ERR_USER_CANCEL:

System.out.println("quxiao");

break;

case BaseResp.ErrCode.ERR_AUTH_DENIED:

System.out.println("jujue");

break;

default:

break;

}

}

}

第二部分:(服务器端,使用httpClient向微信开放平台发起请求,使用json-lib-2.4-jdk15.jar解析返回的结果)

/**

* 发起get请求的方法

* @param urlAddress

* @return

*/

public static String doGet(String urlAddress) {

String getUrl = urlAddress;

HttpGet httpGet = new HttpGet(getUrl);

HttpParams hp = httpGet.getParams();

hp.getParameter("true");

// hp.

// httpGet.setp

HttpClient hc = HttpClients.createDefault();

try {

HttpResponse ht = hc.execute(httpGet);

if (ht.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {

HttpEntity he = ht.getEntity();

InputStream is = he.getContent();

BufferedReader br = new BufferedReader(new InputStreamReader(is));

String response = "";

String readLine = null;

while ((readLine = br.readLine()) != null) {

// response = br.readLine();

response = response + readLine;

}

is.close();

br.close();

// String str = EntityUtils.toString(he);

System.out.println(response);

return response;

} else {

return "error";

}

} catch (ClientProtocolException e) {

// TODO Auto-generated catch block

e.printStackTrace();

return "exception";

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

return "exception";

}

}

下面就调用:

1. 使用客户端传来的code,加上app ID河appSecret(不能放在客户端,容易泄露)向微信开放平台发起请求

doGet("https://api.weixin.qq.com/sns/oauth2/access_token?grant_type=authorization_code&appid=***********&secret=***********&code=***********");(***********的地方替换相应的参数)返回access_token和openid

2. 使用上一步获得的access_token和openid向微信开放平台发起请求,获得用户信息

String resp = doGet("https://api.weixin.qq.com/sns/userinfo?access_token=**********&openid=***********");

JSONObject jObject = JSONObject.fromObject(resp);

String openid = jObject.get("openid").toString();

String nickname = jObject.get("nickname").toString();

String sex = jObject.get("sex").toString();

String language = jObject.get("language").toString();

String city = jObject.get("city").toString();

String province = jObject.get("province").toString();

String country = jObject.get("country").toString();

String headimgurl = jObject.get("headimgurl").toString();

String privilege = jObject.get("privilege").toString();

String unionid = jObject.get("unionid").toString();

System.out.println(openid);

System.out.println(nickname);

System.out.println(sex);

System.out.println(language);

System.out.println(city);

System.out.println(province);

System.out.println(country);

System.out.println(headimgurl);

System.out.println(privilege);

System.out.println(unionid);

注:JSONObject使用的是json-lib-2.4-jdk15.jar解析,依赖的jar包有

commons-beanuitls-1.7.0.jar、commons-collections-3.2.jar、commons-lang-2.4.jar、commons-logging-1.2.jar、ezmorph-1.0.4.jar、json-lib-2.4-jdk15.jar

时间: 2024-08-06 20:02:51

android开发实现微信三方登录的相关文章

Android开发实现QQ三方登录 标签: android开发qq三方登录

本文分为两个部分:一是QQ的授权部分:二是获取用户的基本信息部分 一.授权部分 1.首先,先去腾讯开放平台获取APP ID和APP KEY(未注册腾讯开发者账号的可能需要先注册账号),获取的过程还是还是非常容易的(不用填写任何的应用程序信息). http://open.qq.com/ 2.下载SDK(http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD) 3.下载好SDK后,将其中的两个jar包(mta-sdk-1.6.2.jar.o

apiClould微信三方登录,qq三方登录

三方登录需要在config.xml文件中配置一下,res文件下需要新建一个key.xml文件中也需要配置,请点击链接查看详情 微信:https://docs.apicloud.com/Client-API/Open-SDK/wx QQ:https://docs.apicloud.com/Client-API/Open-SDK/qq 微博:https://docs.apicloud.com/Client-API/Open-SDK/weibo 微信三方登录: wxlogin: function()

Android Learning:微信第三方登录

这两天,解决了微信第三方授权登录的问题,作为一个新手,想想也是一把辛酸泪.我想着,就把我的遇到的坑给大家分享一下,避免新手遇到我这样的问题能够顺利避开. 步骤一 微信开发者平台 我开始的解决思路是,去微信开发者平台看API文档. 这个API文档的主要意思呢,有三点: 1.你得下载这几样东西(下载链接),一个是他的范例代码,一个是他的签名生成工具. 2.如果你自己的APP想要微信第三方授权,你得去申请一个APPID,这个APPID呢,就是微信给咱们APP分配的一个代号.当然微信不是免费给你服务,为

Android开发中微信登陆

关于android开发中的微信登陆,除了使用shareSDK,我们使用腾讯开发者平台上提供的SDK,按照官网步骤实现第三方登陆的功能. 微信OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server端的应用授权.该模式整体流程为: 1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数: 2. 通过code参数加上AppID和AppSecret等,通过API换取access_tok

Android开发实例之miniTwitter登录界面的实现

原文: http://www.jizhuomi.com/android/example/134.html 本文要演示的Android开发实例是如何完成一个Android中的miniTwitter登录界面,下面将分步骤讲解怎样实现图中的界面效果,让大家都能轻松的做出美观的登录界面. miniTwitter登录界面效果图 先贴上最终要完成的效果图: miniTwitter登录界面的布局分析 首先由界面图分析布局,基本可以分为三个部分,下面分别讲解每个部分. 第一部分是一个带渐变色背景的LinearL

微信开发笔记——微信网页登录授权,获取用户信息

最近做了一个公司的微信的公众号,对微信的流程清楚了不少,这里记录下,算不上多高深的,只希望能帮助到一部分人吧. 我们公司的测试微信公众号:NPCgo 可以感受下,哈哈~~ 闲话少说,开始: 首先大家要看下微信的API文档. 微信网页授权,获取用户的微信官方API文档地址:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html 三次握手微信认证流程(我自己简称三次握手): 1.用户同意授权,获取code 2.通过c

Android开发有用的三方网站

聚合数据-免费数据调用 https://www.juhe.cn/ 有赞- 免费的微商城 http://youzan.com/ 秀米微信图文编辑器 http://xiumi.us/ 禅道项目管理软件 http://www.zentao.net/ 安卓开发工具平台 http://www.androiddevtools.cn/ 友盟_开发者服务平台 http://www.umeng.com/ Bmob移动后端云服务平台 http://www.bmob.cn/ 初页- 优质H5微信海报 手机应用 兔展-

Android开发之微信分享到好友,朋友圈

1. 获取ShareSDK的AppKey 申请ShareSDK的appkey的流程 2. 下载SDK 下载SDK请点这里 3. 快速集成 第二步:配置AndroidManifest.xml 下面清单文件的配置是全部的,没有的平台就是不需要配置 1.添加权限 <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android

Android开发--仿微信语音对讲录音

自微信出现以来取得了很好的成绩,语音对讲的实现更加方便了人与人之间的交流.今天来实践一下微信的语音对讲的录音实现,这个也比较容易实现.在此,我将该按钮封装成为一个控件,并通过策略模式的方式实现录音和界面的解耦合,以方便我们在实际情况中对录音方法的不同需求(例如想要实现wav格式的编码时我们也就不能再使用MediaRecorder,而只能使用AudioRecord进行处理). 效果图: 实现思路 1.在微信中我们可以看到实现语音对讲的是通过点按按钮来完成的,因此在这里我选择重新自己的控件使其继承自