开发日志:企业微信实现扫码登录(WEB)
一:获取扫码登陆所需的参数:appid,secret,agentid
登录企业微信:https://work.weixin.qq.com/
扫码登录文档:https://work.weixin.qq.com/api/doc/90000/90135/90988
1:获取appid
点击我的企业就可以看到企业ID信息,这就是appid

2:获取secret和agentid
(1):点击应用管理-》点击创建应用
(2):应用创建完成之后我们就可以在应用中看到secret和agentid
2:配置企业微信授权登录

二:开发企业微信二维码登录功能
(1):开发企业微信二维码登录页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title>企业微信扫码登录</title>
<script src="http://rescdn.qqmail.com/node/ww/wwopenmng/js/sso/wwLogin-1.0.0.js"></script>
</head>
<body class="body">
<div id="wx_reg" style="text-align: center;margin-top: 10%;"> </div> <script>
var wwLogin = new WwLogin({
"id": "wx_reg",
"appid": "wwee5d37c708b1ecfb",
"agentid": "1000020",
"redirect_uri": encodeURIComponent('http://www.xxx.com/login/qywxlogin.ashx?type=qywxLogin'),
"state": "lmg",
"href":"",
});
</script>
</body>
</html>
(2):开发企业微信二维码登录回调 qywxlogin.ashx
<%@ WebHandler Language="C#" Class="qywxlogin" Debug="true" %> using System;
using System.IO;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Web.SessionState;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Text; using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq; public class qywxlogin : IHttpHandler, IRequiresSessionState
{
//企业微信
public string appid = "";
publi string secret = "";
public string PhyPath = "";
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
context.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", context.Session.SessionID)); PhyPath = context.Server.MapPath("/");
string type = context.Request["type"];
switch(type) {
case "qywxLogin": qywxLogin(context); break;
default: context.Response.Write("非法访问"); break;
}
context.Response.End();
}
public void qywxLogin(HttpContext c){ string state = c.Request["state"];
string code = c.Request["code"]; string url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+appid+"&corpsecret="+secret+"&debug=1";
var token = HttpGet(url);
if(!string.IsNullOrEmpty(token)) {
JObject sk = JObject.Parse(token);
if(sk["access_token"] != null) {
string accessToken =sk["access_token"].ToString();
url ="https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token="+accessToken+"&code="+code+"&debug=1";
var getuserinfo =HttpGet(url);
JObject sk1 = JObject.Parse(getuserinfo);
if(sk1["UserId"] != null) {
string UserId=sk1["UserId"].ToString(); //企业微信通讯录里的账户名称
string sql ="select * from [Base_Users] where WeixinID='"+UserId+"'";
DataTable dtW = DataBase.ExecuteTable(sql);
if(dtW != null && dtW.Rows.Count > 0) {
//写 session
}else{
//绑定页面
c.Response.Redirect("qywxbind.html?WeixinID="+UserId);
}
}else{
c.Response.Write(getuserinfo);
}
}else{
c.Response.Write(token);
}
}else{
c.Response.Write("验证错误");
}
}
#region GET/POST
public string HttpGet(string url) {
StringBuilder builder = new StringBuilder();
builder.AppendLine("=========================================================");
builder.AppendLine("url:" + url);
string retString = string.Empty;
try {
string errMsg = string.Empty;
HttpWebRequest wbRequest = (HttpWebRequest)WebRequest.Create(url);
wbRequest.Method = "GET";
wbRequest.ContentType = "text/html;charset=UTF-8";
HttpWebResponse wbResponse = (HttpWebResponse)wbRequest.GetResponse();
using(Stream responseStream = wbResponse.GetResponseStream()) {
using(StreamReader sReader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"))) {
retString = sReader.ReadToEnd();
}
}
builder.AppendLine(retString); } catch(Exception ex) {
builder.AppendLine("errcode:" + ex.HResult);
builder.AppendLine("errmsg:" + ex.Message);
}
LogWeChat(builder.ToString(), "Http");
return retString;
}
public string HttpPost(string url, string param = "", Dictionary<string, string> header = null,
string contentType = "application/json") {
StringBuilder builder = new StringBuilder();
builder.AppendLine("=========================================================");
builder.AppendLine("url:" + url);
builder.AppendLine("param:" + param);
string data = "";
try {
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = contentType;
request.Accept = "*/*";
request.Timeout = 15000;
request.AllowAutoRedirect = false;
if(header != null && header.Count > 0) {
foreach(var item in header) {
request.Headers.Add(item.Key, item.Value);
}
}
if(!string.IsNullOrWhiteSpace(param)) {
byte[] byteData = UTF8Encoding.UTF8.GetBytes(param.ToString());
request.ContentLength = byteData.Length;
using(Stream postStream = request.GetRequestStream()) {
postStream.Write(byteData, 0, byteData.Length);
postStream.Close();
}
}
using(var response = request.GetResponse()) {
StreamReader reader = new StreamReader(response.GetResponseStream());
data = reader.ReadToEnd();
} builder.AppendLine(data);
} catch(Exception ex) {
builder.AppendLine("errcode:" + ex.HResult);
builder.AppendLine("errmsg:" + ex.Message);
}
LogWeChat(builder.ToString(), "Http");
return data;
}
#endregion
#region Logging
public void LogWeChat(string contents, string filename) {
try {
if(string.IsNullOrWhiteSpace(contents)) return;
string msg = string.Format(@"{0}|{1}|" + filename + "|{2}" + Environment.NewLine, DateTime.Now, "", contents);
string t = "logs";
string path = PhyPath + t;
string logfile = path + "/wechat_" + filename + "_" + DateTime.Now.ToString("yyyyMMdd") + ".log";
if(!Directory.Exists(path)) {
Directory.CreateDirectory(path);
}
File.AppendAllText(logfile, msg);
} catch { }
}
#endregion
public bool IsReusable {
get {
return false;
}
}
}
(3):企业微信二维码登录(WEB)效果图:

