Maison > Applet WeChat > Développement WeChat > Développement de la plateforme publique WeChat access_token, journal

Développement de la plateforme publique WeChat access_token, journal

高洛峰
Libérer: 2017-03-01 10:09:54
original
1577 Les gens l'ont consulté

1. access_token

1) Deux types de access_token, l'autorisation de page Web access_token et l'access_token ordinaire

1. L'autorisation de page Web WeChat est mise en œuvre via le mécanisme OAuth2.0. compte officiel Enfin, le compte public peut obtenir un identifiant d'appel d'interface spécifique à l'autorisation de page Web (access_token d'autorisation de page Web). Grâce au access_token d'autorisation de page Web, il peut effectuer des appels d'interface post-autorisation, tels que l'obtention d'informations utilisateur de base.


2. Pour les autres interfaces WeChat, vous devez obtenir l'appel access_token ordinaire via l'interface "Get access_token" dans le support de base. L'access_token est le ticket unique au monde pour le compte officiel. La période de validité de l'access_token est actuellement de 2 heures et doit être actualisée régulièrement. Une acquisition répétée rendra le dernier access_token invalide.

2) Obtenez respectivement access_token

1. Autorisation de la page Web : cliquez pour afficher l'autorisation de la page Web pour obtenir le document d'informations de base de l'utilisateur En consultant ce document, <.>

Vous pouvez voir que le code est échangé contre l'autorisation de page Web access_token, et ce code est obtenu via un lien d'autorisation sur WeChat, puis obtenu selon la demande dans le document pour l'adresse et les paramètres spécifiques du lien. , veuillez vous référer au document.

/**
     * 创建一个需要通过微信的OAuth2.0认证的服务url
     * @param $url 服务号需要认证访问的url
     * @param $scope string snsapi_userinfo | snsapi_base
     *      snsapi_userinfo 可以用来获取用户信息
     *      snsapi_base 可以用来获取openid
     * @param string $state 自定义状态值
     *      此处约定为from_weixin代表是从微信认证过来,一般无需轻易变化
     * @return string 返回认证url地址
     */
    public function createAuthUrl($url, $scope = 'snsapi_base', $state = 'from_weixin')
    {
        $url = strval($url);
        $authUrl = 'https://open.weixin.qq.com/connect/oauth2/authorize';
        /**
         * 此处有大坑,请不要打乱param的顺序
         * 否则微信认证界面会出现白屏
         */
        $param = array(
                'appid' => $this->appId,
                'redirect_uri' => urlencode($url),
                'response_type' => 'code',
                'scope' => $scope,
                'state' => $state
        );
    
        $seg = array();
        foreach ($param as $k => $v) {
            $seg[] = "{$k}={$v}";
        }
        return $authUrl . '?' . join('&', $seg) . '#wechat_redirect';
    }
Copier après la connexion

2. Ordinaire : cliquez pour afficher le document du jeton d'accès, qui est obtenu via trois paramètres.

Ce qu'il faut noter ici, c'est que le token obtenu est sensible au temps, 2 heures, je vais donc le sauvegarder dans MongoDB et le comparer d'abord avec la base de données pour voir s'il a timed out, sinon, récupérez-le directement à partir de la base de données pour réduire les requêtes inutiles.

2. Push logs

Lors de l'interaction avec WeChat, de nombreuses informations de journal seront générées et il est souvent nécessaire de les analyser. ces journaux pendant le développement, ici je sauvegarde les journaux dans MongoDB. L'avantage de MongoDB est que des données de n'importe quelle structure peuvent être placées dans un document. Contrairement à MySQL, qui nécessite des noms de champs bien définis, je place souvent diverses structures dans un document lors du débogage.

Dans la page d'entrée de WeChat, qui est l'URL (adresse du serveur) mentionnée ci-dessus, la logique de sauvegarde du journal se fera ici. La logique consiste à envoyer un message lors du suivi, à scanner le code QR à suivre, à cliquer sur un menu pour générer un événement, à cliquer sur le lien hypertexte du menu, etc.

La structure du journal est la suivante :

