微信js_sdk调用扫一扫接口 php

<?php 
    session_start();
    /**
     * [getWxAcsessToken 获取access_token]
     * @return [type] [description]
     */
    function getWxAcsessToken(){
        $appid = "xxx";//开发者ID(AppID)
        $appsecret = "xxx";//开发者密码(AppSecret)
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
        //2.初始化
        $ch = curl_init();
        //3.设置参数
        curl_setopt($ch , CURLOPT_URL, $url);
        curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
        //如果获取的token为null,不妨先看看curl_exec返回值是否为false
        //解决办法:跳过SSL证书检查
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        //4.调用接口 
        $res = curl_exec($ch);
        
        if( curl_errno($ch) ){
            var_dump(curl_error($ch));
        }
        //5.关闭curl
        curl_close($ch);
        //微信以JSON数据包格式返回给公众号,需要json_decode,true使其返回数组
        $arr = json_decode($res, true);
        return  $arr;
    }

    function http_curl($url){
        //2.初始化
        $ch = curl_init();
        //3.设置参数
        curl_setopt($ch , CURLOPT_URL, $url);
        curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
        //如果获取的token为null,不妨先看看curl_exec返回值是否为false
        //解决办法:跳过SSL证书检查
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        //4.调用接口 
        $res = curl_exec($ch);
        
        if( curl_errno($ch) ){
            var_dump(curl_error($ch));
        }
        //5.关闭curl
        curl_close($ch);
        //微信以JSON数据包格式返回给公众号,需要json_decode,true使其返回数组
        $arr = json_decode($res, true);
        return $arr;
    }
    /**
     * [getJsApiTicket 公众号用于调用微信JS接口的临时票据]
     * @return [type] [description]
     */
    function getJsApiTicket(){
        if($_SESSION['jsapi_ticket_expire_time']>time() && $_SESSION['jsapi_ticket']){
            $jsapi_ticket = $_SESSION['jsapi_ticket'];
        }else{
            $access_tiken = getWxAcsessToken();
            $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$access_tiken['access_token']."&type=jsapi";
            $res = http_curl($url);
            $jsapi_ticket = $res['ticket'];
            $_SESSION['jsapi_ticket'] = $jsapi_ticket;
            $_SESSION['jsapi_ticket_expire_time'] = time()+7000;
        }
        return $jsapi_ticket;
    }

    // 获取随机数
    function getRandCode($num=16){
        $array = array(
            'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
            'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
            '0','1','2','3','4','5','6','7','8','9'
        );
        $tmpstr = '';
        $max = count($array);
        for ($i=1; $i <= $num; $i++) { 
            $key = rand(0,$max-1);
            $tmpstr .= $array[$key];
        }
        return $tmpstr;
    }
    $jsapi_ticket = getJsApiTicket();
    $time = time();
    $noncestr = getRandCode();
    // 注意 URL 一定要动态获取,不能 hardcode.
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    $signature = "jsapi_ticket=".$jsapi_ticket."&noncestr=".$noncestr."&timestamp=".$time."&url=".$url;
    $signature = sha1($signature);
 ?>
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no">
    <title>调用扫一扫</title>
</head>
<body>
    <div>点我调用扫一扫</div>
    <input type="text" name="qrCode" id="qrCode">
</body>
<script src='https://res.wx.qq.com/open/js/jweixin-1.0.0.js'></script>
<script>
    var div=document.querySelector('div');
    var qrCode = document.getElementById('qrCode');
    div.onclick=function(){
        wx.config({
            debug : true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            //                                debug : true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId : '', // 必填,公众号的唯一标识
            timestamp : , // 必填,生成签名的时间戳
            nonceStr : '', // 必填,生成签名的随机串
            signature : '',// 必填,签名,见附录1
            jsApiList : ['onMenuShareTimeline','checkJsApi', 'scanQRCode'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
        });
        wx.ready(function() {
            wx.scanQRCode({   
                needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
                scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
                success: function (res) {
                    var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
                    console.log(res);
                    alert(result);
                    qrCode.value = result.substr(result.indexOf(',')+1);
                    var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
                    sessionStorage.setItem('saomiao_result',result);
                    //其它网页调用二维码扫描结果: 
                    //var result=sessionStorage.getItem('saomiao_result');
                }
            });
        });
    }
    
</script>
</html>

Copyright © 2016-2019 709173702@qq.com 版权所有  ICP证粤ICP备16117826号-1
联系邮箱:709173702@qq.com