原生微信登录开发记录(微信开发文档太陈旧了不更新)

微信回调页面

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private static final String TAG = “WXEntryActivity”;
private static final int RETURN_MSG_TYPE_LOGIN = 1; ///< 登录
private static final int RETURN_MSG_TYPE_SHARE = 2; ///< 分享
private IWXAPI api;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);///< 这句没有写,是不能执行回调的方法的api = WXAPIFactory.createWXAPI(this, Constants.WeChat_APP_ID, false);api.handleIntent(getIntent(), this);
}@Override
public void onReq(BaseReq baseReq) {Log.e(TAG, "onReq" + baseReq.getType());
}@Override
public void onResp(BaseResp baseResp) {Log.e(TAG, "onResp:------>");Log.e(TAG, "error_code:---->" + baseResp.errCode);int type = baseResp.getType(); //类型:分享还是登录switch (baseResp.errCode) {case BaseResp.ErrCode.ERR_AUTH_DENIED:///< 用户拒绝授权finish();case BaseResp.ErrCode.ERR_USER_CANCEL:///< 用户取消String message = "";if (type == RETURN_MSG_TYPE_LOGIN) {message = "取消了微信登录";} else if (type == RETURN_MSG_TYPE_SHARE) {message = "取消了微信分享";}finish();break;case BaseResp.ErrCode.ERR_OK:if (type == RETURN_MSG_TYPE_LOGIN) {///< 用户换取access_token的code,仅在ErrCode为0时有效String code = ((SendAuth.Resp) baseResp).code;String stata = ((SendAuth.Resp) baseResp).state;///< 这里拿到了这个code,去做2次网络请求获取access_token和用户个人信息getAccessToken(code, stata);} else if (type == RETURN_MSG_TYPE_SHARE) {///< "微信分享成功"finish();}break;}
}/*** @param code 根据code再去获取AccessToken*/
private void getAccessToken(String code, String state) {//        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";String url = "https://api.weixin.qq.com/sns/oauth2/access_token";OkHttpClient mOkHttpClient = new OkHttpClient();///< Post方式也可以...//        RequestBody body = new FormBody.Builder()//                .add("appid", "替换为你的appid")//                .add("secret", "替换为你的app密钥")//                .add("code", code)//                .add("grant_type", "authorization_code")//                .build();url += "?appid=" + Constants.WeChat_APP_ID + "&secret=f886493b0656ae8125e1edc5df6e01d6"+ "&code=" + code + "&grant_type=authorization_code";final Request request = new Request.Builder().url(url)//.post(body).build();Call call = mOkHttpClient.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {finish();}@Overridepublic void onResponse(Call call, Response response) throws IOException {String json = response.body().string();AccessToken accessToken = JSONObject.parseObject(json, new TypeReference<AccessToken>() {});getUserInfo(accessToken.getAccess_token(), accessToken.getOpenid(), state);}});
}/*** @param access_token 根据access_token再去获取UserInfo*/
private void getUserInfo(String access_token, String openid, String state) {//        String url = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID";String url = "https://api.weixin.qq.com/sns/userinfo";OkHttpClient mOkHttpClient = new OkHttpClient();RequestBody body = new FormBody.Builder().add("access_token", access_token).add("openid", openid).build();final Request request = new Request.Builder().url(url).post(body).build();Call call = mOkHttpClient.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {finish();}@Overridepublic void onResponse(Call call, Response response) throws IOException {String json = response.body().string();WXUserInfo wxUserInfo = JSONObject.parseObject(json, new TypeReference<WXUserInfo>() {});//加绑和登陆的区分(这里用state字段来区分代码里不同地方调用微信登录)if (state.equals("jiabang")) {//      jiabangcheckType(2, wxUserInfo.getOpenid());  我自己项目里的业务处理} else {//     checkType(2, wxUserInfo.getOpenid()); 我自己项目里的业务处理}///< 发送广播到登录界面,把数据带过去; 可用EventBusfinish();}});
}

}

调起微信登录

private IWXAPI api;
api = WXAPIFactory.createWXAPI(this, “你自己的微信id”, true);
api.registerApp(“你自己的微信id”);

final SendAuth.Req req = new SendAuth.Req();
req.scope = “snsapi_userinfo,snsapi_friend,snsapi_message,snsapi_contact”;
req.state = “none”;
api.sendReq(req);

实体类

AccessToken.java
package com.xxxxxx.app.bean;

import com.xxxxxx.app.anotation.NotProguard;

@NotProguard
public class AccessToken {

/*** access_token : xxxx* expires_in : xxxx* refresh_token : xxxxx* openid : xxxxx* scope : xxxxx* unionid : xxxxx*/private String access_token;
private int expires_in;
private String refresh_token;
private String openid;
private String scope;
private String unionid;private AccessToken(){}
public String getAccess_token() {return access_token;
}public void setAccess_token(String access_token) {this.access_token = access_token;
}public int getExpires_in() {return expires_in;
}public void setExpires_in(int expires_in) {this.expires_in = expires_in;
}public String getRefresh_token() {return refresh_token;
}public void setRefresh_token(String refresh_token) {this.refresh_token = refresh_token;
}public String getOpenid() {return openid;
}public void setOpenid(String openid) {this.openid = openid;
}public String getScope() {return scope;
}public void setScope(String scope) {this.scope = scope;
}public String getUnionid() {return unionid;
}public void setUnionid(String unionid) {this.unionid = unionid;
}

}

WXUserInfo.java

package com.xxxxxx.app.bean;

import com.xxxxxx.app.anotation.NotProguard;

@NotProguard
public class WXUserInfo {

/*** openid : xxxxxxx* nickname : xxxxxxx* sex : 1* language : zh_CN* city : Chengdu* province : Sichuan* country : CN* headimgurl :xxxxxx* privilege : []* unionid : xxxxxxx*/private String openid;
private String nickname;
private int sex;
private String language;
private String city;
private String province;
private String country;
private String headimgurl;
private String unionid;private WXUserInfo(){}
public String getOpenid() {return openid;
}public void setOpenid(String openid) {this.openid = openid;
}public String getNickname() {return nickname;
}public void setNickname(String nickname) {this.nickname = nickname;
}public int getSex() {return sex;
}public void setSex(int sex) {this.sex = sex;
}public String getLanguage() {return language;
}public void setLanguage(String language) {this.language = language;
}public String getCity() {return city;
}public void setCity(String city) {this.city = city;
}public String getProvince() {return province;
}public void setProvince(String province) {this.province = province;
}public String getCountry() {return country;
}public void setCountry(String country) {this.country = country;
}public String getHeadimgurl() {return headimgurl;
}public void setHeadimgurl(String headimgurl) {this.headimgurl = headimgurl;
}public String getUnionid() {return unionid;
}public void setUnionid(String unionid) {this.unionid = unionid;
}

}
引用的库:

compile 'com.alibaba:fastjson:1.1.68.android'

结束

就一个掉起和回调。写这篇文章纯属因为微信文档陈旧看的蛋疼、

