Android 实现微信扫码登陆功能-详细教程

最近项目需求中有一个微信扫码登陆功能,即用手机微信扫码功能扫描终端二维码实现登陆的功能

随即打开微信开发者文档查看,不亏为官方,简洁明了,看得我是一脸懵逼,踩了N多坑,太不友好了,言归正传,希望对一些有需要的朋友提供帮助,

一;导入 微信sdk  可以 直接在App下的Build中添加依赖  也可直接下载jar包导入(我是用的jar包)

         

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

         2、下载微信SDKjar包复制到项目lib中,然后依赖到项目中即可

二;首先根据APP的Appid(申请的appID)和AppSecret(秘钥,这两个字段为在微信平台申请的个人唯一参数)获取access_token:

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

       

三; 通过获取到的access_token,获取微信扫码登陆sdk_ticket值

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

回执信息为

{"errcode":0,"errmsg":"ok","ticket":"-p3A5zVP95IuafPhzA6lRR95_F9nZEBfJ_n4E9t8ZFWKJTDPOwccVQhHCwDBmvLkayF_jh-m9HOExhumOziDWA","expires_in":7200}


四;通过第三步回执的信息生成字符串 ,参与为appid(申请的appID),noncestr(随机字符串), sdk_ticket(第三步获取的), timestamp(时间戳),(随机字符串生成跟时间戳生成方法自行百度)

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

五:把第四步生成的string1 字符串,对string1进行sha1签名,得到signature ,加密方法自行百度

