微信登录接入

微信开发者平台,注册开发者账号,申请应用以下为官方登录介绍

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=a41d294b89a422288575227051d8dcba49b58de4&lang=zh_CN

开始接入前必须具备的准备几个参数
app包名             WEIXIN_APP_ID :注册应用的appid                       AppSecret : 注册应用的appSecret  

3 在开发者平台里 将app 包名 签名【使用微信开发者平台提供的签名获取工具】要一致

   【安装好release签名过的apk   安装好微信开发者提供的签名工具   输入要申请登录的apk包名,,获取签名按下列添加】


微信SDK 集成:

包含统计功能:

dependencies {
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}

不包含统计功能:

dependencies {
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}

微信登录集成步骤

1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;

发起登录授权:

public class LoginActivity extends BaseActivity implements ILoginView.View {
    /**
     * 微信登录相关
     */
    private IWXAPI api;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        ButterKnife.bind(this);
        hintTitle();       
        //通过WXAPIFactory工厂获取IWXApI的示例
        api = WXAPIFactory.createWXAPI(this,Config.APP_ID_WX,true);
        //将应用的appid注册到微信
        api.registerApp(Config.APP_ID_WX);
    }
    @OnClick({R.id.login_tv_register, R.id.login_btn_go, R.id.login_tv_forget_password,R.id.iv_other_login_qq,R.id.iv_other_login_sina,R.id.iv_other_login_wx})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            /**
snsapi_base属于基础接口,若应用已拥有其它scope权限,则默认拥有snsapi_base的权限。使用snsapi_base可以让移动端网页授权绕过跳转授权登录页请求用户授权的动作,直接跳转第三方网页带上授权临时票据(code),但会使得用户已授权作用域(scope)仅为snsapi_base,从而导致无法获取到需要用户授权才允许获得的数据和基础功能。
*/
            case R.id.iv_other_login_wx:
                SendAuth.Req req = new SendAuth.Req();
                req.scope = "snsapi_userinfo";
                req.state = "wechat_sdk_微信登录"; // 自行填写
                api.sendReq(req);
                break;
        }
    }
}

填写回调:

在包名的目录下创建wxapi子包(必须,这个包名必须是配置清单的package值),比如我的包名是:com.xwb.com那么WXEntryActivity.java类完整路径就是com.xwb.com.wxapi.WXEntryActivity, 

对应的清单文件:

<activity android:name=".wxapi.WXEntryActivity"
            android:exported="true"/>

对应的WXEntryActivity

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
  private IWXAPI api;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 注册API
    api = WXAPIFactory.createWXAPI(this, ShareConfig.WEIXIN_APP_ID);
    api.handleIntent(getIntent(), this);
  }

  @Override
  protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    api.handleIntent(intent, this);
  }

  @Override
  public void onReq(BaseReq baseReq) {
    finish();
  }

  @Override
  public void onResp(BaseResp resp) {
    switch (resp.errCode) {
      case BaseResp.ErrCode.ERR_OK:
        Log.e("flag", "-----code:ok");
        if (resp instanceof SendAuth.Resp) {
          SendAuth.Resp sendAuthResp = (SendAuth.Resp) resp;
          String code = sendAuthResp.code;
          getAccessToken(code);
          // 发起登录请求
          Log.e("flag", "-----code:" + sendAuthResp.code);
        }
        break;
      case BaseResp.ErrCode.ERR_USER_CANCEL:
        if (resp instanceof SendAuth.Resp) {}
        Log.e("flag", "-----授权取消:");
        Toast.makeText(this, "授权取消:", Toast.LENGTH_SHORT).show();
        finish();
        break;
      case BaseResp.ErrCode.ERR_AUTH_DENIED:
        if (resp instanceof SendAuth.Resp) {}
        Log.e("flag", "-----授权失败:");
        Toast.makeText(this, "授权失败:", Toast.LENGTH_SHORT).show();
        finish();
        break;
      default:
        break;
    }
  }

  // 根据授权code  获取AccessToken
  public void getAccessToken(code){

  }
 }

2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;   【请求方式get】

通过回调信息获取code 获取access_token   对应api为

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

appid:应用唯一标识,在微信开放平台提交应用审核通过后获得 
secret:应用密钥AppSecret,在微信开放平台提交应用审核通过后获得 
code:填写第一步获取的code参数 

grant_type:固定值,写authorization_code

响应数据为:

{
    "access_token":"hSTsG7nq8e0yEFhOZFT-wAdTsjT9jC0AYvGRiqGwwR6Hko99o_mmYR8KO18kMxeDOz33d9tnBhMzu_NLsIha2HqvTm1OGPL1weBdvXZVFFc",
    "expires_in":7200,
    "refresh_token":"AeN69M27vttqCedxoIOSeY6cxvbt1N584HjEOclUXtNWxRaZWgmtfvn2jWIDX4tq5t-7Btlc1UkEyyFhV7HVIMXe-V6RPjoZdF525vLzev8",
    "openid":"olmt4wfxS21G4VeeVX16_zUhZezY",
    "scope":"snsapi_userinfo",
    "unionid":"o5aWQwAa7niCIXhAIRBOwglIJ7UQ"
}


3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

根据获取的access_token 进行获取用户信息 获取指定参数 跟自己服务器发起微信登录

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID请求方式:GET

access_token 和 openid都是上步获取到的

相应信息为

{
    "openid":"olmt4wfxS24VeeVX16_zUhZezY",
    "nickname":"张三",
    "sex":1,
    "language":"zh_CN",
    "city":"Shenzhen",
    "province":"Guangdong",
    "country":"CN",
    "headimgurl":"http://wx.qlogo.cn/mmopen/ajNVdqHZLLDickRibe5D4x2ADgSfianmA4kK9hY4esrvGhmAFCe5wjox6b6pL4ibiblKnxibzVtGdqfa2UVHACfmmUsQ/0",
    "privilege":[

    ],
    "unionid":"o5aWQwAa7niCIXhAIRBOwglIJ7UQ"
}

获取到微信用户信息  就可以带着  openid 等用户信息  请求自己服务器接口了。微信登录实现完成。

官方文档为:

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317851&token=a41d294b89a422288575227051d8dcba49b58de4&lang=zh_CN




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值