微信公众号登录
code获取方法https://www.hushlll.top/?p=20
public function officalLogin($appid,$appsecret,$code) { $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=".$code."&grant_type=authorization_code"; $result = $this->curlGet($url); $json = json_decode($result, true); if (!$json){ return false; } $access_token = $json['access_token']; $openid = $json['openid']; //通过access_token换取用户信息 $data = $this->getUserInfo($access_token,$openid); $data['openid'] = $openid; return $data; }
微信公众号获取用户信息
public function getUserInfo($access_token,$openid) { $url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN"; $result = $this->curlGet($url); $json = json_decode($result, true); if (!$json){ return false; } $nickname = $json['nickname']; $avatar = $json['headimgurl']; return [ 'nickname' => $nickname, 'avatar' => $avatar ]; }
APP登录获取用户信息
public static function appLogin($code,$appid,$appsecret) { $accessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=$code&grant_type=authorization_code"; $accessTokenJson = file_get_contents($accessTokenUrl); $accessTokenData = json_decode($accessTokenJson, true); $accessToken = $accessTokenData['access_token']; $openId = $accessTokenData['openid']; $userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=$accessToken&openid=$openId"; $userInfoJson = file_get_contents($userInfoUrl); $userInfoData = json_decode($userInfoJson, true); $data = []; $data['nickname'] = $userInfoData['nickname']; $data['avatar'] = $userInfoData['headimgurl']; $data['openid'] = $userInfoData['openid']; return $data; }
小程序登录
code获取方法https://www.hushlll.top/?p=27
public function miniLogin($code,$appid,$appsecret) { //小程序已经拿不到用户的昵称头像信息,只能拿到openid $response = $this->curlGet("https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$appsecret&js_code=$code&grant_type=authorization_code"); $response = json_decode($response, true); if (!empty($response['errcode'])) { return false ; } return $response['openid']; }
获取小程序手机号
public function getWxPhone($code,$appid,$appsecret) { //获取手机号的code不是登录的code 务必记住 post请求 $access_token=$this->getAccessToken($appid,$appsecret); $api="https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=$access_token"; $data=[ 'code'=>$code ]; $result = $this->curlPost($api,json_encode($data)); if(!$result['ret']) return $result['info']; $response=json_decode($result['msg'],true); if($response['errcode']!=0) return $response['errmsg']; if(!$response['phone_info']['purePhoneNumber']) return '获取手机号码为空'; return $response['phone_info']['purePhoneNumber']; } public function getAccessToken($appid,$appsecret){ $api="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret"; $result=json_decode(file_get_contents($api),true); if(!isset($result['access_token'])||!$result['access_token']) { return '获取AccessToken出错'; } return $result['access_token']; }
请求方法
function curlGet($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_FAILONERROR, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_AUTOREFERER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 5); $SSL = substr($url, 0, 8) == "https://" ? true : false; if ($SSL) { curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何证书 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 检查证书中是否设置域名 } $content = curl_exec($ch); curl_close($ch); return $content; } public function curlPost($url,$data = null,$header = null){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); if(!empty($header)){ curl_setopt($curl, CURLOPT_HEADER, FALSE); curl_setopt($curl, CURLOPT_HTTPHEADER,$header); } curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查 // curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在 // curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转 // curl_setopt($curl,CURLOPT_CAINFO,CONF_PATH.'/cacert.pem'); if (!empty($data)){ curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $output = curl_exec($curl); curl_close($curl); return $output; }
获取access_token
public function getAccessToken($appid,$appsecret){ $api="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret"; $result=json_decode(file_get_contents($api),true); if(!isset($result['access_token'])||!$result['access_token']) { return '获取AccessToken出错'; } return $result['access_token']; }
小程序模板消息
$toUser = $array['openid'];//用户openid $templateId = $array['template_id'];//所需下发的订阅模板id $page = '/pages/index/index';//跳转页面不填则模板无跳转。 $accessToken = $this->getAccessToken($array['appid'],$array['appsecret']); //请求url $url = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=' . $accessToken; //发送内容 $data = []; //接收者(用户)的 openid $data['touser'] = $toUser; //所需下发的订阅模板id $data['template_id'] = $templateId; //点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。 $data['page'] = $page; //模板内容 $data['data'] = [ "thing1" => [ 'value' => '测试' ], "phrase3" => [ 'value' =>'123' ], ]; $data['miniprogram_state'] = $array['miniprogram_state'] ; return self::curlPost($url,json_encode($data)) ;