吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2425|回复: 7
收起左侧

[求助] 扫码带参数的二维码如何获取参数并触发之微擎开发小白问题

[复制链接]
han52036 发表于 2021-5-28 15:04
30吾爱币
本帖最后由 han52036 于 2021-5-28 15:07 编辑

扫码带参数的二维码如何获取参数并触发之微擎开发小白问题


小白第一次玩微擎,估计后续会有很多小白问题请教,所以大佬勿喷!


今天想实现一个小功能,用户可以点击自定义菜单来生成自己的一个推广分享海报的功能。


整理开发流程思路:
1 生成好带参数的二维码,然后生成好海报;

2 存入到数据库中;
3 根据自定义回复接口,返回对应用户的海报;

4 用户扫码关注后,获取参数判断二维码的归属父级账户,然后绑定邀请。


目前我实现的有:生成好了带参数的二维码,目前在测试的时候 无法获取到二维码中的参数,并且对应输出判断。


第一阶段:求如何获取到二维码参数,并分别进行回调!

[PHP] 纯文本查看 复制代码
//根据access_token请求链接获取ticket
$url="https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=$token";
$code='{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 3306}}}';
$ch1=curl_init();
curl_setopt($ch1, CURLOPT_URL,$url);
curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($ch1, CURLOPT_POST,1);
curl_setopt($ch1, CURLOPT_POSTFIELDS,$code);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER,1);//禁止调用时就输出获取到的数据
$result=curl_exec($ch1);
curl_close($ch1);
$result=json_decode($result);



"scene_id": 3306

最佳答案

查看完整内容

你这用的永久二维码,最大数量10W个,用完就没了。 微信文档: 用户扫描带场景值二维码时,可能推送以下两种事件: 如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。 如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者。 1. 用户未关注时,进行关注后的事件推送 推送XML数据包示例: 123456789

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

whwh033 发表于 2021-5-28 15:04
你这用的永久二维码,最大数量10W个,用完就没了。

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

如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。
如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者。
1. 用户未关注时,进行关注后的事件推送

推送XML数据包示例:

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[FromUser]]></FromUserName>
  <CreateTime>123456789</CreateTime>
  <MsgType><![CDATA[event]]></MsgType>
  <Event><![CDATA[subscribe]]></Event>
  <EventKey><![CDATA[qrscene_123123]]></EventKey>
  <Ticket><![CDATA[TICKET]]></Ticket>
</xml>
825578598 发表于 2021-5-28 15:53
我记得二维码会加一个你自定义的URL的,你在url加你的参数,然后用$_GPC获取
 楼主| han52036 发表于 2021-5-28 15:54
whwh033 发表于 2021-5-28 15:42
你这用的永久二维码,最大数量10W个,用完就没了。

微信文档:

文档这个 我知道 scene_str 方法应该都是一样的。我也知道推送的示例是这个,我现在是 我不知道怎么去抓取这个返回的XML。
xiajin 发表于 2021-5-28 16:04
本帖最后由 xiajin 于 2021-5-28 16:14 编辑

eventkey就是二维码写入的scene_str(场景值)。
eventkey就是二维码写入的scene_str(场景值)。
eventkey就是二维码写入的scene_str(场景值)。

代码主要看responseMsg方法后续根据场景值写自己的逻辑代码

[PHP] 纯文本查看 复制代码
class Weixin extends Controller
{
    public function valid() 
    {
        //定义一个常量,存储token的
        //获取微信服务器GET请求的4个参数
        $signature = $_GET['signature'];
        $timestamp = $_GET['timestamp'];
        $nonce = $_GET['nonce'];
        $echostr = $_GET['echostr'];
        //定义一个数组,存储其中3个参数,分别是timestamp,nonce和token
        $tempArr = array($nonce,$timestamp,TOKEN);
        //进行排序
        sort($tempArr,SORT_STRING);
        //将数组转换成字符串
        $tmpStr = implode($tempArr);
        //进行sha1加密算法
        $tmpStr = sha1($tmpStr);
        //判断请求是否来自微信服务器,对比$tmpStr和$signature
        if ($tmpStr == $signature) {
            return true;
        } else {
            return false;
        }
    }

    public function index() 
    {
        if (!isset($_GET['echostr'])) {
            //调用wecat对象中的方法响应用户消息
            $this->responseMsg();
        } else {
            //调用valid()方法,进行token验证
            $echoStr = $_GET["echostr"];
            //valid signature , option
            if ($this->valid()) {
                echo $echoStr;
                exit;
            }
        }
    }
    
    //重要的代码再这里
    //响应消息处理
    public function responseMsg()
    {
        $postStr = file_get_contents("php://input");
        //接收微新传过来的xml消息数据
        //如果接收到了就处理并回复
        if (!empty($postStr)) {
            //将接收的消息处理返回一个对象
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            //从消息对象中获取消息的类型 text  image location voice vodeo link
            $RX_TYPE = trim($postObj->MsgType);  //消息类型
            $eventKey = trim($postObj->EventKey);// 这里就是你写入二维码的参数了,
            //@todoing 在扫码事件里根据二维码参数,写你的逻辑
            $result = '';
            switch ($RX_TYPE) {
                case "event":
                    $result = $this->receiveEvent($postObj);
                    break;
                case "text":
                    $result = $this->receiveText($postObj);     //接收文本消息
                    break;
                default:
                   $result = "unknown msg type: ".$RX_TYPE;   //未知的消息类型
                   break;
            }
            //输出消息给微信
            echo $result;
        } else {
            //如果没有消息则输出空,并退出
            echo "";
            exit;
        }
    }
}

 楼主| han52036 发表于 2021-5-28 16:19
xiajin 发表于 2021-5-28 16:04
eventkey就是二维码写入的scene_str(场景值)。
eventkey就是二维码写入的scene_str(场景值)。
eventk ...

感谢回复,我现在最主要是问题是,我不知道在哪里去抓取这个参数,比如我是新建一个接口文件 在这里面新建framework/builtin/userapi/api   还是在根目录的api.php(公众号后台的服务器回调地址)
whwh033 发表于 2021-5-28 16:55
han52036 发表于 2021-5-28 16:19
感谢回复,我现在最主要是问题是,我不知道在哪里去抓取这个参数,比如我是新建一个接口文件 在这里面新 ...

就是回调,你记录日志,扫码关注下就知道了
xiajin 发表于 2021-5-28 17:33
本帖最后由 xiajin 于 2021-5-28 17:41 编辑
han52036 发表于 2021-5-28 16:19
感谢回复,我现在最主要是问题是,我不知道在哪里去抓取这个参数,比如我是新建一个接口文件 在这里面新 ...

用户扫描二维码触发扫码事件,微信那边之后会向你的服务器回调地址发送数据,你再根据数据里的二维码参数处理逻辑,


responseMsg方法就接收微信推送数据的方法,也就是这里来抓取这个参数

这里的服务器地址写的地址就是你该写处理二维码参数逻辑的地方

2.png
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表