原生微信登录开发记录相关推荐

  1. 第三方网站应用微信登录开发指南

    微信开放平台网址 网站应用微信登录开发指南 准备工作 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信OAuth2.在进行微信OAuth2.0授权登录 ...

  2. 【iOS】原生微信登录和分享

    add:新加入了block回调,详细可以看博客最后面的github地址. 年前的时候,公司说需要在APP里面做微信.新浪和QQ的第三方登录.当时,由于APP已经集成了微信支付.微信.新浪和QQ的分享S ...

  3. 微信登录开发-java

    微信登录: 1.申请微信开放平台,获取微信登录接口 2.测试登录接口是否正常 redirect_uri重定向地址(微信申请的http://+'授权回调域'),需要进行UrlEncode. https: ...

  4. WeChat小程序·微信登录·开发参考文档

    文章目录 1 WeChat小程序登录业务开发 1.1 前期准备 1.2 微信登录流程 1.2.1 官方参考文档 1.2.2 登录流程时序图 1.2.3 步骤分析 1.2.4 重要方法说明 1.2.5 ...

  5. 完美集成原生微信登录以及非常规问题解决(白屏,闪退假象,注册失败,刷新access_token)

    激动人心,公司项目要做微信登录,第一次做是真的难受啊,尤其是微信的官方文档,简直不能忍,各种问题.纠结了很久以后终于摆弄好了,需要的话尽管拿(禁止转载) 流程无非就是申请账号,注册应用什么的罗罗嗦嗦一 ...

  6. Unity微信小游戏使用微信云开发记录

    最近项目上架微信小游戏,首先使用了微信官方sdk转成微信小游戏,官方地址如下: https://github.com/wechat-miniprogram/minigame-unity-webgl-t ...

  7. 越南版微信Zalo开发记录 (zmp)

    公司新项目需要到越南聊天软件的小程序中上架,让我接触到了Zalo 小程序开发 zalo开发在国内几乎没有先例,毕竟在越南那边现在也算是新奇玩意,因此在开发过程中遇到问题在网上基本找不到答案!! 这篇文 ...

  8. 微信网页开发--仿美团、饿了么红包分享

    需求 这个月,公司做了一个3.8女王节的活动.当时的需求是一个水果接龙的小游戏.比如,我发起了一条接龙,然后我把这个链接分享出去,A点击这个链接就可以看见我输入的水果,然后A再分享这个链接给B,B就可 ...

  9. 对于微信二维码相关官方文档的一些注解(微信登录和绑定微信、关注公众号)

    转载自:https://www.jianshu.com/p/d533c69be034 由于微信官方文档对此的描述虽然还可以,但是还是有一些让人疑惑的地方,所以笔者做了一些注解,希望对大家有所帮助 为什 ...

最新文章

  1. mysql server安装不成功,解决Mysql5.7.17在windows下安装启动时提示不成功问题
  2. 电影推荐_亲和性分析_规则提取(数据挖掘入门与实践-实验6)
  3. 在cmd命令行下编译运行C/C++源文件
  4. mysql+'@'%_mysql忘记登录的人:命令拒绝用户”@’%’
  5. 封装Python列表实现多下标访问
  6. 拯救Ubuntu环境变量搞蹦导致命令使用不了的办法
  7. 802.11 对于multicast 和 broadcast的处理
  8. Java课程设计——学生信息系统(团队)
  9. 求解平稳分布matlab,生灭过程的拟平稳分布
  10. 告别 PS !3 行代码 5 秒搞定抠图的 AI 神器!
  11. 软件工程_0, 软件开发约定
  12. Application Server was not connected before run configuration stop, reason: javax.management.Instanc
  13. String Ioc简介
  14. 十六进制转字符串或char字符数组
  15. MacOX以及XCode下文件结束符(EOF)的输入
  16. 小巧精致的“隐形”耳机,让你排除干扰安心入眠,Wedoking 二代 无线睡眠耳机上手
  17. 检测实验室实施LIMS系统可以给实验室带来哪些改变?
  18. 最简单的SLIC算法实现
  19. 移动硬盘不能正常读取
  20. arduino/Mixly使用MAX6675热电偶传感器

热门文章

  1. R语言使用ggplot绘制线型与点
  2. 天梯赛练习集 L2-021 点赞狂魔(25分)含测试点解析
  3. 什么是芯片?芯片内部制造工艺了解吗?
  4. 电脑安装了百度网盘,却无法在网页上调用客户端进行下载文件
  5. hype3 响应布局_使用Hype 3的基于时间轴的Web动画
  6. 电子商务组成与流程框架
  7. Opencv-培训(一)
  8. 读取excel中数据时,数字格式发生改变
  9. 面试积累(冒泡排序和选择排序)
  10. 达势股份IPO前紧急叫停:年内已有多家公司急刹车,王怡为董事长