进阶篇Paid
Webhook
当我们不再满足借助 google 广告收入的时候,接入第三方支付功能(如 Creem 或 Stripe)是一个非常常见的需求。
这个过程通常很直接:用户在我们的网站上点击支付,我们将其引导至支付平台,用户完成付款。但这里有一个关键问题:用户付款成功后,远在天边的支付平台,如何通知我们本地电脑上正在开发中的应用程序呢?
如果我们不能在本地接收到这个“支付成功”的通知,就无法进行后续的业务处理,比如为用户开通会员权限、更新订单状态等。这就意味着我们无法在本地完成对整个支付流程的端到端测试。
今天,我们就来解决这个痛点。我们将深入理解一个核心概念——Webhook,并掌握一个强大的工具——ngrok,它能让我们在本地开发环境中,像在真实的线上服务器一样,接收并调试来自任何第三方服务的通知。
什么是 Webhook?
想象一下,你想知道一个重要的包裹是否已经送达快递中转站。你有两种方式来获取这个信息:
- 主动轮询 (Polling): 你每隔五分钟就给中转站打一次电话,问:“我的包裹到了吗?”。这种方式不仅非常低效,而且占用了你和中转站工作人员的大量精力。在程序世界里,这就好比我们的服务器不断地向支付平台发送请求:“那个订单支付了吗?现在呢?现在呢?”,这会造成大量的资源浪费和延迟。
- 事件通知 (Event-Driven): 你在寄出包裹时,就给中转站留下了你的电话号码,并告诉他们:“包裹一到,请立即打给我。” 这样,你就可以安心做自己的事情,直到电话响起。
Webhook 就是第二种方式。
它是一种“反向 API”,一种由事件驱动的通知机制。在我们传统的开发流程中,通常是我们的应用主动去调用(Call)第三方服务的 API。而 Webhook 则反了过来:当某个特定的事件在第三方服务上发生时(例如 checkout.session.completed),该服务会