微信开发今天产品设计了一个非常恶心的功能,手机端H5点击按钮调用扫一扫,去识别二维码。
不过有微信的开发文档,一步一个代码来的整。
大概分为几步:
1.首先得有appid和secret——>获取access_token值(可谓是得access_token得半壁江山啊)
2.根据access_token以GET方式获取jsapi_ticket(jsapi_ticket有过期时间,2小时必须缓存处理)
3.权限签名见文档详细得很! 微信签名算法文档
4.引入官方jweixin-1.6.0.js文件,以及注意大小写 注意大小写 驼峰写法!!!!
5.开发平台记得配置域名,因为扫一扫需要页面完全的url,记得添加。
6.签名错误的话,可以去这验证查看:验证签名
上代码:

 //get方式拼接 获取token$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";$res = json_decode($this->httpGet($url));$access_token = $res->access_token;//获取ticket$ticket_url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$access_token";$ticket_res = json_decode($this->httpGet($ticket_url ));if ($ticket_res->errcode == '0') {$ticket = $res->ticket;}//PHP获取链接$url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];//jq获取urlsign_url=location.href.split('#')[0];//时间戳$timestamp = time();//随机数$nonceStr = $this->createNonceStr();// 这里参数的顺序要按照 key 值 ASCII 码升序排序$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";$signature = sha1($string);$signPackage = array("appId" => $this->appId,"nonceStr" => $nonceStr,"timestamp" => $timestamp,"url" => $url,"signature" => $signature,"rawString" => $string);

JQ代码 页面

  <script type="text/javascript" src="/static/js/jweixin-1.6.0.js?v=<{$js_version}>"></script>
<script>//判断是否是微信浏览器的函数function isWeiXin(){//window.navigator.userAgent属性包含了浏览器类型、版本、操作系统类型、浏览器引擎类型等信息,这个属性可以用来判断浏览器类型var ua = window.navigator.userAgent.toLowerCase();//通过正则表达式匹配ua中是否含有MicroMessenger字符串if(ua.match(/MicroMessenger/i) == 'micromessenger'){return true;}else{return false;}}$("#scan").click(function(){var sign_url=location.href.split('#')[0];var is_wx = isWeiXin();if(!is_wx){alert('请选择微信进行操作!');}$.ajax({url:'/sale/wxConfigScan/',type:"GET",data:{sign_url:sign_url},dataType:"json",async:false,success:function (res) {sign=res.Data;},error:function () {//            alert('服务器出错了!');}});wx.config({debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。appId: sign.appId, // 必填,公众号的唯一标识timestamp:sign.timestamp, // 必填,生成签名的时间戳nonceStr: sign.nonceStr, // 必填,生成签名的随机串signature: sign.signature,// 必填,签名,见附录1jsApiList: ['scanQRCode'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2});wx.error(function(res){// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。});wx.scanQRCode({needResult: 0, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有success: function (res) {var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果}});})</script>

其他:

 public function httpGet($url) {$curl = curl_init();curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);curl_setopt($curl, CURLOPT_TIMEOUT, 500);// 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。// 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);curl_setopt($curl, CURLOPT_URL, $url);$res = curl_exec($curl);curl_close($curl);return $res;}public function createNonceStr($length = 16){$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";$str = "";for ($i = 0; $i < $length; $i++) {$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);}return $str;}

