原生微信登录开发记录
原生微信登录开发记录(微信开发文档太陈旧了不更新)
微信回调页面
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'
结束
就一个掉起和回调。写这篇文章纯属因为微信文档陈旧看的蛋疼、
原生微信登录开发记录相关推荐
- 第三方网站应用微信登录开发指南
微信开放平台网址 网站应用微信登录开发指南 准备工作 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信OAuth2.在进行微信OAuth2.0授权登录 ...
- 【iOS】原生微信登录和分享
add:新加入了block回调,详细可以看博客最后面的github地址. 年前的时候,公司说需要在APP里面做微信.新浪和QQ的第三方登录.当时,由于APP已经集成了微信支付.微信.新浪和QQ的分享S ...
- 微信登录开发-java
微信登录: 1.申请微信开放平台,获取微信登录接口 2.测试登录接口是否正常 redirect_uri重定向地址(微信申请的http://+'授权回调域'),需要进行UrlEncode. https: ...
- WeChat小程序·微信登录·开发参考文档
文章目录 1 WeChat小程序登录业务开发 1.1 前期准备 1.2 微信登录流程 1.2.1 官方参考文档 1.2.2 登录流程时序图 1.2.3 步骤分析 1.2.4 重要方法说明 1.2.5 ...
- 完美集成原生微信登录以及非常规问题解决(白屏,闪退假象,注册失败,刷新access_token)
激动人心,公司项目要做微信登录,第一次做是真的难受啊,尤其是微信的官方文档,简直不能忍,各种问题.纠结了很久以后终于摆弄好了,需要的话尽管拿(禁止转载) 流程无非就是申请账号,注册应用什么的罗罗嗦嗦一 ...
- Unity微信小游戏使用微信云开发记录
最近项目上架微信小游戏,首先使用了微信官方sdk转成微信小游戏,官方地址如下: https://github.com/wechat-miniprogram/minigame-unity-webgl-t ...
- 越南版微信Zalo开发记录 (zmp)
公司新项目需要到越南聊天软件的小程序中上架,让我接触到了Zalo 小程序开发 zalo开发在国内几乎没有先例,毕竟在越南那边现在也算是新奇玩意,因此在开发过程中遇到问题在网上基本找不到答案!! 这篇文 ...
- 微信网页开发--仿美团、饿了么红包分享
需求 这个月,公司做了一个3.8女王节的活动.当时的需求是一个水果接龙的小游戏.比如,我发起了一条接龙,然后我把这个链接分享出去,A点击这个链接就可以看见我输入的水果,然后A再分享这个链接给B,B就可 ...
- 对于微信二维码相关官方文档的一些注解(微信登录和绑定微信、关注公众号)
转载自:https://www.jianshu.com/p/d533c69be034 由于微信官方文档对此的描述虽然还可以,但是还是有一些让人疑惑的地方,所以笔者做了一些注解,希望对大家有所帮助 为什 ...
最新文章
- mysql server安装不成功,解决Mysql5.7.17在windows下安装启动时提示不成功问题
- 电影推荐_亲和性分析_规则提取(数据挖掘入门与实践-实验6)
- 在cmd命令行下编译运行C/C++源文件
- mysql+'@'%_mysql忘记登录的人:命令拒绝用户”@’%’
- 封装Python列表实现多下标访问
- 拯救Ubuntu环境变量搞蹦导致命令使用不了的办法
- 802.11 对于multicast 和 broadcast的处理
- Java课程设计——学生信息系统(团队)
- 求解平稳分布matlab,生灭过程的拟平稳分布
- 告别 PS !3 行代码 5 秒搞定抠图的 AI 神器!
- 软件工程_0, 软件开发约定
- Application Server was not connected before run configuration stop, reason: javax.management.Instanc
- String Ioc简介
- 十六进制转字符串或char字符数组
- MacOX以及XCode下文件结束符(EOF)的输入
- 小巧精致的“隐形”耳机,让你排除干扰安心入眠,Wedoking 二代 无线睡眠耳机上手
- 检测实验室实施LIMS系统可以给实验室带来哪些改变?
- 最简单的SLIC算法实现
- 移动硬盘不能正常读取
- arduino/Mixly使用MAX6675热电偶传感器