H5 微信扫一扫

直接上代码:

    <a href="//996315.com/api/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>

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

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

    <input type="text" id="sn">
    <a href="//996315.com/api/scan/">扫描(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参数:

<a href="//996315.com/api/scan/?redirect_uri=指定网址">扫描</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="//996315.com/api/scan/">查快递</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=中调用。

ps:旧接口sao315被人非法调用频繁被微信封,已经废掉了,新的接口有限开放。
————————————————
版权声明:本文为CSDN博主「无·法」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sysdzw/article/details/80810345

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值