1 Le code inclut une logique de vérification de signature

2 via file_get_contents(. 'php: //input') pour obtenir les données de la requête, qui est la méthode getRawMsg ci-dessous

3. Insérez le journal push directement dans MongoDB

4. Convertissez les informations de la requête reçue en Objet SimpleXMLElement, qui est la méthode parseMsg suivante

5. handleEventMsg gère diverses situations

/**
     * 微信公众号入口
     */
    public function actionPortal()
    {
        $weixin = new Weixin();
        //签名验证逻辑
//         if($weixin->checkSignature()){
//             echo $_GET['echostr'];
//         }
//         exit;
        //读取原始请求数据
        $msg = $weixin->getRawMsg();
        
        //推送日志
        $pushlog = new WeixinPushLog();
        $pushlog->logWeixinPush($msg);
        
        $msgObj = $weixin->parseMsg($msg);
        if ($msgObj === false || !is_object($msgObj)) {
            exit;
        }
        switch ($msgObj->MsgType) {
            case 'event' : //接收事件消息
                $this->handleEventMsg($msgObj);
                break;
            default :
                //todo
                break;
        }
    }
Copier après la connexion

public function getRawMsg()
    {
        return file_get_contents('php://input');
    }

    /**
     * 解析接收到的消息
     * @param string $msg 消息体
     * @return bool|SimpleXMLElement
     */
    public function parseMsg($msg = '')
    {
        if (!$msg || empty($msg)) {
            return false;
        }
        $msgObj = simplexml_load_string($msg, 'SimpleXMLElement', LIBXML_NOCDATA);
        if ($msgObj === false || !($msgObj instanceof \SimpleXMLElement)) {
            return false;
        }
        return $msgObj;
    }
Copier après la connexion

6. Si vous souhaitez envoyer des messages, la méthode die doit être ajoutée

7 Le code suivant ne répertorie que deux situations d'événement, l'une est l'abonnement, une. est l'événement de clic

8. createRawTuWenMsg épisse du XML, cliquez pour afficher l'interface du modèle de message.

private function handleEventMsg($msgObj)
    {
        $weixin = new Weixin();
        $openId = $msgObj->FromUserName;
        $fromUserName = $msgObj->ToUserName;
        //未关注,关注后推送
        if ($msgObj->Event == 'subscribe') {
            $pushData['PicUrl'] = 'http://mmbiz.qpic.cn/';
            $pushData['Title'] = '基因检测,带你一起探索生命的奥妙 ';
            $pushData['Description'] = '为什么不同人在身高、体重、肤色和形状上长得不一样?但是往往又和自己的父母相似?';
            $pushData['Url'] = 'http://mp.weixin.qq.com';
            $msg = $weixin->createRawTuWenMsg($fromUserName, $openId, array($pushData));

            die($msg);
        }elseif($msgObj->Event == 'CLICK'){
            //die($msg);
        }
    }
Copier après la connexion

public function createRawTuWenMsg($fromUserName, $toUserName, $items = array())
    {
        if (!is_array($items)) {
            return '';
        }
        $count = count($items);
        $its = '';
        foreach ($items as $item) {
            $its .= <<<ITEMTPL
<item>
<Title><![CDATA[{$item[&#39;Title&#39;]}]]></Title>
<Description><![CDATA[{$item[&#39;Description&#39;]}]]></Description>
<PicUrl><![CDATA[{$item[&#39;PicUrl&#39;]}]]></PicUrl>
<Url><![CDATA[{$item[&#39;Url&#39;]}]]></Url>
</item>
ITEMTPL;
        }
    
        $msg = <<<MSG
<xml>
<ToUserName><![CDATA[{$toUserName}]]></ToUserName>
<FromUserName><![CDATA[{$fromUserName}]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>{$count}</ArticleCount>
<Articles>
{$its}
</Articles>
</xml>
MSG;
    return $msg;
    }
Copier après la connexion
téléchargement de la démo :

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

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

Pour plus d'articles liés au développement de la plateforme publique WeChat, access_token et journaux, veuillez prêter attention à le site PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal