H5扫码整理

前置条件

.....必须部署在https的环境下才能扫码.....

html-qrcode扫码

<div>
<span>页面加载成功时、调用getCamera()获取摄像头并开始扫码</span>
<span>参考地址:https://unpkg.com/browse/html5-qrcode@2.3.7/README.md</span>
</div>
<!-- =============== PAGE SCRIPTS ===============-->
<script type="text/javascript" src="https://unpkg.com/html5-qrcode"></script>
<script>

    window.addEventListener("load", (event) => {
        getCamera()
    });


    let html5QrCode = null;

    let equipInfo = {equipId: "",aid:""}

    function getCamera() {
        console.log("开始获取摄像头------")
        Html5Qrcode.getCameras()
            .then((devices) => {
                console.log("获取摄像头信息",devices)
                if (devices && devices.length) {
                    html5QrCode = new Html5Qrcode("reader")
                    //console.log("创建扫码对象",html5QrCode)
                    start()
                }
            })
            .catch((err) => {
                // handle err
                console.log("获取摄像头异常信息",err)
                html5QrCode = new Html5Qrcode("reader")
                // this.$toast('您需要授予相机访问权限')
            })
    }

    function stop() {
        html5QrCode.stop().then((ignore) => {
            // QR Code scanning is stopped.
            console.log("QR Code scanning stopped.")
        }).catch((err) => {
            // Stop failed, handle it.
            console.log("Unable to stop scanning.")
        })

    }

    function start() {
        {
            html5QrCode.start(
                // environment后置摄像头 user前置摄像头
                {facingMode: "environment"},
                {
                    fps: 2, // 可选,每秒帧扫描二维码
                    qrbox: {width: 300, height: 300} // 可选,如果你想要有界框UI
                    // aspectRatio: 1.777778 // 可选,视频馈送需要的纵横比,(4:3--1.333334, 16:9--1.777778, 1:1--1.0)传递错误的纵横比会导致视频不显示
                },
                (decodedText, decodedResult) => {
                    // do something when code is read
                  
                    alert(decodedText);

                }, (errMsg) => {
                    console.log('扫码errMsg: ', errMsg)
                }
            )
                .catch((err) => {
                    console.log('调用扫码错误信息', err)
                    
                })

        }
    }


</script>

微信扫一扫

1、注册一个公众号

注册地址:https://mp.weixin.qq.com/

2、获取自己公众号的appid、appsecurity

公众号左边菜单栏 设置与开发 - 基本配置

3、引入jssdk

参考官方文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html
3.1、配置access_toekn获取的白名单
公众号左边菜单栏 设置与开发 - 基本配置 - IP白名单
配置成功如图
在这里插入图片描述
不配置调用accsstoken接口会返回异常:

{	
	"errcode":40164,
	"errmsg":"invalid ip **** ipv6 ::ffff:****, not in whitelist rid: 61323f9-402gref3-016bgr27"
}

3.2、根据appId和AppSecret获取微信签名

先获取token、再获取票据、最后签名加密供wxjs初始化使用

JS-SDK使用权限签名算法:
accesstoken接口:
https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
签名接口:
https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#62

3.3、设置JS安全域名接口

公众号左边菜单栏  设置与开发  -  公众号设置  -  功能设置  -  JS接口安全域名

在这里插入图片描述
在这里插入图片描述

3.4、注意事项

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

timestamp 为时间戳除1000

config:fail invalid url domain JS安全域名配置异常、参考 3.3
config:fail,invalid signature 签名算法异常、参考3.2

初始化完成截图、pc使用 微信开发者工具,验证
在这里插入图片描述

4、扫码代码

<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script>

    let wxConfig;

    //初始化后调用wx接口
    window.addEventListener("load", (event) => {
        alert(location.href.split('#')[0])
        let url = location.href.split('#')[0]
        let req = {timeStamp: Math.floor(Date.now() / 1000),nonceStr:'chargeService',signature:'',url:url}
        //1、获取验签
        $.ajax({
            url: "/wx",
            type: "POST", //数据发送的方式(POST或者GET)
            data: JSON.stringify(req), //需要传递的参数
            contentType: "application/json",
            dataType: "json", //后端返回的数据格式
            success: function (res) {
                console.log('微信签名',res)
                if (res.respCode !== "0000") {
                    alert(res.respInfo)
                }else {
                    //2、初始化微信对象
                    wx.config({
                        debug: false,
                        appId: res.obj.appId,
                        timestamp:req.timeStamp ,
                        nonceStr: req.nonceStr,
                        signature: res.obj.sign,
                        jsApiList: ['scanQRCode','JSAPI']
                    });
                    console.log("微信对象初始化完成",wx)
                    //3、微信初始化
                    wx.ready(function (){
                        //4、调用扫码
                        wx.scanQRCode({
                            needResult: 1,
                            scanType: ['qrCode', 'barCode'],
                            success: function (res) {
                                let decodedText = res.resultStr; // 获取扫描结果
                                // 处理扫描结果的逻辑
                                alert("扫码结果:"+decodedText)
                            },
                            fail:function (res){
                                console.log("扫码失败.......",res)
                            }

                        });
                    })


                }

            }
        });


    });
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于UniApp H5扫码的问题,根据引用和引用的内容,UniApp在H5应用中实现扫码功能需要进行一些操作。首先,需要注意的是H5扫码一般需要https的支持才能调用摄像头。其次,可以通过判断来切换不同的扫码处理。具体的代码示例可以参考引用中的代码。 在代码中,通过判断是否为H5环境来区分处理方式。对于非H5环境,可以使用基于微信的SDK进行扫码操作。示例代码中使用了uni.scanCode方法来允许从相机和相册扫码,成功扫码后可以获取到扫描到的信息并进行相应处理。如果是在微信小程序中扫描到二维码,可以获取到扫描结果,并根据需要进行相应的操作。如果未识别到二维码,则会提示重新尝试。 对于H5环境,可以自定义一个方法来处理扫码操作。在示例代码中,使用了onScan方法来处理H5扫描并解析二维码。具体的处理逻辑可以根据实际需求进行编写。 除了扫码功能,还可以在UniApp的H5项目中生成二维码进行展示。根据引用的内容,可以使用weapp-qrcode.js这个JS文件来生成二维码。具体的生成过程可以参考相关文档或教程。生成的二维码可以展示给用户,用户可以通过扫码进行一定的快捷操作。 综上所述,对于UniApp H5扫码的问题,可以根据实际需求以及所处环境来选择不同的处理方式,并通过相应的方法来实现扫码功能和二维码的生成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值