Maison  >  Article  >  développement back-end  >  PHP WeChat génère un code QR de compte public WeChat et le scanne pour accéder au compte public avec des paramètres

PHP WeChat génère un code QR de compte public WeChat et le scanne pour accéder au compte public avec des paramètres

不言
不言original
2018-05-09 12:02:005737parcourir

Cet article présente principalement comment générer un compte public WeChat avec php WeChat et scanner le code QR pour entrer dans le compte public avec des paramètres. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer.

Afin de répondre aux besoins de scénarios tels que l'analyse de la promotion des canaux utilisateur et la liaison des comptes utilisateurs, la plateforme publique fournit une interface pour générer des codes QR avec des paramètres. Grâce à cette interface, plusieurs codes QR avec différentes valeurs de scène peuvent être obtenus. Une fois que l'utilisateur les a scannés, le compte public peut recevoir des notifications d'événements.

Il existe actuellement 2 types de codes QR :

1. Le code QR temporaire a un délai d'expiration et peut être défini sur un maximum de 30 jours après la génération du code QR (c'est-à-dire , il expirera après 2 592 000 secondes), mais il peut générer de plus grandes quantités. Les codes QR temporaires sont principalement utilisés dans des scénarios commerciaux qui ne nécessitent pas de stockage permanent de codes QR, tels que la liaison de compte
2. Les codes QR permanents n'ont pas de délai d'expiration, mais leur nombre est petit (actuellement jusqu'à 100 000). Les codes QR permanents sont principalement utilisés dans des scénarios tels que la liaison de compte et les statistiques de source d'utilisateurs.

Lorsqu'un utilisateur scanne un code QR avec une valeur de scène, les deux événements suivants peuvent être poussés :

Si l'utilisateur n'a pas suivi le compte officiel, l'utilisateur peut suivre le compte officiel. Après avoir suivi, WeChat les événements d'attention de valeur de scénario seront transmis aux développeurs.

Si l'utilisateur a suivi le compte officiel, il entrera automatiquement dans la session après la numérisation, et WeChat transmettra également l'événement de numérisation avec la valeur de la scène au développeur.

Le processus d'obtention d'un code QR avec paramètres comprend deux étapes. Tout d'abord, créez un ticket de code QR, puis utilisez le ticket vers l'URL spécifiée pour échanger le code QR.

Créer un ticket de code QR

Chaque fois que vous créez un ticket de code QR, vous devez fournir un paramètre (scene_id) défini par le développeur. Nous introduisons le code QR temporaire et le QR permanent. code respectivement. Le processus de création d’un ticket de code QR.

Attention
expire_seconds La durée de validité du code QR, en secondes. La valeur maximale ne peut pas dépasser 2592000 (soit 30 jours). Si ce champ n'est pas renseigné, la période de validité par défaut est de 30 secondes.
action_name Type de code QR, QR_SCENE est une valeur de paramètre entier temporaire, QR_STR_SCENE est une valeur de paramètre de chaîne temporaire, QR_LIMIT_SCENE est une valeur de paramètre entier permanent, QR_LIMIT_STR_SCENE est une valeur de paramètre de chaîne permanente
Détails du code QR action_info
scene_id ID de valeur de scène, qui est un entier non nul de 32 bits lors de l'utilisation d'un code QR temporaire. La valeur maximale lors de l'utilisation d'un code QR permanent est de 100 000 (actuellement, le paramètre ne prend en charge que 1 à 100 000)
. scene_str ID de valeur de scène (ID sous forme de chaîne), type de chaîne, limite de longueur de 1 à 64

<?php
namespace app\api\model;
set_time_limit(30);
class WxQrcode{
    //构造方法
    static $qrcode_url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?";    
    static $token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&";    
    static $qrcode_get_url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?";    //生成二维码
    public function getEwm($fqid,$type = 1){
        $appid = &#39;你的appid&#39;;        $secret = &#39;你的secret&#39;;        
        $ACCESS_TOKEN = $this->getToken($appid,$secret);        
        $url = $this->getQrcodeurl($ACCESS_TOKEN,$fqid,$type);
        save_log(&#39;测试保存的路径&#39;.$url.&#39;fid&#39;.$fqid);        
        return $this->DownLoadQr($url,time());
    }    
    protected function getQrcodeurl($ACCESS_TOKEN,$fqid,$type = 1){
        $url = self::$qrcode_url.&#39;access_token=&#39;.$ACCESS_TOKEN;        
        if($type == 1){            
        //生成永久二维码
            $qrcode= &#39;{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_str": &#39;.$fqid.&#39;}}}&#39;;
        }else{            
        //生成临时二维码
            $qrcode = &#39;{"expire_seconds": 604800, "action_name": "QR_STR_SCENE", "action_info": {"scene": {"scene_str": &#39;.$fqid.&#39;}}}&#39;;
        }        $result = $this->http_post_data($url,$qrcode);        
        $oo = json_decode($result[1]);        
        if (empty($oo->ticket)){            
        return false;
        }        
        if(!$oo->ticket){            
        $this->ErrorLogger(&#39;getQrcodeurl falied. Error Info: getQrcodeurl get failed&#39;);            
        exit();
        }        $url = self::$qrcode_get_url.&#39;ticket=&#39;.$oo->ticket.&#39;&#39;;        
        return $url;
    }    
    protected function getToken($appid,$secret){
        $ACCESS_TOKEN = file_get_contents(self::$token_url."appid=$appid&secret=$secret");        
        $ACCESS_TOKEN = json_decode($ACCESS_TOKEN);        
        $ACCESS_TOKEN = $ACCESS_TOKEN->access_token;        
        return $ACCESS_TOKEN;
    }    
    protected function http_post_data($url, $data_string) {

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(                
        &#39;Content-Type: application/json; charset=utf-8&#39;,                
        &#39;Content-Length: &#39; . strlen($data_string))
        );
        ob_start();
        curl_exec($ch);        i
        f (curl_errno($ch)) {            
        $this->ErrorLogger(&#39;curl falied. Error Info: &#39;.curl_error($ch));
        }        
        $return_content = ob_get_contents();
        ob_end_clean();        
        $return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);        
        return array($return_code, $return_content);
    }    //下载二维码到服务器
    protected function DownLoadQr($url,$filestring){
        if($url == ""){            
        return false;
        }        
        $filename = $filestring.rand(0,99999999999).&#39;.jpg&#39;;
        ob_start();
        readfile($url);        
        $img=ob_get_contents();
        ob_end_clean();        
        $size=strlen($img);        
        $fp2=fopen(&#39;static/qrcode/&#39;.$filename,"a");        
        if(fwrite($fp2,$img) === false){            
        $this->ErrorLogger(&#39;dolwload image falied. Error Info: 无法写入图片&#39;);            
        exit();
        }
        fclose($fp2);        
        return &#39;static/qrcode/&#39;.$filename;
    }    //错误日志
    private function ErrorLogger($errMsg){
        $logger = fopen(&#39;log.txt&#39;, &#39;a+&#39;);
        fwrite($logger, date(&#39;Y-m-d H:i:s&#39;)." Error Info : ".$errMsg."\r\n");
        fclose($logger);
    }

}

Ce qui précède est l'intégralité du contenu de cet article, veuillez faire attention au contenu plus connexe PHP Site chinois.

Recommandations associées :

Développement de PHP WeChat pour synchroniser les fans

Développement de compte public PHP WeChat pour obtenir les informations personnelles des utilisateurs WeChat

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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