android程序集成微信登录

第一步

需要到官网上注册、认证 微信开放平台:https://open.weixin.qq.com 网站

代码:


下面红框中的这些代码就可以调起微信了。然后授权成功后,微信会返回一个code



1,要在你在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity.java文件,输入类似下



2,WXEntryActivity.java类的代码如下:这个类中介绍如何接收微信回传的code信息。

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
    private static final String TAG = "WXEntryActivity";
    private IWXAPI api;
    OkHttpClient okHttpClient;
    String adresseMAC;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        api = WXAPIFactory.createWXAPI(this, WEIXIN_APP_ID, true);
        api.handleIntent(getIntent(), this);
        adresseMAC = StringUtils.getAdresseMAC(this);
    }
    @Override
    public void onReq(BaseReq baseReq) {
    }
    @Override
    public void onResp(BaseResp resp) {
        if (resp instanceof SendAuth.Resp) {

            String code = ((SendAuth.Resp) resp).code;
            if (code == null) {
                code = getIntent().getStringExtra("_wxapi_sendauth_resp_token");
            }
            Log.i(TAG, "-----------codeaaaaa------>" + code);
            switch (resp.errCode) {
                case BaseResp.ErrCode.ERR_OK:
                    //发送成功
            //拿到了微信返回的code,立马再去请求access_token
                    getAccess_token(code);
                    break;
                case BaseResp.ErrCode.ERR_USER_CANCEL:
                    //发送取消
            Log.i(TAG, "-----------code----CANCEL-->");
                    break;
                case BaseResp.ErrCode.ERR_AUTH_DENIED:
                    //发送被拒绝
            Log.i(TAG, "-----------code----DENIED-->");
                    break;
            }
        }
    }
    /**
     * 获取openid accessToken值用于后期操作
     *
     * @param code 请求码
     */
    private void getAccess_token(final String code) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                //get的方式提交就是url拼接的方式
                String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=wxac99b8441a38c8b5&secret=72e1e271e54fc3e58e2fe5af722f96da&code=" + code + "&grant_type=authorization_code";
                try {
                    URL httpUrl = new URL(url);
                    HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();//与服务器建立连接;
                    conn.setReadTimeout(5000);
                    conn.setRequestMethod("GET");//设置请求方式为GET
                    final StringBuffer sb = new StringBuffer();//把获取的数据不断存放到StringBuffer中;
                    BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));//使用reader向输入流中读取数据,并不断存放到StringBuffer中;
                    String line;
                    while ((line = reader.readLine()) != null) {//只要还没有读取完,就不断读取;
                        sb.append(line);//StringBuffer中添加;
                    }
                    String toString = sb.toString();
                    Log.i(TAG, "----token--->" + toString);
                    JSONObject jsonObject = new JSONObject(toString);
                    String openid = jsonObject.getString("openid").toString().trim();
                    String access_token = jsonObject.getString("access_token").toString().trim();
                    getUserMesg(access_token, openid);

                } catch (ProtocolException e1) {
                    e1.printStackTrace();
                } catch (MalformedURLException e1) {
                    e1.printStackTrace();
                } catch (IOException e1) {
                    e1.printStackTrace();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
/**
 * 获取微信的个人信息
 *
 * @param access_token
 * @param openid
 */
private void getUserMesg(final String access_token, final String openid) {

    final String url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + access_token + "&openid=" + openid;

    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                URL httpUrl = new URL(url);
                HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();//与服务器建立连接;
                conn.setReadTimeout(5000);
                conn.setRequestMethod("GET");//设置请求方式为GET
                final StringBuffer sb = new StringBuffer();//把获取的数据不断存放到StringBuffer中;
                BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));//使用reader向输入流中读取数据,并不断存放到StringBuffer中;
                String line;
                while ((line = reader.readLine()) != null) {//只要还没有读取完,就不断读取;
                    sb.append(line);//StringBuffer中添加;
                }
                String toString = sb.toString();
Log.i(TAG, "----返回的个人信息的json--->" + toString);
JSONObject jsonObject = new JSONObject(toString); String openid = jsonObject.getString("openid").toString().trim(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (ProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } } }).start();}



第三步:

最后在在AndroidManifest.xml中加入下面的代码:



备注: 微信登录,支付等一些其他的功能需要付费开通使用,官网自己创建成功的应用下,如下图:






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值