Android进阶——安卓接入微信,获取OpenID

需求:接入微信支付,需要获取 OpenID。


微信开放平台上面对大多数步骤都有详细的介绍。但是……,还是自己梳理一下吧。
1.申请AppID。
    (微信支付或微信登录等功能需要进行开发者资质认证,准备好300大洋)
2.下载最新SDK。
3.导入jar包,并配置权限。
4.代码实现
  ①  注册到微信
// 通过WXAPIFactory工厂,获取IWXAPI的实例
api = WXAPIFactory.createWXAPI(this, Constants.APP_ID, true);
api.handleIntent(getIntent(), this);
// 将该app注册到微信
api.registerApp(Constants.APP_ID);
   ②  发送请求
final SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wechat_sdk_demo_test";
api.sendReq(req);
   ③ 接受微信请求(获取code值)
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
@Override
public void onResp(BaseResp resp) {
    int result = 0;
    SendAuth.Resp re = ((SendAuth.Resp) resp);
    String code = re.code;

    switch (resp.errCode) {
        case BaseResp.ErrCode.ERR_OK:
            result = R.string.errcode_success;
            getOpenID(code);

            break;
        case BaseResp.ErrCode.ERR_USER_CANCEL:
            result = R.string.errcode_cancel;
            break;
        case BaseResp.ErrCode.ERR_AUTH_DENIED:
            result = R.string.errcode_deny;
            break;
        default:
            result = R.string.errcode_unknown;
            break;
    }

    Toast.makeText(this, result, Toast.LENGTH_LONG).show();
    Toast.makeText(this, code, Toast.LENGTH_LONG).show();
}
   ④ 通过code获取access_token,code等数据
private void getOpenID(String code) {
    // APP_ID和APP_Secret在微信开发平台添加应用的时候会生成,grant_type 用默认的"authorization_code"即可.
    String urlStr = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+Constants.APP_ID+"&secret="+Constants.APP_Secret+
            "&code="+code+"&grant_type=authorization_code";

    HttpUtils http = new HttpUtils();
    // 设置超时时间
    //        http.configCurrentHttpCacheExpiry(1000 * 10);
    http.send(HttpRequest.HttpMethod.GET, urlStr, null,
            new RequestCallBack<String>() {
                // 接口回调
                @Override
                public void onSuccess(ResponseInfo<String> info) {
                    System.out.println("返回的json字符串:" + info.result);
                    Toast.makeText(getApplicationContext(), info.result, Toast.LENGTH_SHORT).show();

                    JSONObject obj = null;
                    try {
                        obj = new JSONObject(info.result);
                        //toast  OpenID
                        Toast.makeText(getApplicationContext(), obj.getString("openid"), Toast.LENGTH_LONG).show();

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }

                @Override
                public void onFailure(com.lidroid.xutils.exception.HttpException e, String s) {

                }
            });
}


注意事项:
1.下载的SDK一定要是最新的,旧一点的SDK里面在获取code的时候没有 .code属性,比如官方demo中万年不变的sdk就害的我很惨。
2.调试时的应用签名和正式版的应用签名是不一致的,应该区别对待,分别获取。签名生成工具链接
3.网络访问HttpUtils用的是xUtils.jar包里面的类,不要误会了。





  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值