Android集成微信SDK扫码登录功能

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lmnabc2006/article/details/84871801

最近做一个android项目,需求是登录页面加入微信二维码扫码登录入口(类似于PC端扫一扫登录),用户打开微信APP,扫描二维码,点击登录即可。当时也看了官网的相关介绍,确实踩了不少坑,写这个博客记录下。

一、准备工作

1、compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

2、Activity实现OAuthListener接口

  • onAuthGotQrcode(String qrcodeImgPath, byte[] bytes)//auth之后返回的二维码,Bitmap bmp =                          BitmapFactory.decodeByteArray(bytes, 0, bytes.length)即可获取二维码图片。
  • onQrcodeScanned()//用户扫描二维码之后,回调该方法
  • onAuthFinish(OAuthErrCode errCode, String authCode)//用户点击授权和异常信息,回调该方法

3、IDiffDevOAuth 初始化:IDiffDevOAuth  oauth = DiffDevOAuthFactory.getDiffDevOAuth();

二、获取access_token

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

三、获取Ticket

https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=2

四、生成扫码登录的签名

参与签名的字段包括第三方appid,noncestr(随机字符串), 有效的sdk_ticket, timestamp(时间戳)

String string1 = String.format("appid=%s&noncestr=%s&sdk_ticket=%s&timestamp=%s", APPID, nonceStr, ticket, timeStamp);
ShaUtils.encode(string1);

五、生成二维码

oauth.auth(APPID, //应用唯一标识
                "snsapi_userinfo", //demo给的是snsapi_login,此处是坑
                nonceStr,
                timestamp,
                ShaUtils.encode(string1), //签名,步骤四生成的签名
                this); // 授权完成回调接口(OAuthListener)

六、获取新的token及openid

onAuthFinish即用户授权后,拿返回的authcode调接口(https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code)获取新的token及openid

七、获取用户信息

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

展开阅读全文

没有更多推荐了,返回首页