Android 微信扫一扫scheme 安卓调用微信扫一扫 您所在的位置:网站首页 公式调用扫一扫的代码怎么写出来 Android 微信扫一扫scheme 安卓调用微信扫一扫

Android 微信扫一扫scheme 安卓调用微信扫一扫

2024-07-12 09:10| 来源: 网络整理| 查看: 265

微信开发今天产品设计了一个非常恶心的功能,手机端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获取url sign_url=location.href.split('#')[0]; //时间戳 $timestamp = time(); //随机数 $nonceStr = $this->createNonceStr(); // 这里参数的顺序要按照 key 值 ASCII 码升序排序 $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url"; $signature = sha1($string); $signPackage = array( "appId" => $this->appId, "nonceStr" => $nonceStr, "timestamp" => $timestamp, "url" => $url, "signature" => $signature, "rawString" => $string );

JQ代码 页面

//判断是否是微信浏览器的函数 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,// 必填,签名,见附录1 jsApiList: ['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 时,扫码返回的结果 } }); })

其他:

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; }



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有