Home >WeChat Applet >WeChat Development >WeChat public platform develops QR codes and creates menus

WeChat public platform develops QR codes and creates menus

高洛峰
高洛峰Original
2017-03-01 10:04:322305browse

1. QR code

1. Temporary QR code has an expiration time. It can be set to expire 7 days (i.e. 604800 seconds) after the QR code is generated, but Able to generate larger quantities. Temporary QR codes are mainly used in business scenarios that do not require permanent storage of QR codes, such as account binding.
2. Permanent QR codes have no expiration time, but the number is small (currently up to 100,000). Permanent QR codes are mainly used in scenarios such as account binding and user source statistics. The maximum value for permanent QR code is 100000 (currently the parameter only supports 1--100000).

The following code is an example of obtaining a permanent QR code:


/**
     * 获取永久二维码需要的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;
    }


The returned JSON will be as shown below Display:


微信公众平台开发二维码、创建菜单

The URL in this JSON is the content of the QR code. The next step is to convert the URL into a QR code. High-end If you click on it, you can pass the code. I was lazy and just made a QR code online.

The ones I follow by scanning the QR code on WeChat will push different reminder messages. The following is part of the code:

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));
                
            }

2. Create menu

1. The custom menu includes up to 3 first-level menus, and each first-level menu contains up to 5 second-level menus.

2. The first-level menu can contain up to 4 Chinese characters, and the second-level menu can contain up to 7 Chinese characters. The extra parts will be replaced by "...".

3. After creating a custom menu, due to WeChat client caching, it will take 24 hours for the WeChat client to display it.

When testing, you can try to unfollow the public account and follow it again, and you can see the effect after creation. Click to view online documentation.

The custom menu interface can implement multiple types of buttons. Here I will introduce two types, as follows:

1. Click: click push event

User click click type After pressing the button, the WeChat server will push the message type event structure to the developer through the message interface (refer to the message interface guide), and bring the key value filled in by the developer in the button. The developer can communicate with the user through the customized key value. Interaction;

2. View: Jump URL

After the user clicks the view type button, the WeChat client will open the webpage URL filled in by the developer in the button, and can authorize the user with the webpage Combined with the basic information interface, the basic information of the user can be obtained.

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. A simple verification is done with WEIXIN_INNER_KEY at the beginning of the code. You can do it without doing it.

2. The structure of the start organization menu requires name, type, etc.

3. Obtain the ordinary token. You can obtain it by referring to the method of developing access_token and log on the WeChat public platform.

4. Note that there are two methods, encodeZH and decodeZHMsg, in the above code, which are used for encoding.

/**
     * 针对中文字符串编码
     * @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 download:

github address: https://github.com/pwstrick/weixin_demo

CSDN address: http://download.csdn.net/detail /loneleaf1/9045731

For more related articles on WeChat public platform development of QR codes and creation of menus, please pay attention to the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn