最近发表的话题
最近发表的评论
  • 浅析乐观锁与悲观锁 at 10个月前

    @linxb 不行的,高并发时,会不断的卡断后续用户的访问,我自己实现用版本控制,哪个更新快就成功,后更新者就失败。这样用户不会有等待感。

  • 浅析乐观锁与悲观锁 at 11个月前

    @icecho 官方文档只是悲观锁,这种场景对于稍微有并发的场景,就卡爆了。乐观锁才符合,但laravel怎么实现妥当

  • 浅析乐观锁与悲观锁 at 11个月前

    up主,这些理论百度一大堆啊,能不能讲下laravel上怎么实现好过,我要吃粟子

  • docker 从入门到自动化构建 PHP 环境 at 1年前

    docker-compose up -d在一个目录后,然后换个目录执行,会停止响应很久,才重新编译。win10上用太闹心

  • Laravel 5 中使用 Log::useFiles 指定日志文件后,会输出两份日志 at 1年前
    我直接new Logger來用
                $log = new Logger('AIG');
                $handle = new StreamHandler(storage_path('logs/aig-renewal-'.date('Y-m-d').'.log'), Logger::DEBUG);
                $handle->setFormatter(new LineFormatter(null, null, true, true));
                $log->pushHandler($handle);
                $log->info('renewal tran id: ' . $tranId);
  • Laravel EasyWechat 全网发布 at 2年前

    我觉得写复杂了
    处理公众号事件的URL的action:

    /**
         * 处理公众号相关事件
         * @param $appid
         * @return \Symfony\Component\HttpFoundation\Response
         */
        public function appid($appid)
        {
            $officialAccount = $this->openPlatform->officialAccount($appid);
            $server = $officialAccount->server;
    
            if($appid == self::FULL_PUBLIC_APPID) { //你的第三方appid
                $server->push(FullPublicMessageHandler::class);
            } else {
                /**
                 * 传实例主要用于构造时传参,传类名就单纯对message的内容处理
                 * 由于第三方平台是要传进appid来处理相关消息,所以传实例
                 */
                //$server->push(LogMessageHandler::class);
                $server->push(TextMessageHandler::class, Message::TEXT); //接入智能闲聊
                $server->push(new ImageMessageHandler($appid, true), Message::IMAGE); //接入人脸融合
                $server->push(new VoiceMessageHandler($appid, true), Message::VOICE); //接入语音翻译
            }
    
            return $server->serve();
        }

    FullPublicMessageHandler的代码,即全网发布逻辑代码:

    <?php
    namespace App\Handler\Platform;
    
    use EasyWeChat\Kernel\Contracts\EventHandlerInterface;
    use EasyWeChat\Kernel\Messages\Text;
    use EasyWeChat\Factory;
    
    class FullPublicMessageHandler implements  EventHandlerInterface
    {
        const
            FULL_PUBLIC_APPID = 'wx570bc396asfsfsdfdf'; //填上你的第三方appid
    
        protected
            $openPlatform;
    
        public function __construct()
        {
            $config = config('wechat.open_platform');
            $this->openPlatform = Factory::openPlatform($config);
        }
    
        public function handle(array $message = [])
        {
            switch($message['MsgType']) {
                case 'event': //1. 事件
                    return new Text($message['Event'].'from_callback');
                    break;
                case 'text': // 2. 文本
                    if($message['Content'] == 'TESTCOMPONENT_MSG_TYPE_TEXT') {
                        return new Text('TESTCOMPONENT_MSG_TYPE_TEXT_callback');
                    } else { //3. 授权发送客服消息
                        $query_auth_code = str_replace('QUERY_AUTH_CODE:', '',$message['Content']);
                        //取授权公众号信息拿refresh_access_token
                        $authInfo = $this->openPlatform->handleAuthorize($query_auth_code);
    
                        $auth_refresh_access_token = $authInfo['authorization_info']['authorizer_refresh_token'] ?? '';
                        //初始化公众号app
                        $app = $this->openPlatform->officialAccount(self::FULL_PUBLIC_APPID, $auth_refresh_access_token);
                        // 发送客服消息
                        $app->customer_service->message(new Text("{$query_auth_code}_from_api"))->to($message['FromUserName'])->send();
                    }
                    break;
    
            }
        }
    }