微信公众号登录

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)) ;