微信开发带参数二维码php_微信开发获取带参数的二维码 - CSDN
  • 微信带参数二维码有2种类型,分别是临时二维码和永久二维码,前者有过期时间,最大为1800秒,但能够生成较多数量,后者无过期时间,数量较少(目前参数只支持1--100000)。两种二维码分别适用于帐号绑定、用户来源...
      微信带参数二维码有2种类型,分别是临时二维码和永久二维码,前者有过期时间,最大为1800秒,但能够生成较多数量,后者无过期时间,数量较少(目前参数只支持1--100000)。两种二维码分别适用于帐号绑定、用户来源统计等场景。

       本例以永久的为例,使用的是ruby语言

    1,创建一个二维码的ticket,关于一些参数可参数官网上的文档,这里直接上代码吧

    def get_ticket wx_mp_user
        appid = wx_mp_user.app_id #公众号app_id
        secret = wx_mp_user.app_secret #公众号app_secret
        url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=#                          {appid}&secret=#{secret}"
        url = URI::encode(url)
        result = RestClient.get(url)#发起get请求,获取公众号的access_token
        info = JSON(result)
        access_token = info['access_token']
        return '' unless access_token.present?
        attrs = "{\"action_name\": \"QR_LIMIT_SCENE\", \"action_info\": {\"scene\": {\"scene_id\": #                 {SCENE_ID}}}}"#请求二维码接口所需的参数,注意转义符
        result = RestClient.post("https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=#                       {access_token}", attrs)#发起post请求,得到ticket
        info = JSON result
        info['ticket']
      end

    通过上面的上步就得到了ticket,现在我们要通过ticket换取二维码了
    换取二维码就要看你具体要怎样了,通过下面的url,将ticket补上去就能看到了,

    https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET

    当然你可以使用代码将它放到你的网站去


    好了,上面的一系列操作是怎么生成一个二维码,现在说一下二维码怎么用,当你们老板想统计一下到底有多少人会对电线杆上某重金求子的广告感兴趣的时候,他就会在广告上放一个二维码,那么那些‘求子若渴’的人扫描 二维码,会发生什么事情呢。

    当某个汉子扫描这个二维码的时候,触发了微信一个叫msgtype的消息类型,扫描的结果有两种,一种是这个汉子关注过你的公众号,直接推送消息,二是汉子没有关注你的公众号,则会弹出一个公众号的关注页面,汉子关注完后再推送消息

    当汉子关注了的时候,微信直接会推一个消息过来,event类型为SCAN, 所以你在SCAN事件里面就能捕捉到扫描 后的key和ticket,如下

    if 'SCAN'.eql?(xml[:Event])

          content = scan_qrcode(mp_user, from_user_name, xml[:EventKey])#这个方法会进行一系统       操作之后,返回一个字符串,给用户,具体怎么操作,看你们自己需要

          response_text(from_user_name, to_user_name, content)

    end


    另一种是汉子没有关注,会弹出一个关注页面,点完关注后,再推送消息

     if 'subscribe'.eql?(xml[:Event])

          #如果是带参数的关注

          if xml[:EventKey].present? && xml[:EventKey].start_with?("qrscene")

            scene_id = xml[:EventKey].split('_').last

            content = scan_qrcode(mp_user, from_user_name, scene_id)#这个方法会进行一系统       操作之后,返回一个字符串,给用户,具体怎么操作,看你们自己需要

            return response_text(from_user_name, to_user_name, content)

          end

    end


    好了,上面的二种方式汉子就能知道二维码到底返回他什么了,当返回我想和你见一面,请往XX卡上打10W,我就会来见你时,汉子会陷入深深的沉思的。

    展开全文
  • 1.带参数二维码介绍及使用场景介绍 - 为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成...2.微信带参数二维码分为两种: -临时二维码,是有过期时间的,最长可以设置为在二维码生...

    1.带参数的二维码介绍及使用场景介绍

     

    - 为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。不同的参数,可以相应不同的操作

    - 使用场景:任何需要区分渠道的需求都适用

     

    2.微信带参数的二维码分为两种:

    - 临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景

    - 永久二维码,是无过期时间的,但数量较少(目前为最多10万个)。永久二维码主要用于适用于帐号绑定、用户来源统计等场景。

     

    3.生成带参数二维码接口调用实例(这里生成的是永久性的二维码,临时性的差不多,只是改下参数,具体看微信开发文档

     1 <?php
     2 $appId = "sdasdfasd";
     3 $appSecret = "asdfasdfadfasdfas";
     4 $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appId}&secret={$appSecret}";
     5 
     6 // $output = getToken($url); 
     7 // $token = (array)json_decode($output);
     8 // $accessToken = $token['access_token'];
     9 // echo $accessToken;
    10 
    11 $accessToken = "adsfasdfasdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdafdfasdfasdfasd";
    12 
    13 $data = '{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 11}}}';
    14 
    15 //获取二维码的ticket的url
    16 $url_get_Qcode_ticket = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={$accessToken}";
    17 
    18 $code = (array)json_decode(getShort($data, $url_get_Qcode_ticket)) ;
    19 // echo $code['ticket'];
    20 
    21 
    22 $ticket = $code['ticket'];
    23 
    24 //获取二维码的url
    25 $url_get_Qcode = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={$ticket}";
    26 
    27 //运行程序会输出一个二维码图片
    28 echo getToken($url_get_Qcode);
    29 
    30 function getShort($data, $url) {
    31     $ch = curl_init();
    32     curl_setopt($ch, CURLOPT_URL, $url);
    33     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    34     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    35     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    36     curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko)");
    37     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    38     curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
    39     curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    40     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    41  
    42     $tmpInfo = curl_exec($ch);
    43 
    44     if (curl_errno($ch)){
    45         return curl_error($ch);
    46     }
    47 
    48     curl_close($ch);
    49     return $tmpInfo;
    50 }
    51 
    52 function getToken($url) {
    53     $ch = curl_init();
    54     curl_setopt($ch, CURLOPT_URL, $url);
    55     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    56     curl_setopt($ch, CURLOPT_HEADER, 0);
    57     curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko)");
    58     curl_setopt($ch, CURLOPT_ENCODING, "gzip");//加入gzip解析
    59     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    60     $output = curl_exec($ch);
    61     curl_close($ch);
    62 
    63     return $output;
    64 }

    运行如上代码后,浏览器会输出个图片格式的二维码,某些情况下回出现乱码,此时更换浏览器试试,比如IE。。。

     

    4.扫描带参数的二维码微信公众平台响应实例

     

    转载于:https://www.cnblogs.com/fangfeiyue/p/7418837.html

    展开全文
  • 之前的几个朋友找到我最近要做一个微信带参数二维码的统计功能,即每个公众号的粉丝会有一个自己的专属二维码,好友或者其他人通过优惠券扫描此带参数二维码之后就会,扫描者会获得一个66元的大礼包,二维码来源的...

    学习交流:

    微信公众号扫描带参数二维码实现推广人员业绩统计功能

    如有问题,可以在CSDN 站内私信我,点击我的个人主页面即可

    之前的几个朋友找到我最近要做一个微信带参数二维码的统计功能,即每个公众号的粉丝会有一个自己的专属二维码,好友或者其他人通过优惠券扫描此带参数二维码之后就会,扫描者会获得一个66元的大礼包,二维码来源的粉丝就会收货平台发放的一个价值5元的优惠券。

    先放一下给几个客户做的效果图:(扫描测试的话将图片保存在本地,或者鼠标右键单击选择在新标签中打开链接即可查看高清大图)效果图带有公众号二维码不方便直接放置,CSDN不允许这样发帖,就先不放置了。

    直接讲一下实现思路:

    1:每个粉丝都会获得自己的一个专属二维码(很明显这是一个带参数的二维码),具体作为标记用户身份的信息下面会讲到。

    2:用户回复关键词(可自定义)、或者是点击菜单获取到这个属于自己的专属二维码。

    3:其他用户扫描此二维码之后会获得66元大礼包,二维码的主人则会获得5元的代金券,即相当于间接帮助公众号引流粉丝。

     

    整个需求大致就如上面所述,比较简单,分析下涉及到微信公众号开发中的哪些接口以及哪些函数调用

    1:带参数二维码的功能,如果是服务号的话会有此功能,所以,不要在订阅号上下功夫,因为压根就没有这个功能。

    2:既然给用户回复的是一个红包图片肯定要做的美观吧,你不可能直接回复一张单调的二维码图片,那样子效果肯定不会好的,所以在此需要用一个素材图片作为背景,然后将带参数二维码加上去,此处主要是涉及到图片拼接的功能,我一般都是用PHP作为开发,所以这类API在GD库中都有。

    3:只有一个红包背景图片,加一个带参数二维码用户可能还不回去扫描,因为大家现在对于二维码都特别特别的谨慎!所以此处如果想让你的好友大胆的去扫描你的二维码需要让他了解到,这个图片是从哪里来的,所以这个就需要在原素材的基础上加上二维码主人的微信信息,这个就需要用到获取当前微信号的头像,昵称等功能,这个需要调用获取用户信息的API

    4:前面说了,如何给用户发这个带参数二维码的红包素材?用户回复关键词比如“66红包”、或者点击菜单,用户会收到这个素材图片。所以此处调用的是上传素材的API;

    5:对于用户关注的过程是肯定是需要做一个处理的,比如用户第一次关注之后二维码的主人会获得一个5元的优惠券,如果用户取关之后再次关注的话,是不应该再获得礼包,并获得优惠券的,这个就需要在数据表中做一下相应的记录去排重了。这个是基础的开发,没有什么需要讲解的地方。

     

    关于每个步骤的功能实现可以查看我的其他博客内容,我会一一附上实现的代码,由于时间原因,其他博客还未完成,所以后续会慢慢加上去。

    关于功能更实现有什么不懂的地方可以站内私信我。

    源代码下载,资源免费,https://download.csdn.net/download/naruto668/10624558

    展开全文
  • php namespace Mp\Controller; use Think\Controller; $wechatObj = new IndexController(); $wechatObj-&gt;responseMsg(); class IndexController extends Controller { private $token; public functi...
    <?php
    namespace Mp\Controller;
    use Think\Controller;
    $wechatObj = new IndexController();  
    $wechatObj->responseMsg();  
    class IndexController extends Controller
    {
    	private $token;
    	public function index($id=''){
    		$mp = M('mp')->find($id);
    		$this->token = $mp['token'];
    		$echostr = I('get.echostr');
    		// echo $echostr;
    		// exit;
    		if(!empty($echostr)){
    			if($this->checkSignature()){
    				echo $echostr;
    				exit;
    			}
    		}
    	}
           public function responseMsg()  
        {  
            //get post data, May be due to the different environments  
            $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];  
      
            //extract post data  
            if (!empty($postStr)){  
                      
                    $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);  
                    $RX_TYPE = trim($postObj->MsgType);  
      
                    switch($RX_TYPE)  
                    {  
                        case "text":  
                            $resultStr = $this->handleText($postObj);  
                            break;  
                        case "event":  
                            $resultStr = $this->handleEvent($postObj);  
                            break;  
                        default:  
                            $resultStr = "Unknow msg type: ".$RX_TYPE;  
                            break;  
                    }  
                    echo $resultStr;  
            }else {  
                echo "";  
                exit;  
            }  
        }  
        public function handleText($postObj)  
        {  
            $fromUsername = $postObj->FromUserName;  
            $toUsername = $postObj->ToUserName;  
            $keyword = trim($postObj->Content);  
            $time = time();  
            $textTpl = "<xml>  
                        <ToUserName><![CDATA[%s]]></ToUserName>  
                        <FromUserName><![CDATA[%s]]></FromUserName>  
                        <CreateTime>%s</CreateTime>  
                        <MsgType><![CDATA[%s]]></MsgType>  
                        <Content><![CDATA[%s]]></Content>  
                        <FuncFlag>0</FuncFlag>  
                        </xml>";   
    
            if(!empty( $keyword ))  
            {  
                $msgType = "text";  
                // $contentStr = "Welcome to wechat world!";  
                $contentStr = $this->keyword($keyword);
               
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);  
                echo $resultStr;  
            }else{  
                echo "Input something...";  
            }  
        }  
      
        public function handleEvent($object)  
        {  
            $contentStr = "";  
            switch ($object->Event)  
            {  
                case "subscribe":  
                    //
                // if (isset($object->EventKey)){
                        // $sceneid = str_replace("qrscene_","",$object->EventKey); 
                        // $data=$this->hu($sceneid);
                         $contentStr = "微信开发考试现在报名了输入报名试试";
                        // $where['tag']=$sceneid;
                        // $data=M('tags')->where('tag="$sceneid"')->find();
                        // $tagid=$data['tag_id'];
                        // $contentStr=$tagid;
                        // $ret=$this->fansGroup($object->FromUserName,$sceneid);
                        // if($ret==true){
                            // $contentStr ='你的openid为'.$sceneid;
                        // }else{
                        //     $contentStr ="失败了,".$object->FromUserName;
                        // } 
                    // }
                    break;
                    case 'SCAN':
                     if(isset($object->EventKey)){
                            $scene_str=$object->EventKey;
                            $ret=$this->fansGroup($object->FromUserName,$scene_str);
                            if($ret==true){
                                $contentStr='你的openid为'.$object->EventKey.'分配到'.$scene_str;
                            }else{
                                $contentStr='失败了,'.json_encode($ret);
                            }
                        }else{
                            $contentStr='您扫描过了哦~';
                        }
                  
                    break;  
                default :  
                    $contentStr = "Unknow Event: ".$object->Event;  
                    break;  
            }  
            $resultStr = $this->responseText($object, $contentStr);  
            return $resultStr;  
        }  
          
                // // public function hu($ii){
                //   return $ii;
                // }
    	private function checkSignature()
    	{
            $signature = $_GET["signature"];
            $timestamp = $_GET["timestamp"];
            $nonce = $_GET["nonce"];	
            		
    		$token = $this->token;
    		$tmpArr = array($token, $timestamp, $nonce);
    		sort($tmpArr);
    		$tmpStr = implode( $tmpArr );
    		$tmpStr = sha1( $tmpStr );
    		
    		if( $tmpStr == $signature ){
    			return true;
    		}else{
    			return false;
    		}
    	}
       
            public function fansGroup($openid="",$tagname=""){
            //当前请求公众号
            // $id = $_GET['id'];
              $mp=getCurrentMp();
            $where['mp_id'] = $mp['id'];
            $where['tag'] = $tagname;
            $data = M('tags')->where($where)->find();
            // print_r($data);
            // exit;
    
            if(!empty($data)){
                $accessToken = getAccess_token();
                $api = "https://api.weixin.qq.com/cgi-bin/tags/members/batchtagging?access_token=" . $accessToken;
                $arr = array();
                $arr = ['openid_list'=>array($openid),'tagid'=>(int)$data['tag_id']];
                // $arr['openid_list'] = array($openid);
                // $arr['tagid'] = 109;
                $arr = json_encode($arr,JSON_UNESCAPED_UNICODE);
                // dump($arr);
                // exit;
                $ret = request_post($api,$arr);
                // print_r($ret);
                // exit;
                if($ret['errcode']==0){
                   return '您被分配到' . $tagname;
                }else{
                   return '分配失败';
                } 
            }else{
               return array('无此标签' . $tagname);
            }
        }
         public function responseText($object, $content, $flag=0)  
    					    {  
    					        $textTpl = "<xml>  
    					                    <ToUserName><![CDATA[%s]]></ToUserName>  
    					                    <FromUserName><![CDATA[%s]]></FromUserName>  
    					                    <CreateTime>%s</CreateTime>  
    					                    <MsgType><![CDATA[text]]></MsgType>  
    					                    <Content><![CDATA[%s]]></Content>  
    					                    <FuncFlag>%d</FuncFlag>  
    					                    </xml>";  
    					        $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $flag);  
    					        return $resultStr;  
    					    } 
    }

    展开全文
  • 1.服务器地址(URL):这里要填写你的后台能够接收到用户事件消息的地址,以后会在这里处理扫描带参数二维码的事件 2.令牌(Token):这里用于验证我们的服务器 3.EncodingAESKey:消息加密密钥 4.消息加密...

    微信公众号后台ip白名单、网页接口域名之类的配置就不多说了,这里主要配置的是开发->基本配置->服务器配置(注:一旦启用改配置,公众号自动回复就会失效):

    1.服务器地址(URL):这里要填写你的后台能够接收到用户事件消息的地址,以后会在这里处理扫描带参数二维码的事件

    2.令牌(Token):这里用于验证我们的服务器

    3.EncodingAESKey:消息加密密钥

    4.消息加密方式:这里在最开始配置的时候建议使用明文

    以上配置使用逻辑可参考链接:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1472017492_58YV5

    然后就是启用配置了,在启用配置之前,我们需要在填写的url的处理中加入相应处理逻辑代码,可参考https://www.easywechat.com/docs/zh-CN/server,如果你的easywechat版本是3.x,请记得切换版本,代码不一样

    以上内容配置成功后,我们就可以搞定生成二维码功能了:

     

    
     
    $result = \Curl::to('https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=' . $app->access_token->getToken())
        ->withData(json_encode([
            'expire_seconds' => 3600*100*10,
            "action_name"=> "QR_STR_SCENE",
            "action_info"=> [ "scene"=> ["scene_str"=> 'test'] ]
        ]))
        ->post();
    $file = \Curl::to('https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=' . urlencode($result->ticket))->get();
    return response($file, 200)->header('Content-Type', 'image/jpg');

    向微信服务器申请ticket,注意临时二维码的ticket是有过期时间的,拿到ticket之后,我们就可以用ticket去向微信服务器换取二维码了。参考链接:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1443433542

    注:最好存储返回结果中的url,方便后期自己生成带logo等其他样式的二维码

     

    展开全文
  • 微信公众号平台开发者那里,在“账号管理”那里,有一项功能是“生成带参数二维码”,通过这儿生成的二维码,只要通过微信扫一扫之后,会把事件自动推送到微信公众号上 用微信扫一扫推送到开发者网址那儿的数据...
  • 公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。 目前有2种类型的二维码: 1、临时二维码,是有过期时间的,最长可以设置为在二维码...
  • 最近做微信PC端网页微信相关功能的开发,从一个新手的角度来说,微信公众号的文档还是不好理解的,网上找的帖子大都也都基本上是复制微信公众平台上给的文档,开发微信带参数二维码过程中还是遇到不少坑的,在此把我...
  • 为了满足用户渠道推广分析和用户帐号绑定等场景的需要,公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。 目前有2种类型的二维码: 1...
  • 最近做微信PC端网页微信相关功能的开发,从一个新手的角度来说,微信公众号的文档还是不好理解的,网上找的帖子大都也都基本上是复制微信公众平台上给的文档,开发微信带参数二维码过程中还是遇到不少坑的,在此把我...
  • 我们在微信公众号开发C#系列-7、消息管理-接收事件推送章节有对扫描带参数二维码事件的处理做了讲解。本篇主要讲解通过微信公众号开发平台提供的接口生成带参数二维码及应用场景。 微信公众号平台提供了生成带参数...
  • 上个帖子已经配置好了微信服务器,下面就是要调微信接口生成二维码 具体接口信息请参考微信官方文档:微信官方文档 1、生成带参数二维码 (1)、调微信接口生成生成二维码前先要获取 access_token,下面是获取...
  • 所需代码封装在类里,demo.php里填上自己的access_token即可运行。
  • 微信小程序官方开放了3个创建二维码的接口,...这个请求起来也是很容易的,微信开发文档有请求接口: 要把自己的小程序的APPID和APPSECRET获取到 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_c...
  • 我们通过微信扫码二维码已经是十分频繁的操作了,为了满足用户渠道推广分析和用户帐号绑定等场景的需要,微信公众平台提供了创建带参数二维码的接口,通过产生的ticket,去获取二维码图片。当用户扫描这个二维码时,...
  • 当然从公众号跳转到小程序,多多少少是需要一点业务相关参数的。 本篇主要将二维码生成,以及事件推送 一、二维码生成 根据官方文档介绍,目前公众号二维码主要有永久和临时两种,但是永久二维码是有数量限制的,...
  • 之前的几个老客户找到我最近要做一个微信公众号生成带参数海报二维码的统计功能,即每个公众号的粉丝会有一个自己的专属二维码,好友或者其他人通过优惠券扫描此带参数二维码之后就会,扫描者会获得一个66元的大礼包...
  • 思路:在用户扫码关注公众号时,二维码带上推广者的id,在关注公众号后,获取到该推广者的id。目前有2种类型的二维码: 1、临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期...
  • 就在今年春节期间,有个我不愿提及的人说要做个使用微信扫描二维码的方式实现会议签到的功能,当时还没接触任何的微信开发,也就只说自己不会微信开发。直到今天才直到应该怎么实现。现在很多东西都用php来开发微信...
  • 微信小程序在当前的技术环境中占据了大量市场。 此次接到客户需求,需求的描述很简洁:通过微信扫码,进入小程序并继续完成业务操作 ...我们可以根据微信开发文档(可以搜索普通链接二维码到文档页面)h...
1 2 3 4 5 ... 20
收藏数 3,522
精华内容 1,408
关键字:

微信开发带参数二维码php