每天学习一点点,成功增加一大步

微信公众号开发(授权登录部分)

PHP zhanghui 421℃

这段时间一直在忙着做公司的一个比较麻烦的客户的项目,这不就遇到了要对接微信公众号的登录和支付功能,之前也做过的,但由于时间较长很多老东西都找不到了,而且之前做的印象最深的是官方的DEMO体积大不说而且带有BUG存在,测试运行官方DEMO都不正常。所以这次呢,我就用了民间的方法,简单又不臃肿。

现在记录下成功实现的代码过程,要实现微信支付就要先实现授权登录。

要实现登录,就要通过以下代码先获取官方的 CODE

$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $appid
    . '&redirect_uri=' . urlencode($redirect_uri)
    . '&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';
header('location:' . $url);

在获取 CODE 后,通过 CODE 获取到微信登录者的信息

class wechat
{
    private $appid = '';
    private $appsecret = '';
    private $sns_url = 'https://api.weixin.qq.com/sns/';
    private $oauth2_url = 'oauth2/';

    function __construct()
    {
        $this->oauth2_url = $this->sns_url . $this->oauth2_url;
    }

    /**
     * 微信获取用户信息
     */
    public function userInfo()
    {
        //换成自己的接口信息
        $code = $_GET['code'];
        $state = $_GET['state'];
        if (empty($code)) die('授权失败');
        $token_url = $this->oauth2_url . 'access_token?appid=' . $this->appid . '&secret=' . $this->appsecret . '&code=' . $code . '&grant_type=authorization_code';
        $token = json_decode(file_get_contents($token_url));
        if (isset($token->errcode)) {
            showmessage(L('<br/><h2>错误信息:</h2>' . $token->errmsg), HTTP_REFERER);
            exit;
        }

        $access_token_url = $this->oauth2_url . 'refresh_token?appid=' . $this->appid . '&grant_type=refresh_token&refresh_token=' . $token->refresh_token;
        //转成对象
        $access_token = json_decode(file_get_contents($access_token_url));
        if (isset($access_token->errcode)) {
            showmessage(L('<br/><h2>错误信息:</h2>' . $access_token->errmsg), HTTP_REFERER);
            exit;
        }
        $user_info_url = $this->sns_url . 'userinfo?access_token=' . $access_token->access_token . '&openid=' . $access_token->openid . '&lang=zh_CN';
        //转成对象
        $user_info = json_decode(file_get_contents($user_info_url));
        if (isset($user_info->errcode)) {
            showmessage(L('<br/><h2>错误信息:</h2>' . $user_info->errmsg), HTTP_REFERER);
            exit;
        }
        $rs = json_decode(json_encode($user_info), true);//转换成数组
        $wechat_key = time();
        setcache($wechat_key, $rs, 'wechat');
        $url = "index.php?m=member&c=index&a=wechat&wechat_key=$wechat_key";
        header('location:' . $url);
    }
    
}

简单吧,接下来就要解决微信支付的问题了。

转载请注明:隨習筆記 » 微信公众号开发(授权登录部分)