关闭

官方SDK微信第三方登录

标签: 微信官方sdk
1620人阅读 评论(0) 收藏 举报
分类:
前段时间写了用友盟的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,用了友盟,
全部做出来了,又让我重新用官方的做,我当时内心是崩溃的,也很着急。
但是没办法,领导的任务还是要完成,只要你用心,耐心的看完我这个,你就一定能做出来。
2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12565次
    • 积分:490
    • 等级:
    • 排名:千里之外
    • 原创:37篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论