开发日志:企业微信实现扫码登录(WEB)的更多相关文章
- Spring Security整合企业微信的扫码登录,企微的API震惊到我了
本文代码: https://gitee.com/felord/spring-security-oauth2-tutorial/tree/wwopen/ 现在很多企业都接入了企业微信,作为私域社群工具, ...
- Java实现微信客户端扫码登录
此篇文章记录自己开发中的微信客户端扫码登录的实例以及步骤,便于以后自行学习记起的关键,看到的网友有借鉴的地方就借鉴,看不懂的也请别吐槽,毕竟每个人的思维和思路以及记录东西的方式不一样: 1.首先需要一 ...
- 钉钉扫码登录web网站
钉钉扫码登录网站 前言 由于本公司前后台分离,这里主要讲述后台的实现逻辑与过程,前端相关的一略而过.前端我们采用的是把二维码内嵌到我们的网页中. 流程如下: 1.登录钉钉后台创建一个企业应用 2.根 ...
- C#开发微信门户及应用(45)--微信扫码登录
在前面随笔<C#开发微信门户及应用(41)--基于微信开放平台的扫码登录处理>介绍了基于微信开放平台接口实现的微信扫码直接登录的过程.本篇介绍对扫码登录的一些改进和处理,以便更方便应用在实 ...
- 微信开放平台开发——网页微信扫码登录(OAuth2.0)
1.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供 ...
- Web应用多账号系统设计及微信扫码登录实现
Web应用多账号系统设计及微信扫码登录实现 1 前言概述 公司对功能测试,性能测试,安全测试等等都做了比较好的自动化后,急需要一个MIS系统来统一管理这些结果及报表. 此MIS系统特点如下: 仅内 ...
- 第三方登录:微信扫码登录(OAuth2.0)
1.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供 ...
- php微信开放平台--第三方网页微信扫码登录(OAuth2.0)
第一.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提 ...
- C#开发微信门户及应用(41)--基于微信开放平台的扫码登录处理
在现今很多网站里面,都使用了微信开放平台的扫码登录认证处理,这样做相当于把身份认证交给较为权威的第三方进行认证,在应用网站里面可以不需要存储用户的密码了.本篇介绍如何基于微信开放平台的扫码进行网站的登 ...
- C#实现像微信PC版一样的扫码登录功能
现在好些网站都支持扫码登录,感觉上安全了很多,但是本地程序扫码登录的不多,就用C#实现了一下,需要作如下准备 在官网上申请一个企业微信,有条件的话做个企业认证吧,我们的是认证过的,所以账号和本地其他系 ...
随机推荐
- 记录--P0事故预警
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 背景 某一天,前端小余同学和后端别问我小哥在做登录业务接口对接,出于业务的特殊性和安全性的考虑,她和后端小哥约定"user&qu ...
- 使用OHOS SDK构建zlib
参照OHOS IDE和SDK的安装方法配置好开发环境. 从gitee下载源码,当前最新的提交记录ID为04f42ceca40f73e2978b50e93806c2a18c1281fc. 执行如下命令: ...
- 【FAQ】关于无法判断和区分用户与地图交互手势类型的解决办法
一. 问题描述 当用户通过缩放手势.平移手势.倾斜手势和旋转手势与地图交互,控制地图移动改变其可见区域时,华为地图SDK没有提供直接获取用户手势类型的API. 二. 解决方案 华为地图SDK的地图相机 ...
- HR必备|可视化大屏助HR实现人才资源价值最大化
人力资源管理质量的优劣关系到企业可持续发展目标的实现,在信息化时代背景下,应用信息技术加强人力资源管理过程的优化,利用技术提升人力资源管理质量和效率已是大势所趋. 利用信息技术构建信息化人力资源管理平 ...
- JDBC驱动连接MogDB/opengauss
JDBC 驱动连接 MogDB/opengauss 一.环境说明 [root@node1 ~]# cat /etc/redhat-release CentOS Linux release 7.6.18 ...
- HarmonyOS自动化测试框架—Hypium
原文:https://mp.weixin.qq.com/s/nb5txfDcmGn_VZJXRPEYUQ,点击链接查看更多技术内容. 应用开发过程中,要确保应用的功能和界面能满足预期,往往需要通过测试 ...
- 实时数仓构建:Flink+OLAP查询的一些实践与思考
今天是一篇架构分享内容. 1.概述 以Flink为主的计算引擎配合OLAP查询分析引擎组合进而构建实时数仓,其技术方案的选择是我们在技术选型过程中最常见的问题之一.也是很多公司和业务支持过程中会实实在 ...
- 深入探讨下SSR与CSR有啥不同
随着互联网技术的迅速发展,用户对网页的加载速度和交互体验有了更高的期待.作为开发者,我们常常需要在服务器端渲染(SSR)与客户端渲染(CSR)之间做出选择.这两种渲染方式各有特点,适用于不同的场景和需 ...
- Django框架——图书管理系统、聚合查询、分组查询、F与Q查询
图书管理系统 1.表设计 先考虑普通字段再考虑外键字段 数据库迁移.测试数据录入 2.首页展示 3.书籍展示 4.书籍添加 5.书籍编辑 后端如何获取用户想要编辑的数据.前端如何展示出待编辑的数据 6 ...
- 如何解决打不开Microsoft Store的痛处?
换了机房后,我最喜欢的计算器和画图3d没有了,网上的方法都行不通,怎么办? 第一步,在百度上搜索你想安装的东西,例如我搜索的画图3d,就会有这个链接. 然后,把这个链接复制到这个网站的搜索框中,就会有 ...