00:00
嗨,大家好,我是来自op proxy的付金泉,那不知道有多少同学在和微信支付的对接过程中会遇到一个问题,那就是你在本地开发时是没有办法调试微信支付的,简单来说就是获取微信支付二维码的请求你都没有办法构建,这个是因为你在构建微信支付的请求参数时,其中有一个notify URL字段,微信强制要求必须以HTPS开头的完整路径地址,并且确保URL中的域名和IP是外网可以访问的。不能填写LOCALHOT127.0.0.1,而此时我们在本地开发时,一般都是在我们的开发笔记本上,所以呢,我们必定是localhot或者是127.0.0.1,我们也没有HTPS的完整路径地址,而这个notify URL, 它的作用是当用户在微信支付那边付款成功以后,微信支付呢,它会post到你的这个notify URL来告诉你这个用户支付成功了,那为什么不能用local host或者是127.0.0.1呢?这其中本质的原因是两个,第一个啊,既然是通知,那么微信呢,它首先得要能够找到你,但是你本地笔记本是LOOKHOT127.0.0.1这样的东西,那没有公网IP的情况下呢,微信是不可能查得到你的,因为在你的开发笔记本上面,这个localho127.0.0.1呢,是指向你自己这台笔记本,但是在微信服务器上面呢,这个loho又指向了它自己的这一台微信服务器了,对吧。所以微。
01:31
竞才会要求必须要有公网可达的地址,而不是loho或者127.0.0.1,因为在计算机科学中,Loho或者127.0.0.1呢,它始终都是指向所在机器的自身,那第二个呢,是因为微信它没有沙河环境,有沙河环境的话呢,上面第一个问题好解决,但很可惜啊,它没有,所以它默认所有对接他微信支付的产品啊,全部都应该直接处于生产环境,又同时因为这是关于钱的事情,所以安全级别必须拉到最高,所以哪怕你本地笔记本有公网IP,微信能够找到你,他也是不接受的,他只能接受基于HTPS开头的TS加密请求。
02:12
那这两个原因啊,他基本上就把你本地调试微信支付的可能性给完全锁死了,这个时候你可能就只好写伪代码,然后自己也不知道是否OK了,就推进公司的生测试环境,甚至小点的公司呢,可能直接上生产环境测试,然后测试有问题你就得重新下来改代码,然后又继续发版部署,这样来回循环的折腾时间和精力呢,都消耗了不少,那OPT proxy呢,带来了这个问题的完整解决方案,我们直接来看做法,我这里准备了一个微信支付的DEMO,它的后端呢是工作在8090,然后前端呢是工作在3010,我们可以打开这个3010看一下。这时候啊,因为我们的后端是工作在这个local host的8090的,我们无论怎样都不可能获取得到这个微信支付的二维码,比如说我们点击支付0.1元,你会发现呢,它这里面会提示你一个错误,它说notify URL不满足正则表达式第一正则表达式的第一行呢,就是HTPS,也就是说。
03:13
你如果没有htps notify URL, 那么肯定拿不到这个二维码,那就更不用说去调试整个微信支付后的业务逻辑了。那这个时候我们的当务之急就是一定要给我们的本地去构建一个微信支付可以触达的HTPS安全地址,我们来到opbit proxy的控制中心,在使用这个OPT proxy之前呢,你需要在你的本地笔记本上面去安装这符合你操作系统的opbit proxy的客户端,那大家如果没有看过之前的安装视频呢,你可以去点击这个快速发布了cos的后前后端项目去看如何安装我们的OPT proxy客户端,那这里我就不展开去多讲废话了。但是这里大家要注意啊,我接下来讲的这些都是基于你已经安装好op prox客户端了,并且知道基本使用的情况,所以无论怎样,呃,我推荐新来的朋友或者同学去看一看这个指引视频,否则可能你跟着我去配置的时候,你会发现你跑不通,那我们来到HPTCP云端点的页面,点击新增云端点,然后选择HPS,点击一个域名。
04:22
然后选择我们认证好的这个客户端,然后输入12727.0.0.1,因为我们刚刚的后端服务是工作在8090对不对,所以我们这里填8090,然后点击创建云端点。OK, 我们把这个云端点的这个URL呢,会进行复制,然后来到我们的代码中,代码里面它的万恶之源其实就是。这一个吧,Notify ul对不对,所以我们直接把notify ul放到这里,后面加上我们的pass路径,OK啊,然后这个时候我们去重启我们的这个服务。
05:01
来到这个浏览器里面,点击这个DEMO,我们再次支付0.1元,此时你会发现我们的微信支付二维码呢,已经成功加载,代表微信支付已经接受了我们这个notify URL, 那我们此时完成一笔0.1元的支付,OK, 这个地方已经支付成功了。这里为什么会显示支付成功了?是因为微信支付在收到用户的成功支付以后,他会去post的请求到你的这个notify URL, 没问题吧?然后我们刚好呢,这个notify UR呢?它是指向了我们的本机,所以我们这里已经接收到了回调的更新账单。为什么通过OT proxy可以做到这些呢?这其中的核心缘由就是auto proxy, 它是一个统一的API网关,可以在不需要你上传任何源代码的情况下,帮你把任何位置的服务安全发布到互联网上。所以因为你的这个服务呢,已经公开到了互联网上,谁都可以访问,那么微信支付呢,自然就可以通知到你这个本地服务器了,但是这还不够啊,因为我自己也是做开发出身的,所以我觉得对接这种第三方API,除了联通以外,另一个更麻烦的其实是调试,这个调试是什么意思呢?就是很多同学啊,可能会对微信支付回调比较抵触的原因之一啊,就是你压根不知道微信支付给你返回了啥东西,加上微信支付它本身的类型约束也不是很好嘛,比如说像go浪SDK可能还好一点,因为go浪是强类型语言,那如果你要换个是node的,它可能类型提示不全的情况下,你每写一个字段都是心惊胆战的。另一个问题呢,就是我虽然本地可以调试方便很多了,但如果说比如说我现在这个代码写的有问题,那么我每更改一次代码,我都得重新到前端去点击这个支付,比如说我现在后端业务逻辑有问题,那么我改完代码以后,我是不是又得。
06:52
到前端点击支付0.1元,然后点击扫码支付,然后再去调试,对吧?这中间除了每次调试都要产生一笔付款以外,同时啊,你还要等整个流程,这个是很让人抓狂的,所以这两个问题啊,我们来看看op proxy它是怎么为开发者去解决的。
07:10
我们回到op PRO控制中心,点击云端,点访问日志,然后筛选我们刚刚的。TM, 此时它会提示你该云端点暂未开启访问日志能力,那我们点击立即开启。我们直接采集详细的请求头和请求体。保留天数7天,日志上限我们可以提高到512KB 512KB的话,对99%的HTP请求都是完全够用的。点击添加,此时我们到页面中再来产生一笔支付。OK, 此时又提示了支付成功,那么我们回到我们的云端,点访问页面。筛选我们刚刚的这个请求,此时你会看到上海腾讯他发了一个请求过来,被我们捕获到了,我们点击查看。
08:03
你会发现无论是请求头还是请求体,都是成功被op proxy给捕获的,这其中的ID create time以及支付成功,还有它的各种状态,我们是不是都能够拿到了?在其中我们可以清晰的看到每一个字段,这样你是不是一点都不会恐惧啊,因为它太清晰了,甚至有一种如释重负的感觉。然后我们回到我们的这个DEMO终端啊。来换行几下,我们现在假设一个场景,就是我们在开发的过程中呢,微信支付的后续业务流程可能有点bug,然后我们修复了以后,我们正常情况下是不是要去重新走扫码支付的流程,那么在office proxy这边我们怎么做?回到这个控制中心,点击操作按钮,点击重放。此时我们再回到我们的编辑器里面来,你就会发现在这个横杠下面呢,你再一次收到了一次微信支付回调的请求,此时我们自身并没有进行任何微信支付的扫码逻辑,对不对?那这里为什么会报验签失败呢?其实本质上也很简单啊,是因为微信你当你用他的SDK去验证这个微信支付的回调的时候呢,它会去对整个请求的呃,时间戳呀,以及密等线都去进行一个验证,来防止重放请求,而我们这个是不是刚好就是重放请求啊,那重放请求呢,你正常在调试中,或者你在测试的情况下是没问题的,因为都是你本地的开发环境嘛,你只是为了方便你自己,在生态环境里面呢,我们有一种攻击啊,它就叫做重放攻击,所以微信对这个重放啊是比较严格的,在开发环境里面,我们我们只需要把这个重放验证给关掉就OK了,这个就是op process呢,它在微信支付回调这一块给开发者带来的一些争议,然后这个里呢,大家可能也关注到了有一些异常请求啊,比如说像这个境外访问啊,或者这个。
09:55
这个呢,就是跟大家说一点题外话,就是呃,我们不管是作为开发者也好,或者作为企业也好,去发布一个产品到线上去的时候,你的你整个产品的安全性是非常非常重要的,就是现在哈,其实呃,不管是境内还是境外,都有非常多的爬虫和恶意攻击机构在每天不断的扫描端口扫描攻击,那么你的团队或者是你的个人开发者,你需要有具备去拒绝这些危险请求以及拒绝钓鱼请求的能能力,否则你的项目可能就会被黑客找到漏洞,找到漏洞以后,然后就会去勒索或者是恶意攻击,所以在保证整个生态环境的这个安全性这一块呢,最重要的第一个点就是记录,你要知道就是你要有非常强大的可观测性,去知道你的这个站点,或者你的这个产品到底在被谁访问,有没有钓鱼网站,那么有钓鱼网站的话,比如说这个它是一个钓鱼,一个恶意的攻击网站,我就会直接拦截此IP。
10:54
那这个IP呢,从此以后他就会直接被API网关给拒绝了,这个是一些生产环境的一些安全方面的一些东西啊,因为刚刚也我看到这个界面刚好跳出来了,所以跟大家提一下,后面我们也会跟呃,大家去详细的介绍我们整个op proxy的可观测性,这里我给大家简单看一下吧,就是我们一天的到底有多少个端口扫描或者是恶意攻击,你看这些其实全部它都是境外的。
11:21
看到没,这些就是钓鱼攻击啊,如果你的呃产品的那个安全性做的不够好的话,那么就很容易被他们命中,命中了以后呢,可能你的这个系统就会有有安全风险,OK, 那今天的after PRO的能力分享就到这儿,我们下一次再见,拜拜。
我来说两句