第三方登录扩展微信小程序模块

SMALL 5月前 724

第一步:执行安装第三方登录插件
第二步:执行sql 加入 wechatmini

ALTER TABLE `fa_third` MODIFY COLUMN `platform`  enum('wechatmini','qq','wechat','weibo') NOT NULL COMMENT '第三方应用'

第三步:找到目录addonsthird
修改config.php文件 加入下面配置信息

3 => 
  array (
    'name' => 'wechatmini',
    'title' => '微信小程序',
    'type' => 'array',
    'content' => 
    array (
      'app_id' => '',
      'app_secret' => '',
      'scope' => 'snsapi_userinfo',
    ),
    'value' => 
    array (
      'app_id' => '小程序appid',
      'secret' => '小程序secret',
      'scope' => 'get_user_info',
    ),
    'rule' => 'required',
    'msg' => '',
    'tip' => '',
    'ok' => '',
    'extend' => '',
  )

第四步:修改addonsthirdlibraryApplication.php 加入wechatmini

'qq'     => 'Qq',
        'weibo'  => 'Weibo',
        'wechat' => 'Wechat',
        'wechatmini' => 'Wechatmini',

第五步:添加addonsthirdlibraryWechatmini.php 文件

<?php

namespace addons\third\library;

use fast\Http;
use think\Config;
use think\Session;
use EasyWeChat\Foundation\Application;

/**
 * 微信
 */
class Wechatmini
{

    /**
     * 配置信息
     * @var array
     */
    private $config = [];

    public function __construct($options = [])
    {
        if ($config = Config::get('third.wechatmini'))
        {
            $this->config = array_merge($this->config, $config);
        }
        $this->config = array_merge($this->config, is_array($options) ? $options : []);
    }

    

    /**
     * 获取用户信息
     * @param array $params
     * @return array
     */
    public function getUserInfo($params = [])
    {
        $params = $params ? $params : $_GET;
        
        if (isset($params['code']))
        {
        
            
            if ($params['code'])
            {
                $config['mini_program'] = $this->config;
                $app = new Application($config);
                $miniProgram = $app->mini_program;
                
                $sns = $miniProgram->sns->getSessionKey($params['code']);
                if($sns['openid']){
                    $userinfo = $params['rawData'] ? json_decode($params['rawData'],true) : [];
                    $userinfo['avatar'] = isset($userinfo['avatarUrl']) ? $userinfo['avatarUrl'] : '';
                    $userinfo['nickname'] = isset($userinfo['nickName']) ? $userinfo['nickName'] : '';
                    $result = [
                        'access_token'  => '',
                        'refresh_token' => '',
                        'expires_in'    => 0,
                        'openid'        => $sns['openid'],
                        'unionid'       => '',
                        'userinfo'      => $userinfo
                    ];
                    
                    return $result;
                }                
                
            }
        }
        return [];
    }


}

第六步:修改 third() 传入rawData参数 比如apiuser
注:$rawData = $this->request->request('rawData'); 和 'rawData'=>$rawData 为添加内容

$url = url('user/index');
        $platform = $this->request->request("platform");
        $rawData = $this->request->request('rawData');
        $code = $this->request->request("code");
        $config = get_addon_config('third');
        if (!$config || !isset($config[$platform]))
        {
            $this->error(__('Invalid parameters'));
        }
        $app = new \addons\third\library\Application($config);
        //通过code换access_token和绑定会员
        $result = $app->{$platform}->getUserInfo(['code' => $code,'rawData'=>$rawData]);
        if ($result)
        {
            $loginret = \addons\third\library\Service::connect($platform, $result);
            if ($loginret)
            {
                $data = [
                    'userinfo'  => $this->auth->getUserinfo(),
                    'thirdinfo' => $result
                ];
                $this->success(__('Logged in successful'), $data);
            }
        }
        $this->error(__('Operation failed'), $url);

好了 这里就完成了小程序的基本接入,因为是小白,那么代码有不完善的地方,还请大牛指教

另外有个文件 也改动了一下addonsthirdlibraryService 42行

 $user = \app\common\model\User::get($third['user_id']);
最后于 5月前 被SMALL编辑 (添加修改内容)
最新回复 (7)
  • F4NNIU 打赏 5月前
    感谢TA
    0 引用 2

    非常感谢分享。

  • soofree 5月前
    感谢TA
    0 引用 3

    没弄成功~~

  • SMALL 楼主 5月前
    感谢TA
    0 引用 4
    soofree 没弄成功~~

    有什么报错吗?小程序方面需要提供三个参数

  • li6633429 2月前
    感谢TA
    0 引用 5

    这是小程序登录?

  • li6633429 2月前
    感谢TA
    0 引用 6

    三个参数除了 appid和secret 还有哪个?

  • SMALL 楼主 2月前
    感谢TA
    0 引用 7

    @li6633429 第三个参数默认就行了

  • 郑州-老黑 2月前
    感谢TA
    0 引用 8

    留存

  • 未登录
    9
返回