PHP开发微信公众号(一)二维码的获取

要开发微信公众号,首先进行需要注册一个,然后认证。这就不用多说了。

当然如果没有,也可以去申请一个测试号来使用,地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

申请成功后,你会得到一个appID 和 appsecret,这个就相当于你的开发者账号和密码。

开发模式如下图:

1、Access_Token的获取

对于这个access_token就是一个访问标识,其实不用想得太高深,它就好比是你进图书馆需要的图书卡;

如何获得它?依赖于appid和appsecret,这就像你办图书卡,需要身份证号或者学号,还需要输入密码。

api接口如下:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appID&secret=appsecret

这个是以get方式请求,会返回一个json数据,包括access_token和expires_in(有效期,一般为7200);

php如何发送get请求,这里就需要封装一个函数了,使用curl,请先确保自己php的curl模块开启且能正常使用:

 1 private function _request($method=‘get‘,$url,$data=array(),$ssl=true){
 2         //curl完成,先开启curl模块
 3         //初始化一个curl资源
 4         $curl = curl_init();
 5         //设置curl选项
 6         curl_setopt($curl,CURLOPT_URL,$url);//url
 7         //请求的代理信息
 8         $user_agent = isset($_SERVER[‘HTTP_USER_AGENT‘])?$_SERVER[‘HTTP_USER_AGENT‘]:                       ‘Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 FirePHP/0.7.4‘;
 9         curl_setopt($curl,CURLOPT_USERAGENT,$user_agent);
10         //referer头,请求来源
11         curl_setopt($curl,CURLOPT_AUTOREFERER,true);
12         curl_setopt($curl, CURLOPT_TIMEOUT, 30);//设置超时时间
13         //SSL相关
14         if($ssl){
15             //禁用后,curl将终止从服务端进行验证;
16             curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
17             //检查服务器SSL证书是否存在一个公用名
18             curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2);
19         }
20         //判断请求方式post还是get
21         if(strtolower($method)==‘post‘) {
22             /**************处理post相关选项******************/
23             //是否为post请求 ,处理请求数据
24             curl_setopt($curl,CURLOPT_POST,true);
25             curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
26         }
27         //是否处理响应头
28         curl_setopt($curl,CURLOPT_HEADER,false);
29         //是否返回响应结果
30         curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
31
32         //发出请求
33         $response = curl_exec($curl);
34         if (false === $response) {
35             echo ‘<br>‘, curl_error($curl), ‘<br>‘;
36             return false;
37         }
38         //关闭curl
39         curl_close($curl);
40         return $response;
41     }

因为后面还会用到post请求,所有这里就需要一个参数判断是否何种请求。通过这个函数,我们就可以或得到微信公众号返回的json数据

//获取access_token,并保存到文件里
    public function getAccessToken($token_file = ‘./access_token‘){
        //考虑这个access_token是否过期
        $life_time = 7200;
        //文件存在,并且左后修改时间与当前时间的差小于access_token的有效期,则有效
        if(file_exists($token_file) && time()-filemtime($token_file)<$life_time){
            //得到内容
            return file_get_contents($token_file);
        }

        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->_appid}&secret={$this->_appsecret}";
        //向该地址发送get请求
        $result = $this->_request(‘get‘,$url);
        //处理响应结果
        if(!$result){
            return false;
        }
        //存在返回响应结果,返回对象
        $result_obj = json_decode($result);
        //写入文件
        file_put_contents($token_file, $result_obj->access_token);
        return $result_obj->access_token;
    }

因为这是写在一个类里面的,appid和appsecret都已经初始化好,所以直接用了它的属性。

2、获取到了access_token后,想要生成二维码,还需要获取ticket

ticket又是撒?这就像你网上买票,网站发给你的一个取票码,然后你拿这个取票码再去取票。同理,我们这里要获取也要先得到ticket,然后再去获取二维码图片。

        protected $_appid;
    protected $_appsecret;
    protected $_token;//公众平台请求开发者时需要标记
    protected $_appkey;//图灵机器人appkey
    //标识qrcodeticket的类型,是永久还是临时
    const QRCODE_TYPE_TEMP = 1;
    const QRCODE_TYPE_LIMIT = 2;
    const QRCODE_TYPE_LIMIT_STR = 3;
//根据access_token获取ticket
    //@param $content 内容
    //@param $type qr码类型
    //@param $expire 有效期,如果是临时类型需指定
    //@return string ticket
    public function getQRCodeTicket($content,$type=2,$expire=604800){
        $access_token = $this->getAccessToken();
        $url = ‘https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=‘.$access_token;
        $type_list = array(
                self::QRCODE_TYPE_TEMP => ‘QR_SCENE‘,
                self::QRCODE_TYPE_LIMIT=>‘QR_LIMIT_SCENE‘,
                self::QRCODE_TYPE_LIMIT_STR=>‘QR_LIMIT_STR_SCENE‘
            );
        $action_name = $type_list[$type];
        //post发送的数据
        switch ($type){
            case self::QRCODE_TYPE_TEMP:
                $data_arr[‘expire_seconds‘]=$expire;
                $data_arr[‘action_name‘] = $action_name;
                $data_arr[‘action_info‘][‘scene‘][‘scene_id‘]=$content;
                break;
            case self::QRCODE_TYPE_LIMIT:
                $data_arr[‘action_name‘] = $action_name;
                $data_arr[‘action_info‘][‘scene‘][‘scene_str‘] = $content;
                break;
            case self::QRCODE_TYPE_LIMIT_STR:
                $data_arr[‘action_name‘] = $action_name;
                $data_arr[‘action_info‘][‘scene‘][‘scene_id‘] = $content;
                break;
        }
        $data = json_encode($data_arr);
        $result = $this->_request(‘post‘,$url,$data);
        if(!$result){
            return false;
        }
        $result_obj = json_decode($result);
        return $result_obj->ticket;
    }    

ticket又分为临时、永久、永久字符串三种,其中临时又需要传递有效期。永久和永久字符串区别只在于$content传递的是带引号还是不带引号。

这里通过post提交数据后,就可以获得ticket。

3、获得二维码qrcode

接下来就可以获取二维码了

//根据ticket获取二维码
    /**
      * @param int|string $content qrcode内容标识
      * @param [type] $file 存储为文件的地址,如果null直接输出
      * @param integer $type 类型
      * @param integer $expire 如果是临时,标识有效期
      * @return  [type]
     */

    public function getQRCode($content,$file=NULL,$type=2,$expire=604800){
        //获取ticket
        $ticket = $this->getQRCodeTicket($content,$type=2,$expire=604800);
        $url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=$ticket";
        //发送,取得图片数据
        $result = $this->_request(‘get‘,$url);
        if($file){
            file_put_contents($file,$result);
        }else{
            header(‘Content-Type:image/jpeg‘);
            echo $result;
        }
    }

最后我们只需要实例化定义的类,传入appid和appsecret,然后调用getQRCode就可以获取到二维码了。

时间: 2024-10-20 02:02:27

PHP开发微信公众号(一)二维码的获取的相关文章

跳转到微信公众号主页二维码界面链接,微信跳转链接接口!

想要跳转到微信公众号的主页或者关注页面首先先知道对应链接 1.微信进入公众号查看消息记录,复制链接,这个页面是个关注页面,具体链接如下: https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzAxNDAzMzk3MA==&scene=124#wechat_redirect 2.公众号后台下载公众号二维码,百度搜索反解析二维码链接,如下: http://weixin.qq.com/r/5EheRnzEFSFqrTgl9x32

微信公众号的二维码怎么生成?

关注公众号二维码微信扫码直接关注公众号,被动回复信息,支持文本.图片.图文.小程序等等 带参数二维码一种是临时二维码,有效期30天,基本上不限制数量.主要用活动营销.粉丝推广.限时优惠另一种是永久二维码,是无过期时间的,目前最多生成10万个,主要用于粉丝统计.粉丝裂变.长期活动营销.广告长期监控 1.进入登录页面,输入自己的账号和密码,后台选择功能管理,进入初始页面 2.高级功能选择渠道二维码生成+创建渠道二维码 填写渠道名称(二维码用途描述)统计对象:新关注+已关注的粉丝 仅新关注的粉丝自动分

生成微信公众号关注二维码

接口分析: 请求方式 : GET 请求url    : http://open.weixin.qq.com/qr/code/ 请求参数:username = {微信号(如下图所示)} 用例: <img src="http://open.weixin.qq.com/qr/code/?username=weixinyidu"/> 显示结果: 版权声明:本文为博主原创文章,未经博主允许不得转载.

根据微信的公众号获取公众号的二维码 根据公众号获得二维码的图片

最近在维护一个老项目,就是根据微信的公众号,也就是英文数字那串的公众号 来获得公众号的二维码的,我看了下,之前的代码是用的这个网址 http://open.weixin.qq.com/qr/code/?username=公众号微信号 同事反应说之前一直可以的,不知道为什么现在就不行了. 然后我也测试了下,使用我们公司的公众号名字,http://open.weixin.qq.com/qr/code/?username=xwykj888 打开后的地址显示的就是 Certificate test pa

.NET开发微信小程序-生成二维码

1.生成小程序二维码功能 直接请求相应的链接.传递相应的参数 以生成商铺的付款码为例: var shopsId = e.ShopsId //付款码的参数 var codeModel = new function () { } codeModel.path = "pages/PageWxPay/PageWxPay?shopsId=" + shopsId codeModel.width = 430 codeModel.auto_color = false codeModel.line_co

Java微信公众平台开发之生成带参二维码(Spring Boot 2.X)

微信官方提供的生成二维码接口得到的是当前公众号的二维码官方文档(一定要先看)目前有2种类型的二维码:临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量,主要用于帐号绑定等不要求二维码永久保存的业务场景永久二维码,是无过期时间的,但数量较少(目前为最多10万个),主要用于适用于帐号绑定.用户来源统计等场景获取带参数的二维码有两种方法先获取二维码ticket,然后凭借ticket通过接口换取二维码图片,但是得到ticket之前首先得获取微

微信公众平台开发(2)扫描二维码添加公众账号

作者做过微信二维码和地理信息的程序,本章介绍一下获取二维码和处理用户扫描二维码的过程. 要想开通生成二维码api必须是认证的服务号,如果没有可以采用公众平台测试账号,地址:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 登陆后台的界面如图: 终于看到了传说中的appID,appsecret. 当微信用户扫描二维码时,实现两个功能: 如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者.

方案优化:网站实现扫描二维码关注微信公众号,自动登陆网站并获取其信息

上一篇  <网站实现扫描二维码关注微信公众号,自动登陆网站并获取其信息> 中已经实现用户扫码登陆网站并获取其信息 但是上一篇方案中存在一个问题,也就是文章末尾指出的可以优化的地方(可以点击这个链接去看一下上篇文章) 首先回顾一下上一篇的思路: 1,微信的系统,提供生成带参数的二维码的接口,这个参数就是唯一值(场景值)  2,网站调用微信系统,获取生成的二维码图片  3,用户扫码会直接调用微信服务器,将用户访问微信服务器的信息记录到redis,key就是唯一值(场景值)  4,网站端做轮训去查询

从零开始开发微信公众号系列篇一:微信测试号申请

从零开始开发微信公众号系列片将会讲述微信账号申请,微信各个接口的实现,同时会为每个接口提供实现的demo.同时,此系列博文也不乏引用博友的一些思想内容,如有问题,欢迎联系于我,谢谢!由于该系列博文是工作之余总结的,有时没及时更新还望博友监督,提醒以达到共勉.俗话说,磨刀不误砍柴工,要进行微信公众号开发首先你得做好以下准备工作,那现在我们先来磨刀.很多人为微信开发账号发愁,这一点不用担心,腾讯还是挺人性化的,作为开发者可以申请测试号来进行微信公众号开发,这样我们就可以不用花冤枉钱去申请微信的订阅号