美文网首页
PHP实现微信扫码登陆(三)--微信公众平台配置

PHP实现微信扫码登陆(三)--微信公众平台配置

作者: 其实我很dou | 来源:发表于2018-12-02 21:38 被阅读0次

    https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319
    https://ninghao.net/blog/1441

    1. 公众平台配置

    • 登录微信公众平台

    • 开发--> 基本配置, 将服务器ip12.23.34.45加入到ip白名单中


      image.png
    • 验证token


      image.png
    • 此时点击提交, 肯定会失败, 因为微信服务器请求PHP服务器, 转发到/accept下, 还没有php路由去处理该请求, 使用laravel编写处理方法, 验证消息的确来自微信服务器

    2. 编写验证token逻辑

    • 路由文件web.php
    Route::middleware(['weixin.verify'])->group(function (){
        // 处理get请求, 验证token, 使用authToken处理
        Route::get('accept', 'Auth\WeixinController@authToken');
         // 微信服务器发来的post消息, 使用acceptMessage方法处理
        Route::post('accept', 'Auth\WeixinController@acceptMessage');
    });
    
    • 中间件weixin.verify, 用于验证消息的确来自微信服务器
      app/Http/Middleware/VerifyWeixin.php
    <?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    use Log;
    
    class VerifyWeixin
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
            // 获取到微信请求里包含的几项内容
            Log::alert($request->all());
            $signature = $request->input('signature');
            $timestamp = $request->input('timestamp');
            $nonce     = $request->input('nonce');
    
            // 微信服务器配置中填写的token, 此处应该加入到配置文件中
            $token = 'wodetoken';
    
            // 加工出自己的 signature
            $our_signature = array($token, $timestamp, $nonce);
            sort($our_signature, SORT_STRING);
            $our_signature = implode($our_signature);
            $our_signature = sha1($our_signature);
            Log::alert($our_signature);
    
            // 用自己的 signature 去跟请求里的 signature 对比
            if ($our_signature != $signature) {
                return fasle;
            }
    
            return $next($request);
        }
    }
    
    
    • 注册中间件
      app/Http/Kernel.php
    protected $routeMiddleware = [
            'weixin.verify' => \App\Http\Middleware\VerifyWeixin::class,
        ];
    
    • 控制器逻辑
      app/Http/Controllers/Auth/WeixinController.php
    <?php
    /**
     * 认真编码 快乐生活
     * User: helloJiu
     * Date: 2018/11/27
     * Time: 13:16
     */
    
    namespace App\Http\Controllers\Auth;
    
    use App\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    
    
    class WeixinController extends Controller
    {
         // 通过中间件后, 直接将echostr返回, token验证通过
        public function authToken(Request $request)
        {
            return $request->input('echostr');
        }
    }
    

    重新提交, token完成验证

    验证完全可以在public目录下创建一个php文件去实现该功能, 但是后续的接受微信消息, 如订阅, 扫描, 输入事件等, 也需要使用中间件验证是否是微信服务器发来的请求

    3. 启用服务器配置

    image.png

    这样公众号收到消息后, 微信服务器就会通过post的方式推送到我们自己服务器的accept路由下, 使用Auth\WeixinController@acceptMessage去处理

    acceptMessage方法后续编写

    相关文章

      网友评论

          本文标题:PHP实现微信扫码登陆(三)--微信公众平台配置

          本文链接:https://www.haomeiwen.com/subject/rzojcqtx.html