热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用JAVA微信生成二维码,并调用扫码接口

在此之前需要申请“微信测试号”1.修改JS接口安全域名为自己的花生壳,这里我用的是花生壳2.往下拉会有一个“网页帐号”的点击右侧修改,将这个也设置为自己的域名项目中新建pr

  在此之前需要申请 “微信测试号” 

 1.修改JS接口安全域名为自己的花生壳,这里我用的是花生壳

 2.往下拉会有一个“网页帐号”的点击右侧修改,将这个也设置为自己的域名

 项目中新建properties文件

 

1 AppId=XXXXX
2 AppSecret=XXXXX
3 
4 token=ilasweixin
5 
6 wechatDomain=http://XXXX/
7 
8 notice.cOntent=\u60A8\u597D\uFF0C\u60A8\u9884\u7EA6{DATE}\u7684\u7A7A\u95F4[{SPACE_NAME}]\uFF0C\u901A\u8FC7\u5BA1\u6838\u65F6\u95F4\u6BB5\u4E3A\uFF1A{PASS_TIME}\uFF0C\u672A\u901A\u8FC7\u5BA1\u6838\u65F6\u95F4\u6BB5\u4E3A\uFF1A{REFUSE_TIME}\uFF0C\u539F\u56E0\u3010{REASON}\u3011

主要的配置是AppId、AppSecret、wechatDomain

然后生成二维码,需要用到一个工具类 “QrCodeUtil”

接下来就是生成二维码的代码,这里我是向二维码中存了一个Json串,如果比较个性也可以向二维码中加入图片,像微信那样

public Object getBookLendQrCode(HttpServletRequest request) {

        //获取参数
        int lendId = Integer.parseInt(request.getParameter("lendId"));
        int readerId = Integer.parseInt(request.getParameter("readerId"));
        int bookId = Integer.parseInt(request.getParameter("bookId"));
        Map param = new HashMap<>();
        param.put("lendId", lendId);
        param.put("readerId", readerId);
        param.put("bookId", bookId);
        param.put("createTime", new Date().getTime());
        String str = JsonUtils.toJson(param);
        Map map = new HashMap<>();
        String qrCodeEncode = QrCodeUtil.qrCodeEncode(str);
        if (StringUtils.isNotBlank(qrCodeEncode)) {
            map.put("img", qrCodeEncode);
        }
        return map;
    }

 

二维码已经生成,接下来就是调用微信摄像头了

调用微信摄像头就比较简单,但是前提一定要扫一扫微信测试号中的二维码关注

另外一个比较容易错的就是配置文件中的三个参数是否和微信测试号中的一样,不一样会导致摄像头调取失败

第一步需要读取配置文件中的信息,这里需要一个改工具类 “WechatSign”

接着上java代码

 

@Value("${AppId}")
    private String appId;

    @Value("${token}")
    private String token;

    /**
     * 获取JSSDK签名信息
     * @param request
     * @return
     */
    @RequestMapping(value={"signInfo.do"})
    @ResponseBody
    public ResultEntity signInfo(HttpServletRequest request){
        ResultEntity result=new ResultEntity();
        String url=request.getParameter("url");
        Map signMap= WechatSign.sign(url);
        signMap.put("appId",appId);
        result.setResult(signMap);
        result.setState(true);
        return result;
    }

 

 

 

已经拿到配置信息了,其他的就是页面的处理了


两个JS文件,一个是微信摄像头的,另一个是可以看到摄像头调用中的报错信息

下面是读取配置信息的方法

var url = window.location.href;
    //var vCOnsole= new VConsole();
    $(function () {
        $.ajax({
            url: "${pageContext.request.contextPath}/wechatInterface/signInfo.do",
            type: "GET",
            data: {"url": url},
            success: function (data) {
                if (data && data.state == true) {
                    var nonceStr = data.result.nonceStr;
                    var timestamp = data.result.timestamp;
                    var signature = data.result.signature;
                    var appId = data.result.appId;
                    //alert("appId:"+appId+"
timestamp:"+timestamp+"
signature:"+signature+"
nonceStr:"+nonceStr);
wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: appId, // 必填,公众号的唯一标识 timestamp: timestamp, // 必填,生成签名的时间戳 nonceStr: nonceStr, // 必填,生成签名的随机串 signature: signature,// 必填,签名,见附录1 needResult: 1,// 默认为 0 ,扫描结果由微信处理, 1 则直接返回扫描结果, jsApiList: [ "scanQRCode", ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); } } }); })

接着是调用摄像头扫码病处理数据的方法

    function scanQRCode() {
        console.log(\'beginScan\');
        console.log(wx);
        wx.scanQRCode({
            // 默认为0,扫描结果由微信处理,1则直接返回扫描结果
            needResult: 1,
            desc: \'scanQRCode desc\',
            success: function (res) {
                console.log(res)
                if (res.errMsg === \'scanQRCode:ok\') {
                    console.log("into....")
            //res.resultStr 这个是获取微信里封装的数据信息 console.log(res.resultStr)
//window.location.replace(res.resultStr); var parse = JSON.parse(res.resultStr) var time = parse.createTime; //var now = new Date().getTime(); //if (now - time > 300000) { //alert("二维码过期,请重新生成") //return; //} $.post(\'${ctx}/web/bookLend/BookLending\', { lendId: parse.lendId, readerId: parse.readerId, bookId: parse.bookId }, function (data) { if (data.state){ alert(data.message) window.reload(); } else { alert(data.message) window.reload(); } }) } } }); };

 

上面代码中有一个时间的判断,这个是防止用户将二维码保存相册再去给别人扫,

这个并不强制,看个人需求,这里我就先注释掉。

那么微信生成二维码并且扫码就是这样,不明白的可以评论区留言


推荐阅读
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • 数字账号安全与数据资产问题的研究及解决方案
    本文研究了数字账号安全与数据资产问题,并提出了解决方案。近期,大量QQ账号被盗事件引起了广泛关注。欺诈者对数字账号的价值认识超过了账号主人,因此他们不断攻击和盗用账号。然而,平台和账号主人对账号安全问题的态度不正确,只有用户自身意识到问题的严重性并采取行动,才能推动平台优先解决这些问题。本文旨在提醒用户关注账号安全,并呼吁平台承担起更多的责任。令牌云团队对此进行了长期深入的研究,并提出了相应的解决方案。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 基于移动平台的会展导游系统APP设计与实现的技术介绍与需求分析
    本文介绍了基于移动平台的会展导游系统APP的设计与实现过程。首先,对会展经济和移动互联网的概念进行了简要介绍,并阐述了将会展引入移动互联网的意义。接着,对基础技术进行了介绍,包括百度云开发环境、安卓系统和近场通讯技术。然后,进行了用户需求分析和系统需求分析,并提出了系统界面运行流畅和第三方授权等需求。最后,对系统的概要设计进行了详细阐述,包括系统前端设计和交互与原型设计。本文对基于移动平台的会展导游系统APP的设计与实现提供了技术支持和需求分析。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 简述在某个项目中需要分析PHP代码,分离出对应的函数调用(以及源代码对应的位置)。虽然这使用正则也可以实现,但无论从效率还是代码复杂度方面考虑ÿ ... [详细]
  • 概述H.323是由ITU制定的通信控制协议,用于在分组交换网中提供多媒体业务。呼叫控制是其中的重要组成部分,它可用来建立点到点的媒体会话和多点间媒体会议 ... [详细]
author-avatar
--AppleChan--
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有