RCA

1.背景知识

微信授权,php,订阅号,微信授权代理

2.问题现象

外包开发个php项目,最终上线,不想让外包人员拿到服务器权限,所以总监让我介入帮忙部署。外包和业务告诉我代码在外包服务器上测试通过了要求我上线部署到自己服务器。开始我说上线部署也就3天搞定,我本来打着富裕时间去的,我也有其他开发工作要做。结果噩梦的开始,这外包也是偷懒的人,文档,sql,代码,本来说一次性给全,确实给了,基本上我部署时候发现一个问题,找他要一部分代码或sql,好不容易部署上去,微信授权有问题。

3.影响范围

微信授权

4.问题原因

多个问题,微信订阅号无法微信授权,只有公众号可以。阿里云那台机子配置有问题(没有外网出口)

5.问题分析过程

5.1.微信授权第一步获得code时候就报错,开始本来觉得订阅号可以做微信授权,后来查了一下微信文档说只能公众号能微信用户授权,而我们公众号在java项目使用,不想改java项目了,告诉给外包问题原因,忙别的工作去了。外包技术没重视,以为我瞎说的,他们改代码改了半天,又在他们公众号上测,过了3天才确认是这个问题,结论说没办法处理,问题提给我。

5.2.我网上找了找文章,又试了试用订阅号微信授权的旁门左道的招儿,失败,放弃,我们公众号授权回调域名不能改,老实的改JAVA项目。考虑用微信授权代理的方式简单解决,微信授权第二步回调到java域名的请求,该请求302到php项目域名上(两个项目域名不同)。改php项目获得code,然后跳过php微信授权第一步,后续让外包写的代码执行。

5.3.微信授权还是有问题,PHP不报错,我让外包排查,外包推诿了2天,重新部署了两回代码还是有问题,原因也没有发现。后来我烦了,自己查了,php写错误日志,发现该服务器没有外网出口,当时我一度不敢相信,因为该机子有往外发邮件的服务,按理说有外网的,再三wget,ping确认,确实没有,怀疑邮件服务可能是dnat处理掉了,最终找运维确认没有外网出口(运维也是外包,沟通成本比较大),一般我都习惯自己定位问题了后再找运维。

5.4.大改php代码,授权完全通过JAVA微信授权代理获得openid,昵称,头像。改完以后又发现微信分享不行,问了下前端同事,他说可能是微信js授权有问题,没办法,继续调PHP,js微信授权也走java,最后完工上线,这事开始上线实施,一共拖了2周半,中间各种人有事,任务互相推诿,让对方排查环境。

5.5 总监让我对外包项目进行验收,说实话这验收报告我都不想签字了,实施上线联调都是我做了70%,不过想想项目外包一共才给人家1w块,想想算了大家都不容易,签了个字了事了。

6.解决办法

外包沟通成本太大,有时候自己动手调可能更快。

7.后续处理措施

8.经验教训

第一次与陌生外包人员打交道的项目风险一定要考虑清楚(我也见过靠谱的外包),尤其你中间没有参与检查的话。最后的沟通时间,联调成本,上线时间,测试时间统统往大了估算,多估2-3倍是有必要的。实在任务推诿的太厉害只能自我驱动,问题自己排查,要不有时候真心推进不动。如果技术人员参与少的情况,建议考虑配置全栈工程师或高级工程师,有时候在代码业务都陌生的情况下,这类开发会适应性强很多,减少不必要的沟通和等待反馈的过程,如果配了低级工程师,那只会把越来越多的无关人员拖入恶梦。

9.RCA类型

风险预估不足。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Java日期时间API系列31

  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )