前期准备
创建一个开发人员账号
在公司里开发不同于个人,需要获取到公司账号的一些信息。而我目前就职的公司,实在是一个小公司,连给开发人员的账号也没有,我也是没接触过 PayPal,也不知道怎么弄。经过一番摸索才找到创建开发人员账号的方法。真实环境是需要通过邮箱验证来激活创建的账号的,沙盒中虽然有邮箱,但是并不会用邮箱来激活。
学习 PayPal 沙盒
开发者面板
可以创建沙盒账户,有买家账户和商家账户,webhook simulator 可以模拟 webhook 请求,非常方便。
事件查看,能够查看 API 调用事件,webhook 事件,和错误日志。 PayPal的沙盒环境是在国外的,速度较慢,需要注意的是常常出现 webhook 调用日志状态显示不及时的情况。
模拟支付
沙盒测试工具使用:https://developer.paypal.com/tools/sandbox/
https://developer.paypal.com/api/rest/sandbox/card-testing
webhook 对接
官方文档:Integration
PayPal 的文档算是非常的详细了,基本上照着文档开发,能够解决大部分的问题。剩下的部分就需要自己去踩坑了,文档也不能够事无巨细的都列出来,这样文档就会又臭又长。
webhook 验证签名
这个问题困住了我很久,PayPal 的文档中给出的 express 示例,而我用的是 nestjs,我根本不熟悉这个框架。通过阅读 PayPal 的文档可以得知,需要使用最原始的数据(raw 格式的请求体)来进行校验,才能够验证签名通过。后面意识到这个问题之后,又一直求助于 GPT,GPT 有一点不好,就是太会瞎编。编出了不止一套解决方法,但是 GPT 的方案实在不能够让我满意,直觉告诉我不应该是这么复杂的。突然想到查看官方文档,官方文档中有解决方案。
Documentation | NestJS - A progressive Node.js framework