微信授权登陆和数据回调
本人用的是最新版的sdk,开发工具是Eclipse(因为现在很多人都是用的AndroidStudio,所以Eclipse的例子会越来越少。其实两者用法大同小异。)。
首先申请appID,AppSeort等(这个很简单,开发者应该都知道)
接入sdk,先去注册微信
private IWXAPI api;
/**
*在onCreate()方法里
*/
api = WXAPIFactory.createWXAPI(this, WXConstants.APP_ID,true);
//注册微信
api.registerApp(WXConstants.APP_ID);
发送微信授权登陆请求
踩坑经验:
————-请注意你的开发者资格认证是否通过,若不通过则会出现一下情况:
//发起登录请求
SendAuth.Req req = new SendAuth.Req();
// 外部应用请求的权限范围
req.scope = "snsapi_userinfo";
//外部应用本身用来标识其请求的唯一性,验证完成后,将由微信终端回传,
req.state = "wechat_sdk_demo_test";
api.sendReq(req);
- 进行回调
在WXEntryActivity的onResp(BaseResp arg0)方法中进行回调,会得到一个code.通过这个code调用一个接口获取到access_token和OpenID的值,之后再通过access_token以及openID调用获取用户信息的接口-来获取用户的数据
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
@Override
public void onResp(BaseResp resp) {
Log.i("TAG-02", "微信分享的第二个回调");
int result = 0;
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK://成功
/**
* 微信登陆
*/
if (resp instanceof SendAuth.Resp) {
// 获取code
String code = ((SendAuth.Resp) resp).code;
// 通过code获取授权口令access_token
requestOpenId(code);
}
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
result = R.string.errcode_cancel;//发送取消
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
result = R.string.errcode_deny; //发送返回
break;
default:
result = R.string.errcode_unknown;
break;
}
finish();
}
/**
* 开辟子线程
* @param token
*/
private void requestOpenId(final String code) {
// 开启线程来发起网络请求
new Thread(new Runnable() {
@Override
public void run() {
String urlstr = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+WXConstants.APP_ID
+"&secret="+WXConstants.App_Scere
+ "&code="+code
+"&grant_type=authorization_code" ;
//获取 网上 数据
String httpUrl = WXConstants.httpUrl(urlstr);
// Json
JSONObject jsObj;
try {
jsObj = new JSONObject(httpUrl);
//获取到 openid
String opendId = jsObj.getString("openid").toString().trim();
//获取到 access_token
String access_token = jsObj.getString("access_token").toString().trim();
/**
* 用openid和access_token获取 用户信息
*/
getUserInfo(opendId,access_token);
} catch (JSONException e) {
e.printStackTrace();
}
}
}).start();
/**
* 用于 获取 用户 信息
* @param opendId
* @param access_token
*/
private void getUserInfo(String opendId, String access_token) {
String path = "https://api.weixin.qq.com/sns/userinfo?access_token="
+ access_token
+ "&openid="
+ opendId;
//用户信息
String httpUrl = WXConstants.httpUrl(path);
}
- 上边这样就可以授权登陆和获取用户信息了,快试试吧,童鞋们!!!
福利送给你们:
——————WXConstantts.httpUrl();
public class WXConstants {
// APP_ID 替换为你的应用从官方网站申请到的合法appId
public static String APP_ID = "";
// APP_ID 替换为你的应用从官方网站申请到的合法appScope
public static String App_Scere = "";
public static String httpUrl(String path){
String jsonStr = null ;
HttpURLConnection connection = null;
try {
// 获得URL对象
URL url = new URL(path);
// 获得HttpURLConnection对象
connection = (HttpURLConnection) url.openConnection();
// 默认为GET请求
connection.setRequestMethod("GET");
// 设置 链接 超时时间
connection.setConnectTimeout(5000);
// 设置 读取 超时时间
connection.setReadTimeout(8000);
// 设置是否从HttpURLConnection读入,默认为true
connection.setDoInput(true);
connection.setDoOutput(true);
// 请求相应码是否为200(OK)
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
// 下面对获取到的输入流进行读取
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
jsonStr = response.toString();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭连接
if (connection != null) {
connection.disconnect();
}
}
return jsonStr;
}
}
2万+



被折叠的 条评论
为什么被折叠?



