微信中调用扫一扫最简便的方法 5行代码实现H5扫一扫 HTML5扫二维码最简便的办法

70 篇文章 5 订阅
47 篇文章 1 订阅

免责声明:
本文中代码和资料主要用于教学和技术研究,任何直接或间接因使用我方的任何内容所导致的任何损失或损害与我方无关,若使用者无法对使用我方内容后的任何后果负责,请不要使用本文中的任何内容。若本文中的任何内容侵犯了您的法律权益请联系作者,作者会第一时间处理侵权内容。

代码如下:

<a href="javascript:window.open('//996315.com/api/scan/?redirect_uri=' + encodeURIComponent(location.href), '_self');">Scan</a>

<script>
var qr=GetQueryString("qrresult");
if(qr) alert(qr); //放入表单输入框或者提交到后端,具体根据自己业务做相应处理

function GetQueryString(name){
    var reg = new RegExp("\\b"+ name +"=([^&]*)");
    var r = location.href.match(reg);
    if (r!=null) return decodeURIComponent(r[1]);
}
</script>

将以上保存到html文件中,然后放到你服务器上使用url访问即可。无论是ip还是localhost或者带端口的url都可以调用扫码并获得结果。扫条形码也是可以的。

以下是代码将扫描到的内容放入输入框,例如条形码:

<input type="text" id="sn">
<a href="javascript:window.open('//996315.com/api/scan/?redirect_uri=' + encodeURIComponent(location.href), '_self');">Scan</a>

<script type="text/javascript">
var qr=GetQueryString("qrresult");
if(qr) document.getElementById("sn").value=qr;
 
function GetQueryString(name){
    var reg = new RegExp("\\b"+ name +"=([^&]*)");
    var r = location.href.match(reg);
    if (r!=null) return decodeURIComponent(r[1]);
}
</script>

条形码的话会带上类型,直接以逗号分隔截取下好了:

if(qr) document.getElementById("sn").value=qr.split(",")[1];

如果不想扫码后将数据传回自身,而是要把扫描结果提交到指定的url处理(注意目标url处要做好获取qrresult参数的处理工作,参考上面script块的处理),可以通过redirect_uri参数明确指定接收结果的url:

<a href="//996315.com/api/scan/?redirect_uri=指定要接收结果的url">扫描</a>


测试地址1测试需要在微信里打开):
http://www.jiujiujin.net/testsaoyisao.htm
此项适合在自己网页中加入扫一扫,比如表单中需要录入快递单号。

测试地址2测试需要在微信里打开):
https://996315.com/api/scan/?redirect_uri=http://www.jiujiujin.net/wuliu.htm
这个适合在微信菜单里设置“扫一扫”,然后url指向到上面这样的网址,其中redirect_uri可以改成您需要接收二维码数据的地址,上面例子是扫描快递单号然后显示物流信息。

测试地址3测试需要在微信里打开):
此案例是一个防伪查询的应用,扫印刷物的可变防伪码,然后16位数自动上屏。
https://www.china3-15.cn/ycmbtest/

点击后扫描下面二维码:

上图为一个16位数(例如:1234123412341234)的二维码图片,可到liantu.com自行生成测试

测试地址4测试需要在微信里打开):
http://www.jiujiujin.net/chakuaidi.htm
下图是应用于通过百度查询快递单号的例子。

扫快递单代码如下:

<a href="javascript:window.open('//996315.com/api/scan/?redirect_uri=' + encodeURIComponent(location.href), '_self');">查快递</a>
<script type="text/javascript">
var qr=getQueryString("qrresult");

if(qr){
	var wl=qr.split("CODE_128,");
	if (wl.length==2){
		location.replace("https://www.baidu.com/s?wd=" + wl[1]);
	}else{
		alert("您扫描的不是快递单号!所以无法为您查询物流。请对准快递单条形码进行扫描!");
	}
}

function getQueryString(name){
	var reg = new RegExp("\\b"+ name +"=([^&]*)");
	var r = location.href.match(reg);
	if (r!=null) return decodeURIComponent(r[1]);
}
</script>