微信开发调起微信扫一扫功能相关推荐

  1. 微信公众开放平台开发07---java servlet 实现微信开发第一步:微信服务器验证

    微信公众开放平台开发07---java servlet 实现微信开发第一步:微信服务器验证  技术qq交流群:JavaDream:251572072 ------------------------- ...

  2. 通过微信开发测试号进行微信登录

    微信开发测试号进行微信登录 1.测试账号获取 1.微信进行注册https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&am ...

  3. php处理微信消息,微信开发之处理微信客户端发来的消息

    在上一篇微信开发的博文中微信开发(01)之如何成为开发者,我们开启了微信开发者模式,本篇博文我们简单的处理微信关注者发给我们公众号的消息. 在开启微信开发者模式时,我们配置了一个URL地址,当我们提交 ...

  4. php 微信开发 自动回复,laravel 微信开发-自动回复

    laravel 微信开发-自动回复 1.微信公众号的逻辑,用户关注了你的微信公众号后,假设用户发送了一条消息给你的公众号,实际上是先发送到腾讯的服务器上,腾讯把内容转成特定的xml格式,再转发到你指定 ...

  5. php 微信开发 自动回复,关于微信自动回复的详细介绍

    最近发现了一个特别好玩的Python 微信库itchat,可以实现自动回复等多种功能,下面这篇文章主要给大家介绍了利用python微信库itchat实现微信自动回复功能的相关资料,需要的朋友可以参考学 ...

  6. 【PHP+微信开发】之微信扫码登录

    目录 一.数据表 二.获取token 三.生成二维码 四.扫码,并接收回调 五.检测二维码是否扫描成功 微信扫码登录总体说明:先获取token和ticket,通过微信生成二维码接口生成二维码,把二维码 ...

  7. 微信开发-js接口的使用无法使用分享功能的一些说明

    微信里面的一些js接口会跟想要的有所出入,比如分享接口的调用,不能用onclick绑定自定义按钮调用,只能使用微信页面自带菜单里的分享功能进行分享,可以改变的是自定义分享内容,我测试的是分享到微信好友 ...

  8. java做微信开发工具_Java微信公众平台开发(14) 微信web开发者工具使用

    为帮助开发者更方便.更安全地开发和调试基于微信的网页,微信推出了 web 开发者工具.它是一个桌面应用,通过模拟微信客户端的表现,使得开发者可以使用这个工具方便地在 PC 或者 Mac 上进行开发和调 ...

  9. php+微信开发+解绑,微信开发之解绑设备通知的方法

    本篇文章一起来了解微信开发之解绑设备通知的方法 一开始进行解绑的时候,我一直用的强制解绑设备通知.微信在开发者文档中和接口权限中都没有说明这个接口有次数限制,直到最近两天,解绑一直失败才发现,原来这个 ...

  10. 微信开发学习二 -- 微信开发入门(简单demo)

    一.微信公众平台的基本原理 在开始做之前,先简单介绍了微信公众平台的基本原理. 微信服务器就相当于一个转发服务器,终端(手机.Pad等)发起请求至微信服务器,微信服务器然后将请求转发给我们的应用服务器 ...

最新文章

  1. 怎么查找表_MySQL索引是怎么支撑千万级表的快速查找?
  2. 好货不能错过!一款在GitHub上22k+star的人力资源管理系统
  3. python读取大文件-强悍的Python读取大文件的解决方案
  4. RabbitMQ 3.6 安装
  5. linux下 mysql 的root用户忘记密码解决方案
  6. ARM--MDK5 Software Packs下载
  7. CTF(pwn) 堆利用 之 unlink 介绍
  8. CString::Format
  9. C++ STL 各种搜索查找算法总结使用
  10. Javascript特效:字体火焰背景
  11. python min函数时间复杂度是指_python中的内置函数max()和min()及mas()函数的高级用法...
  12. Onvif协议学习:12、修改分辨率
  13. CSS 渐变背景 之 线性渐变
  14. 明白这些Python 常用包的用法,想不学会Python都难
  15. 移远M26,三分钟打通TCP流程,AT指令详解
  16. [安卓按键精灵]彩色图片转黑白图(二值化)
  17. java中图片排版_Java实现第八届蓝桥杯图形排版
  18. 初识华为MDC智能驾驶计算平台
  19. 贴纸UI效果如何制作,4个做贴纸效果的小技巧
  20. 微信小程序---目录结构

热门文章

  1. Video Copilot VCReflect for Mac/win (AE倒影插件) 支持2022多帧渲染​
  2. 通信原理大作业--基于MATLAB的数字通信系统仿真设计
  3. 快速启动无法识别U盘启动盘。bios无法识别U盘启动盘
  4. 苍狼敏捷软件开发团队建设指南-2-团队建设
  5. unity透明通道加颜色_关于Unity伽马校正的一点笔记
  6. mac 接口压测工具jmeter的详细安装教程
  7. 一文2600字超全RF接口自动化框架项目实战【建议收擦】
  8. RF+Excel实现数据驱动接口自动化
  9. 第三章 授权——《跟我学Shiro》[张开涛]
  10. 统计项目代码行数的工具——SLOCCount