其中sha字段进行了数据加密:EncrypUtils.java附上代码:public class EncryptUtils {
public static String getSHA(String info) {
byte[] digesta = null;
try {
// 得到一个SHA-1的消息摘要
MessageDigest alga = MessageDigest.getInstance(“SHA-1”);
// 添加要进行计算摘要的信息
alga.update(info.getBytes());
// 得到该摘要
digesta = alga.digest();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
// 将摘要转为字符串
String rs = byte2hex(digesta);
return rs;
}private static String byte2hex(byte[] b) {String hs = "";String stmp = "";for (byte aB : b) {stmp = (Integer.toHexString(aB & 0XFF));if (stmp.length() == 1) {hs = hs + "0" + stmp;} else {hs = hs + stmp;}}return hs;
}}

六;通过IDiffDevOAuth.auth()接口发起授权,             

 IDiffDevOAuth oauth = DiffDevOAuthFactory.getDiffDevOAuth();oauth.auth("appid", //应用唯一标识"snsapi_userinfo",//填写snsapi_userinfo即可,demo给的是snsapi_login,此处是坑"noncestr",//一个随机的尽量不重复的字符串"timestamp",//时间戳sha1, //签名,步骤五生成的签名oAuthListener);//授权流程,回调接口

七;然后在初始化OAuthListener方法,然后在OAuthListener.onAuthGotQrcode()回调接口中获取二维码

/*** auth之后返回的二维码接口** @param qrcodeImgPath 废弃* @param imgBuf 二维码图片数据*/
void onAuthGotQrcode(String qrcodeImgPath, byte[] imgBuf);
/*** 用户扫描二维码之后,回调改接口*/
void onQrcodeScanned();
/*** 用户点击授权后,回调改接口*/
void onAuthFinish(OAuthErrCode errCode, String authCode);


  八;最后我通过Glide图片加载框架把二维码展示出来,                     

Glide.with(App.getInstance().getContext()).load(qrcodeImgPath) .signature(new StringSignature(UUID.randomUUID().toString())) // 重点在这行 ,Glide有缓存,防止重复.error(R.mipmap.ic_launcher) .into(ewmImg);//ewmImg图片ID

九;获取新的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

十;获取用户信息,使用上一步拿到的access_token&openid=上一步拿到的openid

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


结语:有时候官方文档很不友好,所以一定要静下心仔细看,此篇文章只是实现了扫码登陆的业务,一些细节没做处理,比如说凭证有限时间的问题,如果不足欢迎大家指教,
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/42205.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3dmax2010软件下载3dmax2010安装教程

3dmax2010(32位)下载:https://pan.baidu.com/s/1LLtyCWIiMBf39rydsg-jLQ 3dmax2010(64位)下载:https://pan.baidu.com/s/1TluogyqbOMBCrZUQbbo_jg 【安装包下载方法】:复制下载链接,…

阿里云OCR图片文字识别使用教程

第一步: 租赁阿里云OCR文字识别服务 第二步: 购买服务后会对应的 appCode 第三步: 使用aliyun提供的接口 package io.renren;import io.renren.utils.HttpUtils; import org.apache.http.HttpResponse; import org.apache.http.util.EntityUtils;import java.util.*;/*** au…

Android Rxjava教程:清晰 简洁 易懂的Rxjava入门教程

前言 Rxjava由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎。 image 本文主要: 面向 刚接触Rxjava的初学者提供了一份 清晰、简洁、易懂的Rxjava入门教程 涵盖 基本介绍、原理 & 具体使用等 解决的是初学…

Revit2018下载和安装教程

Revit2018下载地址:https://pan.baidu.com/s/1YMUfuRs1sd3B6wEL5y9EZg 下载方法:复制下载链接,粘贴至浏览器网址栏打开,点击保存到网盘,打开网盘客户端,找到刚保存的Revit安装包,下载到电脑上&a…

水壶接水烧水教程

写一下前因后果,是个不错的故事 起因 公司一直有免费的大桶水供应,直到那一天,负责此事的尹经理涉嫌学历造假,被开除,大桶水断供。 初步解决 虽然没有大桶水,但同学们总是要喝水的,总买小瓶…

AI2019下载Adobe Illustrator CC2019安装教程

Illustrator(简称“AI”)是一款非常强大的矢量图制图软件,在平面设计、UI设计、广告设计等诸多行业都有广泛的应用,并且作为必备软件有它的不可替代性; 但很多朋友在开始安装AI软件的时候却遇到种种困难,为…

android轮播图实现方案,Android轮播图实现教程

ListView的headerView设置为轮播图之后结合上/下拉刷新/加载的模式成为现在大多数APP的一个必须具备的功能,对于许多初学者来说想要实现轮播图这样一个集线程睡眠、自动处理、替换过程中刷新UI界面的组合功能非常困难,没有思路,感觉无从下手,去搜索各种实现方案,发现目前充…

PS2015下载PSCC2015安装教程

PSCC2015(64位)下载链接:https://pan.baidu.com/s/1FTRjQmYaDgaJVQZtO7vT0w PSCC2015(32位)下载链接:https://pan.baidu.com/s/1FsJ8wq9tdcbjnjv55tqDaA PSCC2015.5(64位)下载链接&a…

Elasticsearch教程应用场景

Elasticsearch 使用 1. 搜索使用 1.1 搜索请求的结构体 现在我们已经看到了一些基本知识,让我们尝试一下更加真实的数据集(结构化数据)。我准备了关于金庸先生的小 说的 JSON 文档样本。每个文档都有以下模式: // 样本一 { …

3dmax2009下载3dmax2009安装教程

3dmax2009(32/64位)下载:https://pan.baidu.com/s/1SarHkl3RCxeqSVBnYHG8XA 【安装包下载方法】:复制下载链接,粘贴至浏览器网址栏(非搜索框哈)打开,无提取码,保存至网盘…

Spring Cloud入门到实战系列教程

本教程由猿天地尹吉欢进行整理,欢迎大家转载分享,请注明文章出处。 文章对应源码地址:https://github.com/yinjihuan/spring-cloud #Spring Cloud Eureka Spring Cloud Eureka 初探 Spring Cloud Eureka 增加权限认证 Spring Cloud Eureka …

代码审查软件 Gerrit的安装教程

一、简单介绍 Gerrit,一种免费、开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件程序员可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。 二、软件安装 需要安装的环…

Typora导出word文件教程

使用typora可能会遇到需要导出word文件的需求。我们在typora中进行如下操作 如果你是第一次导出word文件,那么他会提示你让你安装pandoc这样一个插件,我提供一个地址 各种操作系统的的pandoc插件我都放在这里面,window系统一般下载倒数第二个…

PS2018下载PSCC2018安装教程

PSCC2018(64位)下载链接:https://pan.baidu.com/s/1gV9RmsgUdeJ8AXwMXo9aaQ 【下载方法】复制下载链接,粘贴纸浏览器网址栏(无提取码)打开,保存到网盘,打开网盘客户端,下…

搭建网站教程

建立一个属于自己的网站大致分为以下几个流程 一.购买域名 1.首先来到阿里云,搜一个你想要买的网址 2.来到这一个界面后选择一个域名进行购买 后到域名列表,此处可以看到你已经购买的域名。 点击未实名认证,进入实名认证界面完善自己信息&…

Spring Boot入门到实战系列教程

本教程由猿天地尹吉欢进行整理,欢迎大家转载分享,请注明文章出处。 #Spring Boot 相关课程推荐: Spring Boot从入门到精通课程 Spring Boot Web开发前端性能调优 从零开始手写百度云盘搜索系统实战课程 spring boot开发rest api实战课程 …

微服务中的短信服务如何设计?

发送短信功能,在开发过程中是最常见的需求。用户登录验证码的发送,活动促销短信的发送等。本Chat将带领你深入的去学习如何设计和实现一个通用的基础短信服务,采用Spring Boot开发短信服务,最终会注册到Spring Cloud微服务体系中&…

Revit2020下载Revit2020安装教程

Revit2020下载地址:https://pan.baidu.com/s/11Y4CMBlyY3XiUp4-YRWTdA 下载方法:复制下载链接,粘贴至浏览器网址栏打开,点击保存到网盘,打开百度网盘客户端,找到刚保存的Revit安装包,下载到电脑…

内网穿透NPS使用教程

下载NPS相关的服务端安装包、客户端安装包(选择版本号为:v0.26.9); 下载地址:Releases ehang-io/nps GitHub 备注:NPS使用相关官网文档地址:Document nps服务端安装说明: 1、在…

PSCS6下载和安装教程

PS CS6(64位32位)下载链接:https://pan.baidu.com/s/1z0qqFvZTKJHJ2NdJHGAvjA 【下载方法】复制下载链接,粘贴纸浏览器网址栏(无提取码)打开,保存到网盘,打开网盘客户端,…