上面保存为sample.htm,这样通过服务器打开的话就可以点击里面的按钮去扫描快递单号,然后通过百度查到物流记录。 如果是想要截图那样直接点击菜单就扫描,那么可以构造个这样的链接设置到菜单里面:
https://www.996315.com/api/scan/?redirect_uri=你的网址路径/sample.htm

测试图片:

其他问题摘要:

1.用于vue,地址里含有#导致接口返回的URL丢失部分内容怎么办?

答:这是浏览器自身问题决定的。参数如果有#会被自动隔断,导致目标页面获取不到。
解决方案是:用redirect_uri=方式调用接口,将网址中的#改为%23,有个简便的办法就是通过js的encodeURIComponent函数来一次性编码后放到redirect_uri参数后,代码如下:

<a href="javascript:window.open('//996315.com/api/scan/?redirect_uri=' + encodeURIComponent(location.href), '_self');">Scan</a>

2.提示无法获取URL来路怎么办?

答:经过测试偶尔会发生这样的问题。有些ip等本地地址可能无法自动获得来路,因此如果发生问题建议使用参数redirect_uri来指定跳转的url

3.回调的网址本身有若干个参数,在回调后都丢失了怎么办?

答:接口升级后这个问题一般不会发生了,无须redirect_uri指定也可以。
如果万一还发生那么处理方法还是一样,就是将特殊字符都转义处理,例如将=和&都转义,可以用encodeURIComponent(location.href)一下子都转义,然后放到redirect_uri=中调用。

4.扫码跳转回来后表单上本身已填的数据都丢失了怎么办?

答:由于是重定向跳转回原url的,因此本身表单里的输入框等数据丢失是不可避免的,不过我们可以使用 localStorage.setItem和localStorage.getItem这两个方法来解决这一问题。示例代码如下:

<!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.0">
    <title>调用扫码后表单数据不丢失</title>
    <link rel="stylesheet" href="//at.alicdn.com/t/font_626784_mcjb2yy4vfl.css" />
    <script src="//cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
</head>

<body>
    姓名:<input type="text" id="username"><br>
    学号:<input type="text" id="usernum"> <i id="saoma" class='dzwfont dzw-saomiao'></i><br>
    爱好:<input type="checkbox" id="chouyan">抽烟 <input type="checkbox" id="hejiu">喝酒<br>
    <input type="button" id="tijiao" value="提交">
</body>
<script type="text/javascript">
    $(document).ready(function() {
        //页面载入时读取之前保存的数据并设置
        $("#username").val( localStorage.getItem("username") );
        $("#chouyan").prop("checked", localStorage.getItem("chouyan")=="true" );
        $("#hejiu").prop("checked", localStorage.getItem("hejiu")=="true" );

        var qr = GetQueryString("qrresult");
        if (qr) $("#usernum").val(qr);
    });

    $("#saoma").click(function() {
        //跳转前保存数据
        localStorage.setItem("username", $("#username").val());
        localStorage.setItem("chouyan", $("#chouyan").prop("checked"));
        localStorage.setItem("hejiu", $("#hejiu").prop("checked"));

        window.open("//996315.com/api/scan/?redirect_uri=" + encodeURIComponent(location.href), "_self");
    });

    function GetQueryString(name) {
        var reg = new RegExp("\\b" + name + "=([^&]*)");
        var r = decodeURIComponent(location.href).match(reg);
        if (r != null) return r[1];
    }
</script>

</html>
  • 22
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 109
    评论
