代码,非线性的世界中一抹深绿

    -----是为题前端

    MySQL 事务主要用于处理操做量大,复杂度高的数据。好比说,在人员管理系统中,你删除一我的员,你即须要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操做语句就构成一个事务!事务处理能够用来维护数据库的完整性,保证成批的 SQL 语句要么所有执行,要么所有不执行。数据库

    通常来讲,事务是必须知足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。api

 

    -----引子微信

    在代码的世界,非0即TRUE,不会存在第三种状况,这也正是“事物”这一操做产生的必要。古今多少事,都是了而了之,最后不了了之。行百里者半九十。不少故事有一个很是好的开头,最后都难免留下一个狗血的结尾,或者更多的是没有后来。session

 

    -----正文框架

    某一天,小白正在写代码,打开公司项目的摇一摇,发现出现一个异常。正常的是直接进到加载展现摇一摇页面,可是如今显示的是Https证书失效。前几天有顾客反映部分安卓用户摇一摇显示空白页,没法进入摇一摇页面。可是过一会摇一摇又正常能够进去,因而小白陷入迷惑中不自知。测试

    次日,又有顾客反映仍是没法进入摇一摇页面,小白感受到事情可能有点严重。为何以前摇一摇没有问题,忽然就出现证书失效和部分安卓用户没法进入摇一摇页面。这一段时间没有进行任何业务功能的更改和代码的修改。那就应该是这个Https证书失效的问题,因而小白反馈到了上级,查看,果真是证书已到期。this

    https证书到期的提示,才发现安卓手机和iOS手机提示是不同的,iOS手机是能够直接提示出来,而且还有是否信任该连接,能够点击跳转的;可是安卓是直接不显示的,因此这就和最近顾客反映的部分安卓手机摇一摇页面空白对应起来了。“部分安卓手机”,小白本身iOS手机也是有时候提示证书到期,有时候正常。小白查询公司公众号后台,发现生成的摇一摇连接有些是带S的有些是不带S的,因此这也就和部分安卓用户,和有时候小白本身能够摇出来页面,有时候提示证书到期,原来是不一样的设备和页面致使的。url

    问题找到了,上级原本想给证书续费,才发现人事变动致使没有改帐号,因此直接变换了域名固然从新购买了证书。由于小白公司项目是依托于公众号,因此用户对域名不敏感。由于全部的关于业务域名方向,都是采用动态获取的。因此在变动域名中,代码不须要作任何更改,只是须要把摇一摇设备已经生成的页面URL修改一下便可,虽然有上千个,但毕竟是直活,小白仍是没有太多的反感,欣欣然然的处理着。周五,所有完成,小白也安心过周末。spa

