>  기사  >  백엔드 개발  >  PHP WeChat은 WeChat 공개 계정 QR 코드를 생성하고 이를 스캔하여 매개변수가 있는 공개 계정에 들어갑니다.

PHP WeChat은 WeChat 공개 계정 QR 코드를 생성하고 이를 스캔하여 매개변수가 있는 공개 계정에 들어갑니다.

不言
不言원래의
2018-05-09 12:02:005804검색

이 글은 주로 PHP WeChat을 사용하여 QR 코드를 스캔하여 매개변수가 있는 공개 계정을 입력하는 방식으로 WeChat 공개 계정을 생성하는 방법을 소개합니다. 여기에는 특정 참조 값이 있으며 이제 도움이 필요한 모든 사람과 공유됩니다.

사용자 채널 프로모션 분석을 충족하기 위해 사용자 계정 바인딩과 같은 시나리오 요구 사항을 충족하기 위해 공개 플랫폼은 매개 변수를 사용하여 QR 코드를 생성하기 위한 인터페이스를 제공합니다. 이 인터페이스를 사용하면 서로 다른 장면 값을 가진 여러 개의 QR 코드를 얻을 수 있으며, 이를 스캔한 후 공개 계정은 이벤트 푸시를 받을 수 있습니다.

현재 2가지 유형의 QR 코드가 있습니다.

1. 임시 QR 코드에는 만료 시간이 있습니다. QR 코드가 생성된 후 30일(예: 2592000초)에 만료되도록 설정할 수 있지만 더 많은 수량을 생성할 수 있습니다. 임시 QR 코드는 계정 바인딩과 같이 QR 코드의 영구 저장이 필요하지 않은 비즈니스 시나리오에 주로 사용됩니다.
2. 영구 QR 코드는 만료 시간이 없지만 개수가 적습니다(현재 최대 100,000개). 영구 QR 코드는 주로 계정 바인딩 및 사용자 소스 통계와 같은 시나리오에 사용됩니다.

사용자가 장면 값이 포함된 QR 코드를 스캔하면 다음 두 가지 이벤트가 푸시될 수 있습니다.

사용자가 공식 계정을 팔로우하지 않은 경우 사용자는 공식 계정을 팔로우할 수 있습니다. WeChat은 다음 이벤트를 푸시합니다. 개발자에게 장면 값을 제공합니다.

사용자가 공식 계정을 팔로우한 경우 사용자는 스캔 후 자동으로 세션에 입장하고 WeChat은 장면 값과 함께 스캔 이벤트를 개발자에게 푸시합니다.

매개변수가 포함된 QR 코드를 얻는 과정은 먼저 QR 코드 티켓을 생성한 다음 지정된 URL에 대한 티켓을 사용하여 QR 코드로 교환하는 과정으로 구성됩니다.

QR코드 티켓 만들기

QR코드 티켓을 만들 때마다 개발자가 설정한 매개변수(scene_id)를 제공해야 합니다. 임시 QR코드와 영구 QR코드에 대한 QR코드 티켓을 만드는 과정을 각각 소개합니다. .

주의
만료_초 QR 코드의 유효 시간(초)입니다. 최대값은 2592000(즉, 30일)을 초과할 수 없습니다. 이 필드를 채우지 않으면 기본 유효 기간은 30초입니다.
action_name QR 코드 유형, QR_SCENE은 임시 정수 매개변수 값, QR_STR_SCENE은 임시 문자열 매개변수 값, QR_LIMIT_SCENE은 영구 정수 매개변수 값, QR_LIMIT_STR_SCENE은 영구 문자열 매개변수 값
action_info QR 코드 세부정보
scene_id 임시 QR 코드를 사용할 때 0이 아닌 32비트 정수인 장면 값 ID입니다. 영구 QR 코드를 사용할 때 최대값은 100000입니다(현재 매개변수는 1~100000만 지원합니다)
scene_str 장면 값 ID(문자열 형식의 ID), 문자열 유형, 길이 제한은 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);
    }

}

위 내용은 이 글의 전체 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 참고해 주세요.

관련 추천:

팬 동기화를 위한 PHP WeChat 개발

php 사용자 WeChat 개인 정보 획득을 위한 WeChat 공개 계정 개발

위 내용은 PHP WeChat은 WeChat 공개 계정 QR 코드를 생성하고 이를 스캔하여 매개변수가 있는 공개 계정에 들어갑니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.