有时我们只需要在自己网页加入个扫一扫并且获取结果的小小功能就,然而微信开发门槛太高,需要公众号需要交300块认证,然后域名还要备案,公众号后台需要各种配置,需要调用微信开发各个接口,最后可能并不会看到效果。 现在我要告诉你,你有救了!你只要简单使用上面提供的接口就,什么论七八糟的统统都不用管了,只需要关注你的程序怎么处理这些数据。 不过任何事情都是相对的,本帖提供的方法缺点也是有的,就是多一次跳转,而大家都知道页面跳转那么当前输入框等控件内容都会丢失。不用担心,问题总是有方案解决的。 如果你只需要扫描下获取结果再处理,那么不用管这多跳转一次的问题。 如果你是在一个表单某项需要扫描,那么可以把扫描的那项提到最前面来,强制要求用户必须先扫描才能填写表单其他项,这样问题不 就迎刃而解了? 如果要追求完美扫描不跳转,那么只能一步步按照微信网页开发的要求来了。 大家都知道微信扫一扫,而且很常用,基本都用来码关注微信号,码付款,再之外的如果要二维码是链接就直接打开访问,非链接的直接显示文字。 然而有时我们需要在自己的网页上调用扫一扫,然后按照自己的需要对获得结果进处理该怎么办呢?有些同学觉得很奇怪,怎么会有这样的需求。其实这样的使用场景很多的,例如: 快递单上的条形码查询它的进度 进度系统可以根据生产单上条形码查询生产进度 发货系统出入库扫描 扫描网址只需截取其的一个参数结果而不是直接打开它 。。。 看下面的一个应用效果。 https://img2.mukewang.com/5b42068700012bbf02800560.jpg 是不是很方便呢?微信里打开http://www.jiujiujin.net/wuliu.htm 也可以测试效果。 如果按照通常的步骤在自己网页调用微信扫一扫可不是那么简单的。首先得有微信公众号,公众号还得提交认证。我们都知道不光是注册个微信公众服务号就,而且还得提交认证,每年交300块大洋,前提还必须是企业身份才能注册和认证。 接下来才是编码,这才是考验你耐心的时刻,各种不,各种莫名其妙的错误,有些新手可能在域名备案上就被卡了半天,因为想要调用微信的jssdk接口要求访问的域名必须是备案的,设置到微信公众号的js安全域名区,然后还要设置服务器白名单,如果你的是虚拟主机而ip不固定的说不定哪天就不了了。调用几个接口,参数,token还有7200秒的失效,定时更新还是访问时检查判断再更新,是不是弄过的人都纠结过?很是麻烦,顿时头大了有么有?水不是一般的深,于是纷纷哭爹喊娘求大神骂张小龙。 我发现我废话太多了,说好的5代码呢?却写了这么多废话,哈哈哈。其实多了解了解也没坏处的,毕竟也算我的摸索过的心路历程。 上面给出的扫一扫指向的链接是:http://www.jiujiujin.net/wuliu.htm,聪明的同学已经打开并右击查看源代码了,可能已经明白是怎么回事了。 答案就是调用了一个接口,这个接口会去执码,然后将码的结果作为一个参数返回到来路页面,这样来路页面就可以获取并处理这个结果了。 废话不多说放代码测试。
对于UniApp H5码的问题,根据引用和引用的内容,UniApp在H5应用实现码功能需要进一些操作。首先,需要注意的是H5码一般需要https的支持才能调用摄像头。其次,可以通过判断来切换不同的码处理。具体的代码示例可以参考引用代码。 在代码,通过判断是否为H5环境来区分处理方式。对于非H5环境,可以使用基于微信的SDK进码操作。示例代码使用了uni.scanCode方法来允许从相机和相册码,成功码后可以获取到扫描到的信息并进相应处理。如果是在微信小程序扫描二维码,可以获取到扫描结果,并根据需要进相应的操作。如果未识别到二维码,则会提示重新尝试。 对于H5环境,可以自定义一个方法来处理码操作。在示例代码,使用了onScan方法来处理H5扫描并解析二维码。具体的处理逻辑可以根据实际需求进编写。 除了码功能,还可以在UniApp的H5项目生成二维码展示。根据引用的内容,可以使用weapp-qrcode.js这个JS文件来生成二维码。具体的生成过程可以参考相关文档或教程。生成的二维码可以展示给用户,用户可以通过码进一定的快捷操作。 综上所述,对于UniApp H5码的问题,可以根据实际需求以及所处环境来选择不同的处理方式,并通过相应的方法实现码功能和二维码的生成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 109
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无·法

别打赏了,这C币又不能买咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值