带参数二维码

阅读数:3192
公众平台提供了生成带参数二维码的接口。使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送。

目前有2种类型的二维码:

1、临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景
2、永久二维码,是无过期时间的,但数量较少(目前为最多10万个)。永久二维码主要用于适用于帐号绑定、用户来源统计等场景。

用户扫描带场景值二维码时,可能推送以下两种事件:

如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。

如果用户已经关注公众号,在用户扫描后会自动进入会话,微信也会将带场景值扫描事件推送给开发者。

获取带参数的二维码的过程包括两步,首先创建二维码ticket,然后凭借ticket到指定URL换取二维码。

获取带参数的二维码的过程包括两步,首先创建二维码ticket,然后凭借ticket到指定URL换取二维码。

每次创建二维码ticket需要提供一个开发者自行设定的参数(scene_id:整数)或者(scene_str:字符串)。

1、创建临时二维码ticket
接口:https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN
当参数为整数时,tmp_ticket_id.php

<?php  
@header('Content-type: text/plain;charset=UTF-8');  
require_once("../Utils.php");  
$data = '{  
    "expire_seconds": 604800,  
    "action_name": "QR_SCENE",  
    "action_info": {  
        "scene": {  
            "scene_id": 100  
        }  
    }  
}';  
$url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?"  
    ."access_token=".Utils::get_access_token();  
$result = Utils::https_request($url, $data);  
echo $result; 
返回:
[javascript] view plain copy
{  
    "ticket": "gQHv8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyRW52QnMxeEZlcGkxLXFNNWhwMS0AAgQatrxZAwSAOgkA",  
    "expire_seconds": 604800,  
    "url": "http://weixin.qq.com/q/02EnvBs1xFepi1-qM5hp1-"  
}   

当参数为字符串时,tmp_ticket_str.php
[php] view plain copy
<?php  
@header('Content-type: text/plain;charset=UTF-8');  
require_once("../Utils.php");  
$data = '{  
    "expire_seconds": 604800,  
    "action_name": "QR_STR_SCENE",  
    "action_info": {  
        "scene": {  
            "scene_str": "abcd"  
        }  
    }  
}';  
$url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?"  
    ."access_token=".Utils::get_access_token();  
$result = Utils::https_request($url, $data);  
echo $result;  

返回:
[javascript] view plain copy
{
“ticket”: “gQEN8TwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyNGZPSnRXeEZlcGkxLWhQNTFwYzEAAgQRubxZAwSAOgkA”,
“expire_seconds”: 604800,
“url”: “http://weixin.qq.com/q/024fOJtWxFepi1-hP51pc1
}

2、创建永久二维码ticket
当参数为数字时,never_ticket_id,php

<?php  
@header('Content-type: text/plain;charset=UTF-8');  
require_once("../Utils.php");  
$data = '{  
    "action_name": "QR_LIMIT_SCENE",  
    "action_info": {  
        "scene": {  
            "scene_id": 111  
        }  
    }  
}';  
$url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?"  
    ."access_token=".Utils::get_access_token();  
$result = Utils::https_request($url, $data);  
echo $result;  

返回:
[javascript] view plain copy
{
“ticket”: “gQH88DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyYk44LXNGeEZlcGkxMDAwMHcwM2gAAgRiubxZAwQAAAAA”,
“url”: “http://weixin.qq.com/q/02bN8-sFxFepi10000w03h
}

当参数为字符串时,never_ticket_str.php

    <?php  
    @header('Content-type: text/plain;charset=UTF-8');  
    require_once("../Utils.php");  
    $data = '{  
        "action_name": "QR_LIMIT_STR_SCENE",  
        "action_info": {  
            "scene": {  
                "scene_str": "haha"  
            }  
        }  
    }';  
        $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?"  
            ."access_token=".Utils::get_access_token();  
        $result = Utils::https_request($url, $data);  
        echo $result;  

返回:
[javascript] view plain copy
{
“ticket”: “gQHf8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAydmhZenQzeEZlcGkxMDAwMHcwN1EAAgQGu7xZAwQAAAAA”,
“url”: “http://weixin.qq.com/q/02vhYzt3xFepi10000w07Q
}

获取参数”ticket”生成二维码
https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET

扫码后端获取返回的xml数据

//$GLOBALS["HTTP_RAW_POST_DATA"];  //这个用不了了;换成下面那个
        $postStr = **file_get_contents("php://input")**; //获取微信返回的数据 
        $postObj = json_decode(json_encode(simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA)),true);  //转为数组
        $openid = $postObj['FromUserName'];
        $EventKey = $postObj['EventKey'];   //参数

XML结构

<xml>  
    <ToUserName>  
        <![CDATA[gh_6b9aa8a6f1e2]]>  
    </ToUserName>  
    <FromUserName>  
        <![CDATA[o4WmZ0h-4huBUVQUczx2ezaxIL9c]]>  
    </FromUserName>  
    <CreateTime>1505542211</CreateTime>  
    <MsgType>  
        <![CDATA[event]]>  
    </MsgType>  
    <Event>  
        <![CDATA[SCAN]]>  
    </Event>  
    <EventKey>  
        <![CDATA[haha]]>  
    </EventKey>  
    <Ticket>  
        <![CDATA[gQHf8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAydmhZenQzeEZlcGkxMDAwMHcwN1EAAgQGu7xZAwQAAAAA]]>  
    </Ticket>  
</xml>  

问题:1、获取不到字符串参数

注意: 1、xml可以直接插入数据库 2、数字参数最大长度9位
原文出自
https://blog.csdn.net/qq_28506819/article/details/78002871

猜你喜欢

转载自blog.csdn.net/wbj16116/article/details/80243917