H5应用调用企业微信扫一扫API扫码方法

场景:自行开发的企微应用例如扫码入库、二维码资产盘点等等

官网地址:使用说明 - 接口文档 - 企业微信开发者中心

扫一扫接口说明:企业微信扫一扫 - 接口文档 - 企业微信开发者中心

使用Js版本: http://res.wx.qq.com/open/js/jweixin-1.2.0.js

前端JS代码:

 wx.config({beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。appId: '@Model.appId', // 必填,企业微信的corpID,必须是本企业的corpID,不允许跨企业使用timestamp: '@Model.timestamp', // 必填,生成签名的时间戳nonceStr: '@Model.nonceStr', // 必填,生成签名的随机串signature: '@Model.signature',// 必填,签名,见 附录-JS-SDK使用权限签名算法jsApiList: ['scanQRCode'] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来});wx.ready(function () {// 下面是扫描后返回结果 结果在res里$('#scanQRCode1').click(function () {wx.scanQRCode({desc: 'scanQRCode desc',needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果,scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有success: function (res) {//IOS里面不加延时alert不执行不知道为嘛//setTimeout(() => {//$('#scrV').val(res.resultStr)//res.resultStr 二维码返回值//}, 500)$('#scrV').val(res.resultStr)},error: function (res) {if (res.errMsg.indexOf('function_not_exist') > 0) {alert('版本过低请升级')}}});});});

后端获取wx.config配置参数方法

定义返回类:

 public class WxJsApiConfig{public string appId {  get; set; }public string timestamp {  get; set; }public string nonceStr {  get; set; }public string signature {  get; set; }}public class WXJsapiticket{public int errcode {  get; set; }public string errmsg { get; set; }  public string ticket {  get; set; }public int expires_in {  get; set; }}

配置参数获取方法:

 private readonly string _JsApiTicket = "WeChatJsApiTicket";private readonly string _CorpID;public WXFunction(){_CorpID="自己的corpID"}internal string GetJsapiticketInfo()
{lock (this){return _cache.GetOrCreate(_JsApiTicket, token =>{string url = $@"https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token={AuthToken()}";//请求获取var client = new RestClient(url);client.Timeout = -1;var request = new RestRequest(Method.GET);IRestResponse response = client.Execute(request);if (response.IsSuccessful){//AuthDataModelWXJsapiticket jsapiticket = JsonConvert.DeserializeObject<WXJsapiticket>(response.Content);if (jsapiticket.errmsg == "ok"){//凭证有效期为7200秒//这里设置提前20分钟过期_cache.Set(_JsApiTicket, jsapiticket.ticket, DateTimeOffset.Now.AddSeconds(jsapiticket.expires_in - 600));return jsapiticket.ticket;}else{return @$"Ticket获取异常{response.Content}";}}else{return "Ticket请求失败";}});}
}public void ClearTicketCache()
{_cache.Remove(_JsApiTicket);
}internal string JsApiTicket()
{if (_cache.Get(_JsApiTicket) == null){ClearTicketCache();GetJsapiticketInfo();}return _cache.Get(_JsApiTicket)?.ToString();
}/// <summary>/// 获取JS-SDK配置信息/// </summary>/// <param name="url"></param>/// <returns></returns>public WxJsApiConfig GetJsApiInfo(string url){WxJsApiConfig jsinfo = new WxJsApiConfig();int timestamp = 1644481645;// 获取时间戳 这里网页转的当前时间 也可以直接用我的string noncestr = "Wx45f84q984as4fq89";//随机字符串 我是通过时间转的 自定义 可以直接用我的string string1 = "jsapi_ticket=" + JsApiTicket() + "&noncestr=" + noncestr + "&timestamp=" + timestamp + "&url=" + url;//拼接连接字符串string signature = SHA1(string1, Encoding.UTF8);//SHA-1加密过程 可以使用动态库 没有的直接用我的 方法在后面signature = signature.ToLower(); // 生成后转换小写jsinfo.appId = _CorpID;jsinfo.timestamp= timestamp.ToString();jsinfo.nonceStr = noncestr;jsinfo.signature = signature;return jsinfo;}/// <summary>/// sha-1加密算法/// </summary>/// <param name="content"></param>/// <param name="encode"></param>/// <returns></returns>public  string SHA1(string content, Encoding encode){try{SHA1 sha1 = new SHA1CryptoServiceProvider();byte[] bytes_in = encode.GetBytes(content);byte[] bytes_out = sha1.ComputeHash(bytes_in);sha1.Dispose();string result = BitConverter.ToString(bytes_out);result = result.Replace("-", "");return result;}catch (Exception ex){throw new Exception("SHA1加密出错:" + ex.Message);}}

控制器:

 public IActionResult SCRCode(){string url = "http://你的域名:5441/Home/SCRCode";WxJsApiConfig js =  _wxf.GetJsApiInfo(url);return View(js);}

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

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

相关文章

IO流(二)

IO流&#xff08;二&#xff09; 目录 IO流 —— 字符流IO流 —— 缓冲流IO流 —— 转换流IO流 —— 打印流IO流 —— 数据流IO流 —— 序列化流 1.IO流 —— 字符流 文件字符输入流 —— 读字符数据进来 字节流&#xff1a;适合复制文件等&#xff0c;不适合读写文本文件字…

nginx rewrite地址重写

目录 常用的nginx正则表达式 location和rewrite的区别 一、location 1.location常用匹配类型 2.location匹配机制 3.实际工作中三大匹配规则 1.网站首页匹配 2.网站静态页面&#xff0c;通过前缀匹配或通用匹配在nginx服务器本地处理 3.网站动态页面&#xff0c;通过匹…

TypeScript语法解析与进阶扩展

TypeScript 1、类型别名2、字符串字面量类型3、元组4、枚举5、类5.1、public private protected5.2、readonly5.3、抽象类5.4、静态成员5.5、类实现接口5.6、接口继承接口5.7、接口继承类 6、泛型6.1、多个类型参数6.2、泛型约束6.3、泛型接口6.4、泛型类6.5、泛型参数的默认类…

Veeam Backup Enterprise Manager身份验证绕过漏洞(CVE-2024-29849)

一、漏洞概述【漏洞通告】 漏洞名称 Veeam Backup Enterprise Manager身份验证绕过漏洞 CVE ID CVE-2024-29849 漏洞类型 身份验证绕过 发现时间 2024-05-22 漏洞评分 9.8 漏洞等级 严重 攻击向量 网络 所需权限 无 利用难度 低 用户交互 无 PoC/EXP 已…

PostgreSQL源码分析——initdb

数据库初始化 在安装完数据库后&#xff0c;需要进行初始化数据库操作&#xff0c;对应PostgreSQL数据库中就是需要进行initdb后&#xff0c;才能对数据库进行启动。initdb的过程&#xff0c;其实就是创建数据库实例的过程&#xff0c;生成模板数据库和相应的目录、文件信息&a…

uniapp小程序限制微信群访问(图文教程)

我有一个微信小程序 “程序员实用资源” 我现在只想让我的微信群可以访问这个小程序的所有功能 所以我必须对我小程序的来源进行限制&#xff0c;让部分功能在正常访问的时候提示没有加群&#xff0c;不可访问&#xff0c;只有从群内点击进入小程序的时候才可以访问这部分功能…

目标检测顶会新成果!20个突破性方法,更高性能,更强理解与分析能力!

【目标检测】在近年来的深度学习领域中备受关注&#xff0c;它通过识别和定位图像中的目标对象&#xff0c;提升了模型在图像理解和分析方面的能力。目标检测技术在自动驾驶、安防监控和医疗影像分析等任务中取得了显著成果。其独特的方法和卓越的表现使其成为研究热点之一。 为…

ESP32蓝牙串口通讯

文章目录 一、前言二、代码三、运行 一、前言 ESP32支持经典蓝牙和低功耗蓝牙&#xff08;BLE&#xff09;,经典蓝牙可在计算机上模拟出一个串口&#xff0c;使得ESP32可以以串口的方式和计算机通信。 二、代码 #include "BluetoothSerial.h"String device_name …

2025计算机毕业设计选题题目推荐-毕设题目汇总大全

选题在于精&#xff0c;以下是推荐的容易答辩的选题&#xff1a; SpringBoot Vue选题: 基于SpringBoot Vue家政服务系统 基于SpringBoot Vue非物质文化遗产数字化传承 基于SpringBoot Vue兽医站管理系统 基于SpringBoot Vue毕业设计选题管理系统 基于SpringBoot Vue灾害应急救援…

004 AOP使用

文章目录 基于AspectJ的AOP的使用添加依赖编写目标类和目标方法使用XML实现实现步骤切入点表达式通知类型 使用注解实现实现步骤环绕通知注解配置定义通用切入点 纯注解方式 基于AspectJ的AOP的使用 其实就是指的SpringAspectJ整合&#xff0c;不过Spring已经将AspectJ收录到自…

软考中级证在手里,感觉白躺家里了?

软考中级&#xff0c;最适合考的专业是《系统集成项目管理工程师》&#xff0c;特别适合零基础的人&#xff01; 2022年中级职称的报名条件和要求非常宽松&#xff0c;即使没有学历、零基础和相关工作经验也可以考试&#xff01;&#xff01;&#xff01; 一、职称的含金量 …

docker 中 File Sharing 和Volumes 的区别

在 Docker 中&#xff0c;File Sharing 和 Volumes 都涉及到将文件和目录从主机系统映射到容器中&#xff0c;但它们的用途和实现方式有一些重要的区别&#xff1a; 一、简介 File Sharing 是 Docker Desktop 在 Windows 和 macOS 上的一项功能&#xff0c;允许你将主机文件系…

中国最厉害的改名大师颜廷利:食物的真正人生意义是识悟

在探索人生意义的深邃征途中&#xff0c;我们本应以“识悟”为航标&#xff0c;不断扬帆远航&#xff0c;以实现自我的升华。然而&#xff0c;当回望人世繁华&#xff0c;古往今来&#xff0c;无论男女老少&#xff0c;似乎都在“食物”的陪伴下&#xff0c;徘徊往复&#xff0…

计算机网络复习

2024年whut 概述 1.计算机网络的目标&#xff1a;信息传输和资源共享 2.网络协议的要素&#xff08;必考&#xff09;&#xff1a; 语法&#xff1a;数据信息和控制信息的结构或格式 语义&#xff1a;要发出何种控制信息&#xff0c;完成何种动作&#xff0c;做出何种响应 同…

safari浏览器无法连接到服务器

问题&#xff1a;MacBook pro&#xff0c;网络连接正常&#xff0c;可以使用各种软件上网&#xff0c;唯独safari浏览器打不开网页&#xff0c;报错说Safari无法连接到服务器&#xff1b; 原因&#xff1a;使用了VPN&#xff0c;VPN自动更改了网络设置&#xff0c;导致Safari浏…

监控局域网电脑屏幕的办法,最简单的三种方法,好用!

在现代企业管理和家庭教育环境中&#xff0c;对局域网内电脑屏幕进行有效监控成为了保障信息安全、提升工作效率和监督行为规范的重要手段。 监控局域网电脑屏幕不仅可以帮助管理者了解员工的工作状态&#xff0c;确保资源的合理使用&#xff0c;还能在一定程度上预防潜在的网…

银行卡归属地查询-银行卡归属地接口-银行卡归属地API

接口简介&#xff1a;通过银行卡号查询国内外银行名称、银行卡卡种、卡品牌以及银行卡发卡省份和城市&#xff0c;支持借记卡和部分贷记卡的发卡省市查询。 若银行卡是农村信用社&#xff0c;归属地无法区分到城市&#xff0c;只能到省份 接口地址&#xff1a;https://www.wapi…

CentOS 7 安装MySQL以及常见问题解决

访问网站&#xff1a;http://repo.mysql.com 找到适配CentOS 7版本的MySQL 的YUM仓库包rpm文件&#xff0c;如下图 下载后&#xff0c;找到安装包的位置 空白处右键&#xff0c;选择在终端打开 查看当前目录下文件 # 安装MySQL 5.7的YUM仓库包rpm -ivh mysql57-community-rele…

js的导入导出

js 的导入导出 在 JavaScript 中&#xff0c;可以使用 import 关键字来导入其他模块或文件。而使用 export 关键字则可以将变量、函数等内容从当前模块导出供其他地方引用。 下面是一些示例代码&#xff1a; 导入模块&#xff1a; // 导入名为 "module" 的模块 i…

中科数安 | 加密管理系统

中科数安提供的加密管理系统是一套全面而高效的数据安全解决方案&#xff0c;旨在保护企业核心文件资料的安全。该系统结合了多种先进的技术手段和管理策略&#xff0c;确保企业数据在存储、传输和使用过程中都得到严格的保护。 www.weaem.com 以下是中科数安加密管理系统的主要…