一、微信公众平台配置1、获取appid、appsecret,添加白名单登录微信公众平台,进入基础配置。开发中需要两个参数,appId和appSecret(appSecret只显示一次,需要保存,否则需要重新设置获取)。获取access_token时需要添加IP白名单。点击查看点击修改2、添加网页授权进入公众号设置=》功能设置=》网页授权域名点击设置,在输入框中输入授权回调页面的域名,参考点1(只能填写一个),下载点3文件中的txt文件上传到服务器根目录。2、PHP后台实现微信开放接口全局返回码,供参考:https://mp.weixin.qq.com/wiki...1、获取全局token。此令牌有效期为2小时,可以暂存。到期后需要重新获取。PS:项目中必须使用同一个接口,否则容易互相刷屏导致过期。publicstaticfunctiongetToken($appid,$appsecret){$url='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret;returnCurl::callWebServer($url);}正确返回结果:{"access_token":"ACCESS_TOKEN","expires_in":7200}返回结果参数说明:参数说明access_token获取的全局tokenexpires_in凭证有效时间,单位:秒错误返回结果:{"errcode":40013,"errmsg":"invalidappid"}返回结果参数说明:返回码说明-1系统繁忙,请稍后重试0请求成功40001AppSecreterror或者AppSecret没有属于这个公众号,请确认AppSecret的正确性。40002请确保grant_type字段值为client_credential40164调用接口的IP地址不在白名单中,请在接口IP白名单中设置。(小程序和小游戏不需要IP地址在白名单中。)2.获取用户的openid有两个步骤公众号。首先获取用户对公众号的授权码,然后使用这个授权码获取临时的access_token和openid。获取用户授权码publicstaticfunctiongetCode($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_uridomainname与后台配置不一致”}返回结果参数说明:返回码说明10003redirect_uri域名与后台配置不一致10004这个公众号被禁止访问10005这个公众号没有这些作用域的权限10006你必须付费注意这个测试号10009操作太频繁,请稍后再试10010scope不能为空10011redirect_uri不能为空10012appid不能为空10013state不能为空10015公众号未授权的第三方平台,请检查授权状态10016不支持微信开放平台Appid,请使用公众号Appid通过getCode获取的code换取access_token和openidpublicstaticfunctiongetAccessToken($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.'';returnCurl::callWebServer($url);}返回正确结果:{"access_token":"ACCESS_TOKEN","expires_in":7200,"refresh_token":"REFRESH_TOKEN","openid":"OPENID","scope":"SCOPE"}返回参数说明参数说明access_token网页授权接口调用凭证,注意:此access_token不同于基本支持的access_tokenexpires_inaccess_token接口调用凭证超时时间,单位(秒)refresh_token用户刷新access_tokenopenid唯一用户的标识符。请注意,当用户没有关注公众号时,用户访问公众号的网页,也会生成一个用户和公众号UniqueOpenIDscope用户授权的范围,使用逗号(,)分隔错误返回结果:{"errcode":40029,"errmsg":"invalidcode"}3.使用openId获取用户信息,步骤中获取的token1用于获取用户信息publicstaticfunctiongetUserInfo($openId,$token){$url='https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$token.'&openid='.$openId.'&lang=zh_CN';returnCurl::callWebServer($queryUrl,'','GET');}返回正确结果:{"subscribe":1,"openid":"o6_bmjrPTlm6_2sgVt7hMZOPfL2M","nickname":"Band","sex":1、“语言”:“zh_CN”,“城市”:“广州”,“省”:“广东”,“国家”:“中国”,“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用户ID,为当前公众号唯一昵称用户昵称sex用户性别,值为1时为男,为2时为女,为0时未知city用户所在城市country用户所在省份用户所在省份语言用户语言,简体中文为zh_CNheadimgurl用户头像,最后一个值代表方形头像的大小(有0、46、64、96,132个值可供选择,0表示640*640方形头像),用户没有头像如果用户更换了头像,原头像URL将失效subscribe_time用户的关注时间,是一个时间戳.如果用户已关注多次,最后一次取unionid。O只有当用户绑定公众号到微信开通平台账号后才会出现该字段。remark公众号运营商对粉丝的评论,公众号运营商可以在微信公众平台用户管理界面给粉丝添加评论groupid用户的群组ID(兼容老用户分组接口)tagid_list被标签用户的ID列表subscribe_scene返回用户关注的频道来源,ADD_SCENE_SEARCH公众号搜索,ADD_SCENE_ACCOUNT_MIGRATION公众号迁移、ADD_SCENE_PROFILE_CARD名片分享、ADD_SCENE_QR_CODE扫描二维码、ADD_SCENEPROFILELINK图文页面名称点击、ADD_SCENE_PROFILE_ITEM图文页面右上角菜单、ADD_SCENE_PAID支付后跟随、ADD_SCENE_OTHERS其他qr_scene二维码扫描场景(开发者自定义)scene_qr_s二维码扫描场景description(开发者自定义)errorresult:{"errcode":40013,"errmsg":"invalidappid"}3.用来判断是否关注,这里是入口:publicfunctionisConcern($appId,$appSecret){$param='';//如果有参数$this->getCode($appId,U('callback','param='.$param),1,'snsapi_base');}授权后回调publicfunctioncallback(){$isconcern=0;$code=$this->_get('code');$param=$this->_get('param');$appId=C('appId');//在config=C('appSecret')中配置$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']);如果($用户信息['订阅']==1){$this->assign('userInfo',$userInfo);$关注=1;//已经关注}else{$isconcern=0;//不关心}$this->assign('openid',$openId);$this->display('page');}这时候可以在页面获取到userInfo和isconcern。当isconcern为1时,表示关注过,否则没有关注过。
