PHP程序员小白到大牛集训(12期免息)
博主信息
毅铭
博文
4
粉丝
0
评论
0
访问量
1719
积分:0
P豆:8

微信公众号网页登录

2022年04月27日 12:10:27阅读数:227博客 / 毅铭/ TP框架
<?php
 
namespace app\wechat\controller;
 
use think\Controller;
use think\Request;
 
/**
 * 微信授权登录类
 */
class WeChat extends Controller
{
 
 
    private $appid = '*********';                 //微信公众号APPID
    private $appsecret = '***************';             //密匙
    private $url = '********************';       //微信回调地址
 
 
    public function start()
    {
 
        $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $this->appid . '&redirect_uri=' . urlencode($this->url) . '&response_type=code&scope=snsapi_userinfo&state=state#wechat_redirect';
 
        header('location:' . $url);
    }
 
    /**
     * 登录
     */
    public function login()
    {
        $code = $_GET['code'];
 
        $access_token = $this->getUserAccessToken($code);
        $UserInfo = $this->getUserInfo($access_token);
        var_dump($UserInfo);
    }
 
    /**
     * 获取授权token
     * @param $code
     * @return bool|string
     */
    private function getUserAccessToken($code)
    {
        $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$this->appid&secret=$this->appsecret&code=$code&grant_type=authorization_code";
 
        $res = file_get_contents($url);
        return json_decode($res);
    }
 
    /**
     * 获取用户信息
     * @param $accessToken
     * @return mixed
     */
    private function getUserInfo($accessToken)
    {
        $url = "https://api.weixin.qq.com/sns/userinfo?access_token=$accessToken->access_token&openid=$accessToken->openid&lang=zh_CN";
        $UserInfo = file_get_contents($url);
        return json_decode($UserInfo, true);
    }
 
    /**
     * 此AccessToken   与 getUserAccessToken不一样
     * 获得AccessToken
     * @return mixed
     */
    private function getAccessToken()
    {
        // 获取缓存
        $access = cache('access_token');
        // 缓存不存在-重新创建
        if (empty($access)) {
            // 获取 access token
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this -> appid}&secret={$this->appsecret}";
            $accessToken = file_get_contents($url);
 
            $accessToken = json_decode($accessToken);
            // 保存至缓存
            $access = $accessToken->access_token;
            cache('access_token', $access, 7000);
        }
        return $access;
    }
 
 
    /**
     * 获取JS证明
     * @param $accessToken
     * @return mixed
     */
    private function _getJsapiTicket($accessToken)
    {
 
        // 获取缓存
        $ticket = cache('jsapi_ticket');
        // 缓存不存在-重新创建
        if (empty($ticket)) {
            // 获取js_ticket
            $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" . $accessToken . "&type=jsapi";
            $jsTicket = file_get_contents($url);
            $jsTicket = json_decode($jsTicket);
            // 保存至缓存
            $ticket = $jsTicket->ticket;
            cache('jsapi_ticket', $ticket, 7000);
        }
        return $ticket;
    }
 
    /**
     * 获取JS-SDK调用权限
     */
    public function shareAPi(Request $request)
    {
        header("Access-Control-Allow-Origin:*");
        // 获取accesstoken
        $accessToken = $this->getAccessToken();
        // 获取jsapi_ticket
        $jsapiTicket = $this->_getJsapiTicket($accessToken);
 
        // -------- 生成签名 --------
        $wxConf = [
            'jsapi_ticket' => $jsapiTicket,
            'noncestr' => md5(time() . '!@#$%^&*()_+'),
            'timestamp' => time(),
            'url' => $request->post('url'),  //这个就是你要自定义分享页面的Url啦
        ];
        $string1 = sprintf('jsapi_ticket=%s&noncestr=%s×tamp=%s&url=%s', $wxConf['jsapi_ticket'], $wxConf['noncestr'], $wxConf['timestamp'], $wxConf['url']);
        // 计算签名
        $wxConf['signature'] = sha1($string1);
        $wxConf['appid'] = $this->appid;
        return json($wxConf);
    }
}


版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • 在这个移动端的时代,也逐渐成为人们获取息的一种渠道,也是商家发展潜在客户的一种手段,因此,许多程序员转战开发,那么今天,我们就来为大家介绍一下开发中的授权到底要怎样才能实现