WechatController.php 6.4 KB
<?php
/**
+-----------------------------------------------------------------------------------------------------------------------
 * 微信相关控制层类:公众号授权、小程序授权、微信支付等功能
+-----------------------------------------------------------------------------------------------------------------------
 *
 * PHP version 7
 *
 * @category  App\Http\Api\V1\Controllers
 * @package   App\Http\Api\V1\Controllers
 * @author    Richer <yangzi1028@163.com>
 * @date      2021年5月6日10:49:35
 * @copyright 2020-2022 Richer (http://www.xxxxxx.com)
 * @license   http://www.xxxxxx.com License
 * @link      http://www.xxxxxx.com
 */
namespace App\Http\Api\V1\Controllers;

use App\Factories\WechatFactory;
use App\Services\WechatService;
use Illuminate\Http\Response;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;

/**
 * Class WechatController
 *
 * @category  App\Http\Api\V1\Controllers
 * @package   App\Http\Api\V1\Controllers
 * @author    Richer <yangzi1028@163.com>
 * @date      2021年5月6日10:49:35
 * @copyright 2020-2022 Richer (http://www.xxxxxx.com)
 * @license   http://www.xxxxxx.com License
 * @link      http://www.xxxxxx.com
 */
class WechatController extends BaseController
{
    /**
     * ArticlesController constructor.
     *
     * @param WechatService $service 注入service逻辑层
     */
    public function __construct(WechatService $service)
    {
        // 执行父类构造方法
        parent::__construct($service);
    }

    /**
     * 用户登录
     *
     * 1、小程序授权
     * 2、先判断是否已经登录了,如果已经登录过了则更新登录信息
     *
     * @param Request $request
     * @return Response
     */
    public function authLogin(Request $request)
    {
        // 进行快捷登录
        $result = $this->service->authLogin($request);
        // 登录成功后,设置用户微信信息
        if ($result) {
            return $this->success($result, __('authorized_login_succeeded'), 0, $result->token);
        } else {
            return $this->error($this->service->getMessage(), 2006);
        }
    }

    /**
     * 用户授权登录
     * 1、小程序授权
     * 2、先判断是否已经登录了,如果已经登录过了则更新登录信息
     *
     * @param Request $request
     * @return Response
     */
    public function authLoginByNickname(Request $request)
    {
        // 进行快捷登录
        $result = $this->service->authLoginByNickname($request);
        // 登录成功后,设置用户微信信息
        if ($result) {
            return $this->success($result, __('authorized_login_succeeded'), 0, $result->token);
        } else {
            return $this->error($this->service->getMessage(), 2006);
        }
    }

    /**
     * 小程序登录获取用户手机号码
     *
     * @param Request $request
     *
     * @return mixed
     */
    public function authLoginByMobile(Request $request)
    {
        $user = $this->service->authLoginByMobile($request);
        if ($user) {
            return $this->success($user, __('authorized_login_succeeded'), 0, $user->token);
        } else {
            return $this->error($this->service->getMessage(), 2006);
        }
    }

    /**
     * 验证token
     * 微信开发者验证
     *
     */
    //https://www.yishanseo.com/api/h5/weixin/server?echostr=1410480958785089387&nonce=134704537&signature=7e6f50565319edc86585d06df0fb8539df46f305&timestamp=1557556841
    public function token()
    {
        Log::info('验证服务器token.');
        $signature  = request('signature');
        $timestamp  = request('timestamp');
        $nonce      = request('nonce');
        $echostr    = request('echostr');
        // 根据字典序排序
        $arrayName  = array($timestamp,$nonce,'umu888');
        // 转化为字符串
        $temp       = implode($arrayName);
        // 对字符串进行加密
        $temp       = sha1($temp);

        if ($temp == $signature) {
            echo $echostr;
        }
    }

    /**
     * 微信消息接入
     *
     * 根据消息类型分别处理
     *
     * @return \Symfony\Component\HttpFoundation\Response
     */
    public function server()
    {
        //Log::info('request arrived.'); # 注意:Log 为 Laravel 组件,所以它记的日志去 Laravel 日志看,而不是 EasyWeChat 日志
        return app(WechatFactory::class)->push();
    }

    /**
     * 获取菜单
     * @return void
     */
    public function menu()
    {
        $list = app(WechatFactory::class)->menu();
        dump($list);
    }

    /**
     * 小程序登录获取用户 openid
     *
     * @param Request $request
     * @return mixed
     */
    public function getMiniOpenid(Request $request)
    {
        $result = $this->service->getMiniOpenid($request);
        // 登录成功后,设置用户微信信息
        if ($result) {
            return $result;
        } else {
            return $this->error($this->service->getMessage(), 2006);
//            return $this->error(__('get_openid_failed'), 2006);
        }
    }

    /**
     * 小程序登录获取用户信息
     *
     * @param Request $request
     * @return mixed
     */
    public function initOpenid(Request $request)
    {
        $result = $this->getLoginInfo($request);
        if ($result) {
            return $this->success($result);
        } else {
            return $this->error($this->service->getMessage(), 2006);
//            return $this->error(__('get_openid_failed'), 1001);
        }
    }

    /**
     * 小程序登录获取用户信息
     *
     * @param Request $request
     * @return mixed
     */
    public function getLoginInfo(Request $request)
    {

        return $this->service->getLoginInfo($request);
    }

    /**
     * 小程序登录获取用户信息
     *
     * @param Request $request
     * @return mixed
     */
    public function getMiniUserInfo(Request $request)
    {
        return $user = $this->service->getMiniUserInfo($request);
    }

    /**
     * 小程序登录获取用户信息
     *
     * @param Request $request
     * @return mixed
     */
    public function getWeRunData(Request $request)
    {
        return $user = $this->service->getWeRunData($request);
    }

    /**
     * 小程序登录获取用户信息
     *
     * @param Request $request
     * @return mixed
     */
    public function decrypt(Request $request)
    {
        return $user = $this->service->decrypt($request);
    }
}