Maison  >  Article  >  développement back-end  >  Implémentation du code de la connexion autorisée WeChat sous le cadre TP5

Implémentation du code de la connexion autorisée WeChat sous le cadre TP5

不言
不言original
2018-08-20 17:37:419280parcourir

Le contenu de cet article concerne l'implémentation du code de connexion autorisée par WeChat dans le cadre TP5. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Nouveau fichier de configuration wechat.php

<?php
return [
	&#39;oauth&#39; => [
		&#39;appid&#39;     => &#39;***&#39;,
        &#39;appsecret&#39;     => &#39;***&#39;,
	],
];

Nouveau extendwechatWechatOauth.php

<?php
namespace wechat;

/**
 * @package 微信授权控制器
 */
class WechatOauth{
    //微信授权配置信息
    private $wechat_config = [
        &#39;appid&#39;     => &#39;&#39;,
        &#39;appsecret&#39;     => &#39;&#39;,
    ];

    public function __construct() {
        $this->wechat_config = $this->wechatConfig();
    }
    /**
     * 获取秘钥配置
     * @return [type] 数组
     */
    public function wechatConfig() {
        $wechat_config = array_merge($this->wechat_config,config(&#39;wechat.oauth&#39;));
        return $wechat_config;
    }
     /**
     * 获取openid
     * @return string|mixed
     */
    public function getUserAccessUserInfo($code = "")
    {
        
        if(empty($code)){
            $baseUrl = request()->url(true);
            $url = $this->getSingleAuthorizeUrl($baseUrl, "123");                
            Header("Location: $url");
            exit();
        }else{
            $access_token = $this->getSingleAccessToken($code);
            return $this->getUserInfo($access_token);
        }
    }
    /**
     * 微信授权链接
     * @param  string $redirect_uri 要跳转的地址
     * @return [type]               授权链接
     */
    public function getSingleAuthorizeUrl($redirect_url = "",$state = &#39;1&#39;) {
        $redirect_url = urlencode($redirect_url);
        return "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $this->wechat_config[&#39;appid&#39;] . "&redirect_uri=".$redirect_url."&response_type=code&scope=snsapi_userinfo&state={$state}#wechat_redirect"; 
    }
    /**
     * 获取token
     * @return [type] 返回token 
     */
    public function getSingleAccessToken($code) {
        $url = &#39;https://api.weixin.qq.com/sns/oauth2/access_token?appid=&#39;.$this->wechat_config[&#39;appid&#39;].&#39;&secret=&#39;.$this->wechat_config[&#39;appsecret&#39;].&#39;&code=&#39;.$code.&#39;&grant_type=authorization_code&#39;;    

        $access_token = $this->https_request($url);
        return $access_token;     
    }
   
    /**
     * 发送curl请求
     * @param $url string
     * @param return array|mixed
     */
    public function https_request($url)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $AjaxReturn = curl_exec($curl);
        //获取access_token和openid,转换为数组
        $data = json_decode($AjaxReturn,true);
        curl_close($curl);
        return $data;
    }
     /**
     * @explain
     * 通过code获取用户openid以及用户的微信号信息
     * @return array|mixed
     * @remark
     * 获取到用户的openid之后可以判断用户是否有数据,可以直接跳过获取access_token,也可以继续获取access_token
     * access_token每日获取次数是有限制的,access_token有时间限制,可以存储到数据库7200s. 7200s后access_token失效
     **/
    public function getUserInfo($access_token = [])
    {
        if(!$access_token){
            return [
                &#39;code&#39; => 0,
                &#39;msg&#39; => &#39;微信授权失败&#39;, 
            ];
        }
        $userinfo_url = &#39;https://api.weixin.qq.com/sns/userinfo?access_token=&#39;.$access_token[&#39;access_token&#39;].&#39;&openid=&#39;.$access_token[&#39;openid&#39;].&#39;&lang=zh_CN&#39;;
        $userinfo_json = $this->https_request($userinfo_url);
    
        //获取用户的基本信息,并将用户的唯一标识保存在session中
        if(!$userinfo_json){
            return [
                &#39;code&#39; => 0,
                &#39;msg&#39; => &#39;获取用户信息失败!&#39;, 
            ];
        }
        return $userinfo_json;
    }
}

Appel du contrôleur

public function index()
    {
       $wchat = new \wechat\WechatOauth();
    
       $code = request()->param(&#39;code&#39;,"");
       $user = $wchat->getUserAccessUserInfo($code);
    }

Recommandations associées :

Le code pour ajouter, supprimer, modifier et vérifier les opérations dans la couche de données TP

La méthode (code) d'utilisation des instructions MySQL natives dans TP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn