博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信公众平台开发(三)——二维码、创建菜单
阅读量:5089 次
发布时间:2019-06-13

本文共 5475 字,大约阅读时间需要 18 分钟。

一、二维码

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

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

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

下面的代码是获取永久二维码的事例:

/**     * 获取永久二维码需要的ticket     * @param $access_token access_token     * @param $sceneId 场景值id     * @return bool|mixed     */    public function getQrticket($access_token, $sceneId)    {$url = 'https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=' . $access_token;        $raw = array(                'action_name' => 'QR_LIMIT_SCENE',                'action_info' => array(                        'scene' => array(                                'scene_id' => $sceneId                        )                )        );        $json = json_encode($raw);        $res = $this->rawpost($url, $json);        if ($res === false) {            return false;        }        $qrres = json_decode($res, true);        if (isset($qrres['errcode'])) {            return false;        }        return $qrres;    }

返回的JSON将如下图所示:

这个JSON中的URL就是二维码的内容,接下来就是将URL转换为二维码,高端点的话可以通过代码,我偷懒了下,就直接用在线制作二维码来做了。。

这边我通过微信扫二维码而关注的,将会推送不同的提示消息。下面是部分的代码:

if (isset($msgObj->EventKey) && preg_match('/qrscene_(.*)/', $msgObj->EventKey, $scene)) {                //扫码关注                switch ($scene[1]) {                    case AppConst::SCENE_ALCOHOL:                        $pushData['Title'] = '标题';                        break;                }                $pushData['PicUrl'] = 'http://mmbiz.qpic.cn';                $pushData['Description'] = '描述!';                $pushData['Url'] = 'http://mp.weixin.qq.com';                $msg = $weixin->createRawTuWenMsg($fromUserName, $openId, array($pushData));                            }

 

二、创建菜单

1、自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。

2、一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。

3、创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出来。

测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。。

自定义菜单接口可实现多种类型按钮,这里我就介绍了两种,如下:

1、click:点击推事件

用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;

2、view:跳转URL

用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息。

public function actionCreatemenu()    {        $token = $this->get('token');        $innerWeixinKey = WEIXIN_INNER_KEY;        $trueToken = md5('menu' . $innerWeixinKey . 'menu');        if ($token != $trueToken) {            $this->innerOutput(1, '无法通过请求认证');        }        $weixin = new Weixin();        //请注意菜单中的中文一定要采用某种方编码        $menu = array(            'button' => array(                    array(                        'name' => $this->encodeZH('菜单一'),                        'sub_button' => array(                            array(                                'type' => 'view',                                'name' => $this->encodeZH('子菜单一'),                                'key' => 'MENU_GENE_INDEX',                                'url' => 'http://mp.weixin.qq.com/'                            ),                            array(                                'type' => 'view',                                'name' => $this->encodeZH('趣味文章'),                                'key' => 'MENU_ARTICLE',                                'url' => 'http://mp.weixin.qq.com'                            ),                            array(                                'type' => 'view',                                'name' => $this->encodeZH('产品预告'),                                'key' => 'MENU_PRODUCT',                                'url' => 'http://mp.weixin.qq.com/'                            )                        )                    ),                    array(                        'name' => $this->encodeZH('产品流程'),                        'sub_button' => array(                            array(                                'type' => 'view',                                'name' => $this->encodeZH('武松打虎'),                                'key' => 'MENU_GAME',                                'url' => 'xxxx'                            ),                            array(                                'type' => 'view',                                'name' => $this->encodeZH('产品详情'),                                'key' => 'MENU_PRODUCT_DETAIL',                                'url' => 'http://mp.weixin.qq.com/'                            )                        )                    )                )        );            $menuMsg = $this->decodeZHMsg(json_encode($menu));                $accessMongo = new WeixinAccessToken();        $access_token = $accessMongo->getAccessToken();        if (!$access_token) {            $this->innerOutput(2, '无法获取access_token');        }        $weixin = new Weixin();        $res = $weixin->customMenu($menuMsg, $access_token);        if (!$res) {            $this->innerOutput(3, '菜单创建失败');        }        $this->innerOutput(0, '菜单创建成功');    }

1、代码的开始用WEIXIN_INNER_KEY做了一次简单的校验,不做也可以

2、开始组织菜单的结构需要name、type等

3、获取到普通的token,这里可以的方法获取到。

4、注意上面的代码中有encodeZH和decodeZHMsg这两个方法,用于编码的。

/**     * 针对中文字符串编码     * @param $name     * @return string     */    private function encodeZH($name)    {        return '[@' . base64_encode($name) . '@]';    }/**     * 针对消息中存在中文编码过的串进行解码     * @param $msg     * @return mixed     */    private function decodeZHMsg($msg)    {        return preg_replace_callback('/\[\@(.+?)\@\]/', function ($match) {            return base64_decode($match[1]);        }, $msg);    }

demo下载:

摘自:

转载于:https://www.cnblogs.com/wangjinke/p/4766254.html

你可能感兴趣的文章
迅雷极速版任务出错的解决办法(亲测可用)
查看>>
mac下使用PyCharm遇到的坑坑洼洼
查看>>
docker1-1
查看>>
kettle转换JavaScript获取命令行参数
查看>>
学习进度十六
查看>>
C#并行编程-Task
查看>>
Google人工智能面试·真·题(附参考答案+攻略)(转)
查看>>
缓存穿透 缓存雪崩 缓存击穿
查看>>
各类免费api接口
查看>>
关于Boost在工程下的配置
查看>>
[ Java ][ Eclipse ] 停止讓 Eclipse 跳出 Password Required
查看>>
String常用方法
查看>>
一个前端所需具备的PS能力
查看>>
Mac下Jenkins+SVN+Xcode构建持续
查看>>
matplotlib中的颜色及线条控制
查看>>
Linux--逻辑卷管理器
查看>>
SQLServer 在Visual Studio的连接方法
查看>>
CentOS获取公网IP
查看>>
删除文件夹下所有文件
查看>>
巨坑:jqgrid竟然取不到编辑模式下input的值
查看>>