>  기사  >  위챗 애플릿  >  코드는 여전히 사용하기 쉽고 몇 단계만 거치면 사용자가 공식 계정을 팔로우했는지 확인할 수 있습니다.

코드는 여전히 사용하기 쉽고 몇 단계만 거치면 사용자가 공식 계정을 팔로우했는지 확인할 수 있습니다.

php是最好的语言
php是最好的语言원래의
2018-07-25 15:04:329419검색

오늘의 많은 활동은 사용자가 활동에 참여하기 위해 공개 계정을 팔로우하도록 안내합니다. 사용자가 공개 계정을 팔로우했는지 판단하는 방법은 실제로 매우 간단합니다. 이 문서의 PHP 코드는 더 이상 걱정할 필요가 없습니다. 기사가 매우 자세하게 설명되어 있습니다.

1. WeChat 공개 플랫폼 구성

1. appid, appsecret 가져오기, 화이트리스트 추가

WeChat 공개 플랫폼에 로그인하고 기본 구성에 들어갑니다. 개발에는 appId와 appSecret이라는 두 개의 매개변수를 사용해야 합니다(appSecret은 한 번만 표시되므로 저장해야 하며, 그렇지 않으면 재설정하여 가져와야 합니다).
access_token을 얻을 때 IP 화이트리스트를 추가해야 합니다.
코드는 여전히 사용하기 쉽고 몇 단계만 거치면 사용자가 공식 계정을 팔로우했는지 확인할 수 있습니다.

보려면 클릭

코드는 여전히 사용하기 쉽고 몇 단계만 거치면 사용자가 공식 계정을 팔로우했는지 확인할 수 있습니다.
수정하려면 클릭
코드는 여전히 사용하기 쉽고 몇 단계만 거치면 사용자가 공식 계정을 팔로우했는지 확인할 수 있습니다.

2. 웹페이지 인증 추가

공식 계정 설정 입력 = "기능 설정 =" 웹페이지 인증 도메인 이름
코드는 여전히 사용하기 쉽고 몇 단계만 거치면 사용자가 공식 계정을 팔로우했는지 확인할 수 있습니다.설정 클릭, 도메인 입력 입력란에 인증 콜백 페이지 이름 1번 항목을 참조(1개만 입력 가능), 3번 항목의 txt 문서를 다운로드하여 서버의 루트 디렉터리에 업로드합니다.
코드는 여전히 사용하기 쉽고 몇 단계만 거치면 사용자가 공식 계정을 팔로우했는지 확인할 수 있습니다.

2. PHP 백엔드 구현

1. 글로벌 토큰 획득

이 토큰은 2시간 동안 유효하며 만료 후 다시 획득해야 합니다.
PS: 프로젝트는 동일한 인터페이스를 사용해야 합니다. 그렇지 않으면 서로 스쳐 지나가기 쉽고 만료가 발생할 수 있습니다.

public static function getToken($appid, $appsecret){
    $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret;
    return Curl::callWebServer($url);
}

正确返回结果:
    {
        "access_token": "ACCESS_TOKEN",
        "expires_in": 7200
    }
    返回结果参数说明:
    参数              说明
    access_token      获取到的全局token
    expires_in        凭证有效时间,单位:秒
    
错误返回结果:
    {"errcode": 40013, "errmsg": "invalid appid"}
    返回结果参数说明:
    返回码    说明
    -1       系统繁忙,此时请开发者稍候再试
    0        请求成功
    40001    AppSecret错误或者AppSecret不属于这个公众号,请开发者确认        AppSecret的正确性
    40002    请确保grant_type字段值为client_credential
    40164    调用接口的IP地址不在白名单中,请在接口IP白名单中进行设置。(小程序及小游戏调用不要求IP地址在白名单内。)

2. 사용자와 연결된 공용 계정의 openid를 얻는 방법은 두 단계로 나누어집니다. 먼저 공용 계정에 대한 사용자 인증 코드를 얻은 다음 이 코드를 사용하여 임시 access_token과 openid를 얻습니다.

사용자 인증 코드 받기

public static function getCode($appId, $redirect_uri, $state=1, $scope='snsapi_base', $response_type='code'){
    $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='.$appId.'&redirect_uri='.$redirect_uri.'&response_type='.$response_type.'&scope='.$scope.'&state='.$state.'#wechat_redirect';
    header('Location: '.$url, true, 301);
}

正确返回结果:
    返回code码,并且跳转回调页面$redirect_uri
    
错误返回结果:
    {"errcode": 10003, "errmsg": "redirect_uri域名与后台配置不一致"}
    返回结果参数说明:
    返回码    说明
    10003    redirect_uri域名与后台配置不一致
    10004    此公众号被封禁
    10005    此公众号并没有这些scope的权限
    10006    必须关注此测试号
    10009    操作太频繁了,请稍后重试
    10010    scope不能为空
    10011    redirect_uri不能为空
    10012    appid不能为空
    10013    state不能为空
    10015    公众号未授权第三方平台,请检查授权状态
    10016    不支持微信开放平台的Appid,请使用公众号Appid

