微信公众号登录
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)) ;
