最近公司要求我这个后端做Android的微信扫码登录功能:打开应用,用手机微信扫码二维码,完成微信授权登录。我一听头都大了,这我也没做过没听说过啊,于是查看了微信官方文档,和网上很多资料。遇到了非常非常多的坑,今天来分享一下,让第一次接触到的同学借鉴一下。(保姆级教学,小白跟着操作也能实现功能!!!)
一,微信开放平台 (qq.com)
1,首先安卓应用要想实现微信扫码登录,必须要申请微信的移动应用开发。
跟着流程去申请,没有什么难点,唯一的坑就是包名和应用签名的填写,包名就填写你自己的包名,应用签名要是不知道在哪里看就去下图这个地方去下载工具获取签名。
申请通过后就可以用AppID和AppSecret来开发功能了。
二,下载 SDK 及 API 文档
Android Studio 环境下:
- 在 build.gradle 文件中,添加如下依赖即可:
dependencies {
api 'com.tencent.mm.opensdk:wechat-sdk-android:+'
}
(从6.8.0版本开始,请使用 wechat-sdk-android )
- 由于 jCenter 服务关停,需要修改成引用 Maven Central,在项目的根 build.gradle 文件中,添加如下代码即可:
buildscript {
repositories {
jcenter() // 原有 jCenter 引用可继续保留
mavenCentral()
}
}
allprojects {
repositories {
jcenter() // 原有 jCenter 引用可继续保留
mavenCentral()
}
}
这一步没什么说的,复制粘贴微信开放平台里面的教程就OK。
三,开发微信扫码功能(先把需要获取的东西和步骤捋清)
这里要注意了,第一次看官方文档的肯定看不懂它在说什么。
说的简简单单,通过接口发起授权,然后在回调接口中获取到二维码,展示到app中,最后用户扫码进行授权登录。这谁不知道啊,路上随便拉个用过微信的人都懂,还用你这介绍?你倒是写出来怎么做啊😓。我当时也是看了好几遍都不知道要干什么,然后去网上结合资料最后才弄明白。
注意,第一步其实在这里!
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183
1,获取 Access token,上面连接里写的很清楚了,不用过多解释。
复制链接填上自己的AppID和AppSecret去浏览器里面访问测试一下返回的正确不。
2, 获取 sdk_ticket,上图写了,用第一步获取到的Access token再去获取sdk_ticket,这些应该看得懂吧。有没有返回成功复制浏览器里面看看就知道了。
3,进行生成签名。(下面有代码,需要修改的地方修改成自己的就行了)
4, 生成二维码,将二维码显示在app中,然后扫码。下面有详细代码解释
oauth.auth(APPID, //应用唯一标识
"snsapi_userinfo", //demo给的是snsapi_login,此处是坑
nonceStr,
timestamp,
ShaUtils.encode(string1), //签名,步骤四生成的签名
this); // 授权完成回调接口(OAuthListener)
OAuthListener
/**
* auth之后返回的二维码接口
*
* @param qrcodeImgPath 废弃
* @param imgBuf 二维码图片数据
*/
void onAuthGotQrcode(String qrcodeImgPath, byte[] imgBuf);
/**
* 用户扫描二维码之后,回调该接口
*/
void onQrcodeScanned();
/**
* 用户点击授权后,回调该接口
*/
void onAuthFinish(OAuthErrCode errCode, String authCode);
5、获取新的token及openid
onAuthFinish即用户授权后