官方SDK微信第三方登录
2015-11-19 14:10
826 查看
前段时间写了用友盟的QQ、微信、微博的第三方登录和分享。已经全都做出来了。 结果,经理莫名其妙的一句不行,全部都要用官方的做,我只做了微信的这里贴出我的全部过程。 **第一步**:首先、还是获取微信的AppID跟AppSecret。获取方法:[微信开放平台](https://open.weixin.qq.com/)注册获取开发者资格——创建移动应用就可以获取了。 这里需要强调的是微信的登录获取个人信息,需要300大洋。 **第三步**:签名弄好之后,在你刚才下载签名生成工具那个页面,下载微信的SDK, 然后就是搭建环境了。把下载的SDK里面的jar包复制粘贴到libs目录下面,如果没有这个目录就创建一个, 然后粘贴到目录下面之后,就右键Configure Build Path...至此环境就搭建好了 **第四步**:在你的清单文件中添加相应的权限: `<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>` **第五步**:是我认为最重要的一步,请你一个字都不差的看完,我开始也认为我知道, 因为我做过友盟的微信登录分享,也成功了。但是,我还是在这里卡了很久。那就是添加微信写死的一个类WXEntryActivity。首先,你要在你包名的目录下面创建一个包,名字是wxapi,记住,一定要在包名目录下面, 不要再其他目录下面,其他目录下面就错了,我开始就是在其他目录下面创建的,结果他不走resp方法 (后面会说到)一定要在包名目录下面创建wxapi包,我强调了很多遍了,然后在该目录下面创建WXEntryActivity类继承Activity实现IWXAPIEventHandler接口。在后面会给出我的这个类 **第六步**:准备工作已经全部完成了,就可以开始欢乐的敲代码了,我先说一下登录的过程。 先注册,然后向微信发请求,最后操作返回结果。先注册就是先向微信的后台注册你申请的app; 向微信发请求就是你刚才在你手机上面安装的那个helloworld应用,向微信发送请求; 最后操作返回结果,就是操作返回结果(- -!) 1.注册的代码:(随便写在哪里,只要在你发送请求之前注册就可以了,我的写在主页的onCreate方法里面)
//注册到微信 String APPID = "wx8a350ba041be9334"; IWXAPI wxapi = WXAPIFactory.createWXAPI(this, APPID, true); wxapi.registerApp(APPID);
2.向微信发送请求的代码(写在你的点击事件里面就可以了,点击微信按钮发送请求)
public void wxLogin(){ SendAuth.Req req = new SendAuth.Req(); req.scope = "snsapi_userinfo"; req.state = "wechat_sdk_demo_test"; wxapi.sendReq(req); }
3.操作返回结果,前面我们写死了一个类,那个类是微信要求我们这样写的,估计就是他们已经写死的, 我们要实现它的一个借口,里面有一个onResp方法,我们请求回来的数据都在这个方法的参数里面, 我们需要做的就是首先获取code值,然后访问一个连接获取access_token和openid。 最后通过这两个值访问另一个连接获取个人信息。 **第七步**:操作返回结果,大部分公司用微信登录获取的个人信息应该跟我做的是一样的, 都是昵称,头像,性别,access_token和openid。获取这些信息的第一个条件就是获取code。 就是在刚才我说的onResp方法返回的参数里面。
String code = ((SendAuth.Resp) resp).code;//获取code String codeUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + APP_ID + "&secret=" + APP_SECRECT + "&code=" + code + "&grant_type=authorization_code";
然后访问上面那个链接,APP_ID和APP_SECRECT都在你创建应用的信息里面,code刚才就获取到了, 就是普通的访问链接,从返回值里面解析出来access_token和openid。我直接用的xUtils做的, 用过xUtils的小伙伴都知道在onSuccess方法里面返回的参数就是返回信息。这个信息是Json格式的字符串, 我们没法通过键值来获取,然后我用到了Gson把字符串转成Map,然后通过Map的键值对获取access_token 和openid的值。然后就是访问另一个链接了
String userUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openId;
同样的思路,这次返回的信息就是个人信息了。然后按照公司的需求获取信息就好了。 这里我给出我自己写的微信让我们写死的类
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private Context context = WXEntryActivity.this;
private String result;
private IWXAPI api;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String APPID = "XXXXXXX";
api = WXAPIFactory.createWXAPI(this, APPID, false);
api.handleIntent(getIntent(), this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
MainActivity.wxapi.handleIntent(intent, this);
}
// 微信发送请求到第三方应用时,会回调到该方法
@Override
public void onReq(BaseReq req) {
}
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
@Override
public void onResp(BaseResp resp) {
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
String code = ((SendAuth.Resp) resp).code;
String APP_ID = "XXXXXXX";
String APP_SECRECT = "XXXXXXXX";
String codeUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + APP_ID + "&secret="
+ APP_SECRECT + "&code=" + code + "&grant_type=authorization_code";
HttpUtils utils = new HttpUtils();
utils.send(HttpMethod.POST, codeUrl, new RequestCallBack<String>() {
@Override
public void onFailure(HttpException arg0, String arg1) {
}
@Override
public void onSuccess(ResponseInfo<String> arg0) {
System.out.println(arg0.result);
Gson gs = new Gson();
Map map = gs.fromJson(arg0.result, Map.class);
final String accessToken = (String) map.get("access_token");
final String openId = (String) map.get("openid");
HttpUtils userUtils = new HttpUtils();
String userUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openId;
userUtils.send(HttpMethod.POST, userUrl, new RequestCallBack<String>() {
@Override
public void onFailure(HttpException arg0, String arg1) {
}
@Override
public void onSuccess(ResponseInfo<String> arg0) {
System.out.println(arg0.result);
Gson gs = new Gson();
Map map = gs.fromJson(arg0.result, Map.class);
String nickname = (String) map.get("nickname");
String sex = map.get("sex") + "";
String headimgurl = ((String) map.get("headimgurl")).replace("\\/", "/");
result = "{'nickname':'" + nickname + "','imageUrl':'" + headimgurl + "','gender':'" + sex
+ "','openId':'" + openId + "','accessToken':'" + accessToken + "'}";
System.out.println(result);
Handler handler = null;
WXInter wxLoginInter = new WXInter(context, handler);
wxLoginInter.getInstance().asasasas(result);
}
});
}
});
break;
default:
break;
}
finish();
}
}
至此,微信登录就已经成功了,需要小伙伴们,耐心的看完,你一定做的出来,我做的时候,MD,用了友盟, 全部做出来了,又让我重新用官方的做,我当时内心是崩溃的,也很着急。 但是没办法,领导的任务还是要完成,只要你用心,耐心的看完我这个,你就一定能做出来。
相关文章推荐
- 社交巨头三国杀:微信、WhatsApp、Line到底有啥区别?
- 微信悄悄升级群聊功能:个人微信营销号的福音
- 我是运营,我没有假期
- 如何做到日消息量100万的微信公众号?
- 论微信取消推送功能的可能性(原创)
- 微信的成功,靠的是QQ导流吗?
- 微信服务号推送模板消息接口
- PHP限制页面只能在微信自带浏览器访问的代码
- HTML5实现微信拍摄上传照片功能
- 微信小程序去哪里找 小程序到底如何使用(附小程序名单)
- 使用jQuery.wechat构建微信WEB应用
- nw.js实现类似微信的聊天软件
- jquery1.8版本使用ajax实现微信调用出现的问题分析及解决办法
- JS版微信6.0分享接口用法分析
- 大家在抢红包,程序员在研究红包算法
- js如何判断用户是否是用微信浏览器
- java制作仿微信录制小视频控件