$_SERVER['HTTP_HOST']

    周六下午,公司反馈说新用户进入摇一摇异常,小白那时候正在图书馆,看海明威的《永别了,武器》,准确的说不是看,是在抄写,是的,由于此从离校或者说此从高中毕业后,小白就不多看书了,已经彻底没法看书了,可是小白依旧想看书,怀念之前高中那种看书的心态和看到一些新的故事时候的高兴和收获。毕业后,小白虽然不多看书了,但小白仍是一直在买书,小白相信小白有一天或者明天就会看的,至少想看的时候,书就在身边。后来小白发现问题像是有点大,因此小白就决定用抄写的方式来解决这个问题。

    

    小白瞄了一眼微信,发现提示是“页面失效,未知用户”。这个小白很熟悉,由于是他写的,用于在操做业务时,没法获取到当前用户信息的断点。这个提示的出现自己就是一个问题,正常到了操做业务时,不可能出现尚未获取用户信息的状况。那只能说明用户登录出现了问题,可是登录这一块小白一只很头疼,由于很繁琐,很杂乱,由于是一个二开的项目上更改的,登录的问题很大,但也能够说不大,若是一个问题大到你已经没法处理了,那问题的处理就对你来讲失去了意义。可是,正是由于这个登录的问题,由于以前也是因为登录致使部分用户出现错误页面,后来定位到也是因为未获取用户信息,就进行业务操做,致使的数据库空查询报错。也是因为一直是“部分”,全部后来,小白在基本熟悉新项目框架流程后,就着手把原来的登录进行了重构,也不能说是重构把,在原先的基础上进行处理,基本算是9成的重构吧。由于小白对于当下已经上线的项目,尚未这么大的信心彻底去从新。

    全部通过一周的测试和完善,迭代后登录就再没有碰见先前的问题。“页面失效,未知用户”,这个提示使得小白很烦躁,像是让小白又想起了那段时间——错误已经出现,可是你没法找到错误产生的缘由,你没法获取到错误的产生缘由,你在不停的调试,尽你所能想到的,可是错误依旧出现,而且长时间你没有解决他。

    若是是登录出现了问题,那说明以前努力作的迭代产品,依旧存在着问题。可是不可能,也许小白对那段时间太深入了,以致于他不想这么早就怀疑本身的努力。由于后来的迭代是在彻底吃透前面老兄写的流程后更改的,因此方向和跟随的脚步不该该有问题。何况,后来运行也一直没有在反馈出问题。

    小白的内心有点难受,以为很烦躁,小白是那种内心装不住事情的人,第二天下午,公司又反馈出有用户在激活礼品卡的时候报“调取接口失败,500”,激活卡卷只是一个简短的调起.NET写的接口的业务,没有任何冗余。小白本身在手机上尝试了一下,并无发现任何异常,又是这个“部分”。

    周一,一大早小白就来到了公司。断点,记录,断点,记录,用户试图操做业务时,没有完成新用户的注册;查看新用户注册流程;发现新用户在调用微信接口获取用户信息时,这里就断掉了,可是实际又出现了受权页面。

    

    在小白后来迭代的代码里,在获取用户信息时,就没有往下走了,老猿对小白说这个弹窗受权页面没有出来。小白想也是,这个地方按道理应该出现一个页面的跳转,获取Code码,是的在这里断掉了。老猿淡然的指到你这里的Head头部是写死的“Http”,如今不是已经换成了“Https”吗。

    /**
     * 获取微信会员信息,弹出受权页面snsapi_userinfo
     */
    public function get_openid_info()
    {
        if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')) {
            // 经过code得到openid
            if (empty($_GET['code'])) {
                // 触发微信返回code码
                if (! empty($_SERVER['QUERY_STRING'])) {
                    $query_string = "?" . $_SERVER['QUERY_STRING'];
                }
                $baseUrl = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . $query_string;
                $url = $this->get_authorize_url_userinfo($baseUrl, "123");
                Header("Location: $url");
                exit();
            } else {
                // 获取code码,以获取openid
                $code = $_GET['code'];
                $data = $this->get_access_token($code);
                $openid = $data;
                // session('openid', $openid); //写入本地SESSION
            }
        }
        return $openid;
    }

    小白听完,加上一个S,上传,测试发现异常解决了。

    /**
     * 获取微信会员信息,弹出受权页面snsapi_userinfo
     */
    public function get_openid_info()
    {
        if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')) {
            // 经过code得到openid
            if (empty($_GET['code'])) {
                // 触发微信返回code码
                if (! empty($_SERVER['QUERY_STRING'])) {
                    $query_string = "?" . $_SERVER['QUERY_STRING'];
                }
                $baseUrl = $_SERVER['REQUEST_SCHEME'].'://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . $query_string;
                $url = $this->get_authorize_url_userinfo($baseUrl, "123");
                Header("Location: $url");
                exit();
            } else {
                // 获取code码,以获取openid
                $code = $_GET['code'];
                $data = $this->get_access_token($code);
                $openid = $data;
                // session('openid', $openid); //写入本地SESSION
            }
        }
        return $openid;
    }

    老猿对小白说,这个头部不知道为啥是写死的,其余项目我已经所有改过来了,这个没有改。小白想,这段获取用户对微信关注信息的,由于当时看这段是一个固定的逻辑业务,没有重点关注,直接复制过来用,因此没有考虑到代码的强壮性这一块。这个问题解决了,那么激活礼品卡失败,小白查看了本身写的日志,发现又是“部分”用户在获取输入帐户及密码后就断掉了,这种状况以前碰见过一个就是获取Ip报错的一个低级错误致使,后来修复了。

    

    小白因而问上级,礼品卡上面是否有一个码了,能够供用户扫码直接进入项目,上级说说是的,有一个二维码,用户能够直接扫码进入到输入卡密和卡号的页面。小白明白了,新用户在拿到礼品卡后,直接扫码,进去到激活卡卷页面,程序检测到新用户,因而进行获取用户的信息,进行用户注册,在调用微信接口的时候,因为http已经变动为https因此这个跳转的URL已经失效,因此没有拿到用户信息。但往下走尝试操做业务时,便产生了一个空查询操做,接口报错致使,前端显示“接口调取失败,500”。

    因而小白,更改所有为动态获取和检查后,提交及回复了上级。

     

    -----结束

相关文章
相关标签/搜索