微信公众号调用扫一扫功能

news2024/11/27 10:28:30

手把手教你调用微信扫一扫,三分钟包会_前端人的博客-CSDN博客_调用微信扫一扫

        第一次搞公众号,还以为跟上回调用企业微信扫一扫一样。。。调起扫一扫功能的过程自然是不同的,要注意的地方还挺多,记录一下 。

        其实,在使用 微信 JS-SDK 的前提是,你有微信小程序或微信公众号或企业微信的管理权限,否则,微信 JS-SDK 提供的这些功能都是用不了的。

目录

一、阅读 jsdk 说明文档,绑定域名,引入资源

 二、获取 access_token、获取签名

​1、配置 IP 白名单

2、获取 access_token、获取签名

3、wx.config

 三、wx.ready、wx.error

四、整体代码


一、阅读 jsdk 说明文档,绑定域名,引入资源

        微信 JS-SDK 是微信公众平台 面向网页开发者提供的基于微信内的网页开发工具包。

        通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。

阅读 jsdk 说明文档

 概述 | 微信开放文档

阅读下面画红框部分。

绑定域名、引入文件:

1、绑定域名:把自己在开发过程中调用的接口,将接口的域名在公众号中进行配置,下载校验文件部署到域名下。

2、引入 JS 文件:如上操作就行了 <script src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>,你也可以下载保存到本地再去引入。

 二、获取 access_token、获取签名

        在 JSSDK 使用步骤中,第三步开始之前,是要先获取签名信息的,而获取签名信息之后要先获取 access_token。在官方文档目录中的第 16 条有说明:概述 | 微信开放文档

​1、配置 IP 白名单

        在 获取 access_token 之前是要配置 IP 白名单的,不配置就会报如下错误:{"errcode":48002,"errmsg":"api forbidden"}

这里 获取 access_token 和 获取签名我都交给后台去做了,让他给我返回 wx.config 需要的一堆东西,所以IP白名单我只要配置他的 IP 就好了。

2、获取 access_token、获取签名

        因为 我把 获取 access_token 和 获取签名交给后台了,所以这一步可以不用看,大致了解一下。

获取 access_token:

        GET请求调用接口:https://api.weixin.qq.com/cgi-bin/token,参数:?grant_type=client_credential&appid=公众号Appid/开发者id&secret=公众号AppSecret

         如上可以拿到 AppID 和 AppSecret,如果忘记 AppSecret,需要重置,里面会生成 AppSecret,复制保存。其中还有 校验文件,这个文件也最好让后台部署到你调用接口上线的域名地址中。

获取签名:

        用第一步拿到的access_token 采用 http GET 方式请求获得 jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket):https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

完成以上两步,就能拿到 wx.config 中需要的签名信息了。

3、wx.config

        wx.config 时 appId 需填入非个人主体的已认证小程序,不需计算签名,timestamp、nonceStr、signature 填入非空任意值即可。

接上面引入 JSDK 文件后的步骤三:

wx.config({
  debug: true, // 开启调试模式,调用的所有 api 的返回值会在客户端 alert 出来,若要查看传入的参数,可以在 pc 端打开,参数信息会通过 log 打出,仅在 pc 端时才会打印。
  appId: '', // 必填,公众号的唯一标识
  timestamp: , // 必填,生成签名的时间戳
  nonceStr: '', // 必填,生成签名的随机串
  signature: '',// 必填,签名
  jsApiList: [] // 必填,需要使用的 JS 接口列表
});

 三、wx.ready、wx.error

wx.ready(function(){
  // config信息验证后会执行 ready 方法,所有接口调用都必须在 config 接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在 ready 函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在 ready 函数中。
});
wx.error(function(res){
  // config信息验证失败会执行 error 函数,如签名过期导致验证失败,具体错误信息可以打开 config 的debug模式查看,也可以在返回的 res 参数中查看,对于 SPA 可以在这里更新签名。
});

四、整体代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=Yes">
  <title>微信扫码</title>
</head>
<body>
  <div class="lbox_close wxapi_form">
    <!-- <h3>微信扫一扫</h3> -->
    <input id="codeValue">
    <button id="scanQRCode">扫码</button>
  </div>
