1,准备好appid,appsecret,把自己服务器的ip加入ip白名单。
2,在开发者工具里面找到调试工具,打开调试工具,输入自己的appid和appsecret进行检测。出现如下页面表示正常,可以获取到access_token了。如果有报错,并提示一个未知ip,则把这个ip也添加到白名单,再来测试,一般就都可以获取到access_token了。
3,代码,一定要注意回调地址,这里的回调地址指向的就是该文件下的getUserOpenId()方法
// 用户请求这个方法的时候,发送请求到微信服务器,携带appid和appsecret,他会返回一个code到我的回调地址里面
public function getBaseInfo(){
$appId = 'wx4b4812b31dsde4cd';
$redirect_uri="http://xxxxxxx/aaa/bbb/getUserOpenId/";
//这里的回调地址需要http://,这个地址指向下一个方法 getUserOpenId(),也就是微信返回给我的消息我要他返回到这个方法里面
$url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appId."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect";
// 注意这里必须有 exit;否则不能发起请求的
header('location:'.$url);exit;
}
public function getUserOpenId(){
$appId = 'wx4b4812b31dsde4cd';
$appSecret= '94d167851dsde4cdd4f6991b9s2852b3';
//2.获取到网页授权的access_token
$code = $_GET['code'];
$url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appId."&secret=".$appSecret."&code=".$code."&grant_type=authorization_code ";
//3.拉取用户的openid
$res = $this->http_curl($url);
// echo $res;//打印即可看到用户的openid
$data = json_decode($res,true);
if(!empty($data['access_token']) && !empty($data['openid'])){
$url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$data['access_token']."&openid=".$data['openid']."&lang=zh_CN";
$userInfo = $this->http_curl($url);
MemberModel::useradd($userInfo);
}
}
public function valid(){
$echoStr = $_GET["echostr"];
//valid signature , option
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
private function checkSignature(){
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
public function http_curl($url){
$curl = curl_init();
//设置抓取的url
curl_setopt($curl, CURLOPT_URL, $url);
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, 0);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//执行命令
$data = curl_exec($curl);
//关闭URL请求
curl_close($curl);
//显示获得的数据
return $data;
}
4,当用户请求到getBaseInfo()方法时,就会提示用户是否授权让该公众号得到自己的微信信息。当用户点击同意后,我们的回调地址里就可以接收到微信返回的code,我们获取这个code后,再用这个code和appid,appsecret一起向微信服务器发起请求获取用户信息。当用户拒绝的话,我们就拿不到code,也就不能获取用户信息了。有了这三个数据,微信服务器就会返回我们关于用户的json格式的数据信息。就在回调地址的$res =
t
h
i
s
−
>
h
t
t
p
c
u
r
l
(
this->http_curl(
t h i s − > h t t p c u r l ( url);打印$res就可以看到用户信息。