getCode를 통해 얻은 코드를 웹페이지에서 승인된 access_token 및 openid로 교환

public static function getAccessToken($code, $appid, $appsecret, $grant_type='authorization_code'){
    $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$appid.'&secret='.$appsecret.'&code='.$code.'&grant_type='.$grant_type.'';
    return Curl::callWebServer($url);
}
   
正确返回结果:
    { 
        "access_token": "ACCESS_TOKEN",
        "expires_in": 7200,
        "refresh_token": "REFRESH_TOKEN",
        "openid": "OPENID",
        "scope": "SCOPE"
    }
    返回参数说明
    参数            描述
    access_token    网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
    expires_in    access_token接口调用凭证超时时间,单位(秒)
    refresh_token    用户刷新access_token
    openid    用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
    scope    用户授权的作用域,使用逗号(,)分隔
    
错误返回结果:
    {"errcode":40029, "errmsg":"invalid code"}

3. 사용자 정보 얻기

2단계에서 얻은 openId와 1단계에서 얻은 토큰을 사용하여 사용자 정보 얻기

public static function getUserInfo($openId, $token){
    $url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$token.'&openid='.$openId.'&lang=zh_CN';
    return Curl::callWebServer($queryUrl, '', 'GET');
}
正确返回结果:
    {
        "subscribe": 1, 
        "openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M", 
        "nickname": "Band", 
        "sex": 1, 
        "language": "zh_CN", 
        "city": "广州", 
        "province": "广东", 
        "country": "中国", 
        "headimgurl":"http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0",
        "subscribe_time": 1382694957,
        "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
        "remark": "",
        "groupid": 0,
        "tagid_list":[128,2],
        "subscribe_scene": "ADD_SCENE_QR_CODE",
        "qr_scene": 98765,
        "qr_scene_str": ""
    }
    返回参数说明:
        参数            说明
        subscribe       用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。
        openid          用户的标识,对当前公众号唯一
        nickname        用户的昵称
        sex             用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
        city            用户所在城市
        country         用户所在国家
        province        用户所在省份
        language        用户的语言,简体中文为zh_CN
        headimgurl      用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
        subscribe_time  用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间
        unionid         只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。
        remark          公众号运营者对粉丝的备注,公众号运营者可在微信公众平台用户管理界面对粉丝添加备注
        groupid         用户所在的分组ID(兼容旧的用户分组接口)
        tagid_list      用户被打上的标签ID列表
        subscribe_scene 返回用户关注的渠道来源,ADD_SCENE_SEARCH 公众号搜索,ADD_SCENE_ACCOUNT_MIGRATION 公众号迁移,ADD_SCENE_PROFILE_CARD 名片分享,ADD_SCENE_QR_CODE 扫描二维码,ADD_SCENEPROFILE LINK 图文页内名称点击,ADD_SCENE_PROFILE_ITEM 图文页右上角菜单,ADD_SCENE_PAID 支付后关注,ADD_SCENE_OTHERS 其他
        qr_scene        二维码扫码场景(开发者自定义)
        qr_scene_str    二维码扫码场景描述(开发者自定义)

错误结果:
    {"errcode":40013,"errmsg":"invalid appid"}

3.

를 사용하여 공개 계정을 팔로우했는지 확인하세요. 입구는 다음과 같습니다.

public function isConcern($appId, $appSecret) {
    $param = ''; // 如果有参数
    $this->getCode($appId, U('callback', 'param='.$param), 1 ,'snsapi_base');
}

승인 후 콜백

public function callback(){
    $isconcern = 0;
    $code = $this->_get('code');
    $param = $this->_get('param');
    $appId = C('appId'); // config中配置
    $appSecret = C('appSecret');
    $accessTokenInfo = $this->getAccessToken($code, $appId, $appSecret);
    $openId = $accessTokenInfo['openid'];
    $accessToken = $accessTokenInfo['access_token'];
    $token = $this->getToken($appId, $appSecret);
    $userInfo = $this->getUserInfo($openId, $token['access_token']);
    if($userInfo['subscribe'] == 1){
        $this->assign('userInfo', $userInfo);
        $isconcern = 1; // 已关注
    } else {
        $isconcern = 0; // 未关注
    }
    $this->assign('openid', $openId);
    $this->display('page');
}

이 때 페이지에서 userInfo 및 isconcern을 얻을 수 있습니다. isconcern이 ​​1이면 공식 계정을 팔로우했다는 의미입니다. 그렇지 않으면 관심을 기울이지 않았습니다.

관련 추천:

WeChat 공개 계정 개발 사용자가 PHP 코드 분석을 따랐는지 확인하기 위한 WeChat 공개 계정

문자 유형을 결정하기 위한 PHP 사용자가 WeChat 공개 계정을 팔로우하고 있는지 확인하기 위한 php

영상: 공개계정 주의 및 취소작업 -0 기본 위챗 개발 소개

위 내용은 코드는 여전히 사용하기 쉽고 몇 단계만 거치면 사용자가 공식 계정을 팔로우했는지 확인할 수 있습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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