</body>
</html>
<script src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script src="../js/jquery.min.js"></script>
<script>
  $(document).ready(function () { 
    $.get("后台接口,返回签名信息", function(obj){
      wx.config({
        beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: obj.appId, // 必填,公众号的唯一标识
        timestamp: obj.timestamp, // 必填,生成签名的时间戳    <%= Html.Encode(ViewData["timestamp" ]) %>
        nonceStr: obj.nonceStr, // 必填,生成签名的随机串
        signature: obj.signature, // 必填,签名
        jsApiList: ['checkJsApi','scanQRCode'] // 必填,需要使用的JS接口列表, 这里只需要调用扫一扫
      }); 
    });   
    
    wx.ready(function(){
      wx.checkJsApi({  //判断当前客户端版本是否支持指定JS接口
        jsApiList: ['scanQRCode'],
        success: function (res) {// 以键值对的形式返回,可用true,不可用false。如:{"checkResult":{"scanQRCode":true},"errMsg":"checkJsApi:ok"}
            if(res.checkResult.scanQRCode != true){
                alert('抱歉,当前客户端版本不支持扫一扫');
            }
        },
        fail: function (res) { //检测getNetworkType该功能失败时处理
            alert('checkJsApi error');
        }
      }); //wx.checkJsApi结束
      
      // 调起企业微信扫一扫接口
      wx.scanQRCode({
        desc: 'scanQRCode desc',
        needResult : 1,  // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果,
        scanType : [ "qrCode", "barCode" ], // 可以指定扫二维码还是一维码,默认二者都有
        success : function(res) {
            console.log("调用扫描成功",res);
            var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
            $("#codeValue").val(result);//显示结果
            // alert("扫码结果为:" + result);
        },
        error:function(res){
            console.log(res)
            if (res.errMsg.indexOf('function_not_exist') > 0) {
                alert('版本过低请升级')
            }
        }
      }); //wx.scanQRcode结束

    }); //wx.ready结束
    wx.error(function(res){
      alert("错误信息:"+JSON.stringify(res));
    });        
  }); 

  //点击按钮进行扫码
  $("#scanQRCode").click(function(event){
    wx.ready(function(){
      wx.scanQRCode({
          desc: 'scanQRCode desc',
          needResult : 1,  // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果,
          scanType : [ "qrCode", "barCode" ], // 可以指定扫二维码还是一维码,默认二者都有
          success : function(res) {
              console.log("调用扫描成功",res);
              var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
              $("#codeValue").val(result);//显示结果
              alert("扫码结果为:" + result);
          },
          error:function(res){
              console.log(res)
              if (res.errMsg.indexOf('function_not_exist') > 0) {
                  alert('版本过低请升级')
              }
          }
      }); //wx.scanQRcode结束
    }); 
  });

</script>

五、本地调试

        本地调式不方便,白名单设置的是服务器 ip(本地 ip 是动态的不能设置),得在服务器调接口拿 token,把 token 拿到本地生成验证签名,然后再把参数拿到服务器上调用微信的测试接口看两边的签名是否一致,就可以知道代码有没有问题。 作者:邓子悦 https://www.bilibili.com/read/cv18760466/ 出处:bilibili

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

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

相关文章

2023最新网络安全自学路线,内容涵盖3-5年技能提升

前言 先预祝大家新年快乐&#xff01; 【一一帮助网络安全入门和提升点这里一一】 01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究…

改进MBR(操作显卡来输出字符)

文章目录前言前置知识mbr.S代码实验操作前言 本博客记录《操作系统真象还原》第二章第一个实验操作~ 实验环境&#xff1a;ubuntu18.04VMware &#xff0c; Bochs下载安装 实验内容&#xff1a;在屏幕上打印字符串【采用的方式是直接修改显存实现】 实验原因&#xff1a;mb…

Flutter性能优化

原理 Flutter的架构主要分成三层&#xff1a;Framework&#xff0c;Engine和Embedder Framework 使用 dart 实现&#xff0c;包括 Material Design 风格的Widget&#xff0c;Cupertino(针对iOS)风格的Widgets&#xff0c;UI/文本/图片/按钮等基础 Widgets&#xff0c;渲染&…

设计模式学习(一):Bridge桥接模式

一、什么是Bridge模式Bridge模式的作用是在“类的功能层次结构”和“类的实现层次结构”之间搭建桥梁。1.1 类的功能层次结构主要作用就是增加新的功能。当我们要增加新的功能时&#xff0c;我们可以从各个层次的类中找出最符合自己需求的类&#xff0c;然后以它为父类编写子类…

(Week 10)最小生成树(C++,prim,Kruskal,并查集)

文章目录Einstein学画画&#xff08;C&#xff0c;欧拉路&#xff09;题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示解题思路&#xff1a;并查集&#xff08;C&#xff09;[蓝桥杯 2017 国 C] 合根植物&#xff08;C&#xff0c;并查集&#xff09;题目描述输入格…

基于Java+SpringBoot+vue+element实现校园闲置物品交易网站

基于JavaSpringBootvueelement实现校园闲置物品交易网站 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目录基于JavaSpri…

Element UI 走马灯的使用

目录 走马灯是什么 原生js实现 Element UI的走马灯使用 el-carousel Carousel Events el-carousel-item 走马灯是什么 在有限空间内&#xff0c;循环播放同一类型的图片、文字等内容&#xff0c;走马灯也叫轮播图。 比如 原生js实现 JS实现轮播图效果&#xff08;同时…

mysql学习总结二

聚合函数 聚合函数表示对 值的集合 进行操作的 组&#xff08;集合&#xff09;函数。 # 华为手机价格的平均值 SELECT AVG(price) FROM products WHERE brand 华为; # 计算所有手机的平均分 SELECT AVG(score) FROM products; # 手机中最低和最高分数 SELECT MAX(score) FR…

SpringBoot解决全局和局部跨域问题的两种方式

前言 在如今前后端分离的开发模式下&#xff0c;跨域是一个非常经典的问题&#xff0c;解决的方式也有很多&#xff0c;比如代理服务器&#xff0c;使用JSONP 我之前也写过一篇解决跨域问题的文章&#xff0c;感兴趣的可以参考&#xff1a;解决Vue前后端跨域问题的多种方式 …

【现代机器人学】学习笔记九:运动规划

本节和前一节 【现代机器人学】学习笔记八&#xff1a;轨迹生成 不同&#xff0c;侧重于避障的内容。有一些我认为的重要的基本的概念&#xff1a;1.路径规划是一个纯几何问题&#xff0c;寻找一条无碰撞路径&#xff0c;不涉及动力学和时间相关内容。因此路径规划是运动规划的…

请查收 | 2022 阿里妈妈技术文章回顾

新年伊始&#xff0c;万象更新&#xff01;转眼&#xff0c;阿里妈妈技术已陪伴大家走过601天~在此&#xff0c;感谢每位读者朋友的支持与关注回顾2022&#xff0c;我们分享了60篇原创技术文章、发布了1本营销科学系列白皮书、开源了1项向量召回技术方案&#xff1b;阿里妈妈营…

Netty基础入门——NIO【1】

Netty基础入门——NIO【1】 1 NIO 1.1 三大组件 1.1.1 Channel && Buffer Channle channel类似于stream&#xff0c;是读写数据的双向通道&#xff0c;而stream要么是输入要么是输出 #mermaid-svg-9w1vFFYCVQmRvHja {font-family:"trebuchet ms",verdana…

YACC移进规约冲突案例分析

总结 总结&#xff1a; bison给出的用例是发现冲突的最便捷方法。 第一种用例&#xff1a;明确用例&#xff08;一个Example&#xff09;&#xff0c;直接反应问题。第二种用例&#xff1a;混淆用例&#xff08;两个Example&#xff09;&#xff0c;解析器无法区分两条语句。…

jenkins 节点部署

1、节点注册 登陆jenkins master界面 路径&#xff1a;首页-->系统管理--> 节点管理-->新建节点&#xff08;New Node&#xff09; 插曲&#xff1a;我在新的服务器部署master节点&#xff0c;显示剩余交换空间为0B 处理方式请查看&#xff1a;Jenkins - Free Swap…

关于MCU的BootLoader的一些理解

一、关于STM32单片机IAP升级中if(((*(__IO uint32_t*)Addr_App) & 0x2FFE0000) 0x20000000)语句的理解 参考自&#xff1a;https://blog.csdn.net/weixin_45394120/article/details/122732203?spm1001.2014.3001.5502 疑问&#xff1a; 1、为什么要用Addr_App里的数据…

Web操作系统漏洞发现——工具使用总结

目录 &#xff08;一&#xff09;web层面 1、信息收集 0x01 网站源码自己开发 0x02 网站源码使用开源CMS 2、可维护Poc 0x01 pocassist 0x02 afrog 3、APP渗透 0x01 在BP上添加转发端口 0x02 Xray进行监听 0x03 触发数据 4、Goby &#xff08;二&#xff09;操作系统层…

xss.haozi靶场通关

做完xss-labs靶场后&#xff0c;再继续做这个靶场&#xff0c;感觉这个不是很难&#xff0c;毕竟在第一个靶场也获取了一些经验&#xff0c;但是这个靶场偏向技巧&#xff0c;所以还是以了解为主。 0x00: 分析&#xff1a;对我们的代码未作出限制&#xff0c;因此这里可以使用…

如何用 nodejs 进行 sha1 加密验证,微信公众号开发验证

如何用 nodejs 进行 sha1 加密验证&#xff0c;微信公众号开发验证 一、问题 今天在摆弄微信公众号的时候&#xff0c;遇到这样一个问题&#xff1a; 我的后台是 nodejs 写的&#xff0c;express 框架&#xff0c;官方开发接入的验证代码是 php 写的&#xff0c;其中有一个部…

C语言之蓝桥杯习题(3)☞暴力求解版(思路写在解题过程中)

第一题.1.问题&#xff1a;小蓝数字卡片题小蓝有很多数字卡片&#xff0c;每张卡片上都是数字0到9。 小蓝准备用这些卡片来拼一些数&#xff0c;他想从1开始拼现在小蓝手里有0到9的卡片各2021张&#xff0c;共20210张&#xff0c;请问小蓝可以从1拼到多少?2.解题过程&#xff…

【Docker】(三)使用registry远程镜像仓库管理镜像

1.前言 本系列文章记录了从0开始学习Docker的过程&#xff0c;Docker系列历史文章&#xff1a; &#xff08;一&#xff09;基本概念与安装使用 &#xff08;二&#xff09;如何使用Docker发布一个SpringBoot服务 在上一篇中留下了一个问题&#xff0c;使用Docker发布服务的方…