[教程] Laravel 6 构建一个简单的电商原型支持 PayPal 支付
很长一段时间以来,我一直在寻找如何将 PayPal 集成到 Laravel 来创建一个可靠,简单但有效的网络商店。发现方式之后,我立即向高级开发人员和 Laravel 社区介绍了我的方法,并提供了许多有用的反馈。现在,我很想与世界分享如何使我花了很长时间才弄清楚的东西。
我们将介绍动态网上商店,“订单-付款-产品”数据库架构,功能齐全的购物车以及完整的 PayPal REST API 集成。
步骤1:入门
让我们从创建 Laravel 项目开始。我假设您知道如何执行此操作,但以防万一:
laravel new webstore
项目准备就绪后,请确保在 .env 文件中配置数据库凭据。在本教程中,我们将使用 MySQL,并且将数据库命名为 “webstore”。
前端脚手架
如果您已经准备好自己的前端,则可以跳过此部分。
前端脚手架在 Laravel 早期版本是默认安装的。但是,这在 Laravel 6 中有所改变。要获得我们传统的 Bootstrap 脚手架,请首先运行:
composer require laravel/ui --dev
我们还希望在我们的项目中使用身份验证支架,因此,第二步,运行以下命令:
php artisan ui vue --auth
最后,编译我们的 assets :
npm install && npm run dev
步骤2:模型和数据库迁移
我们的数据库将成为我们应用程序的主要核心。我们将从一些理论开始,然后进行数据库迁移。
发票,订单和产品背后的理论
对于刚接触电子商务系统的程序员而言,构建高效的“付款-订单-产品”架构可能有些令人困惑。我个人喜欢使用以下一种:
- 发票的状态为“已付款”或“未付款”,具体取决于结帐响应。
- 订单绑定到发票(付款)。该订单在成功支付发票后有效。
- 订单可以包含一个产品,也可以包含多个产品(购物车)。因此,订单包含“子订单”,即某个订单的产品。
让我们用一个例子来澄清一些事情:销售手机壳的在线商店只会在有有效订单时才向客户发送订购的产品:发票已付款,因此该订单有效。实体商店也是如此:您选择手机壳,付款,然后离开商店,而不会受到保安的阻拦。在线商店和实体商店的共同点超出您的想象。
数据库模型和迁移
我们将需要一些模型和迁移。让我们从产品开始。 我们不会包含用户部分,因为脚手架已经做到了。
产品模型和迁移
php artisan make:model Product -m
在产品迁移文件中,我们:
*订单模型和迁移
php artisan make:model Order -m
在订单迁移文件中,我们:
子订单模型和迁移
php artisan make:model Suborder -m
在子订单迁移文件中,我们:
最后:发票模型和迁移
这个有点不同。当我们实现 PayPal 时,我们会从响应中获取大量信息。对于本教程,我们将仅将某些数据保存到数据库中(您可以添加/删除列)。要查看您从 PayPal 响应中获取的数据,请检查 Example Response on the API Documentation。
php artisan make:model Invoice -m
在我们的发票迁移文件中,我们:
Step 3: 购物车和 PayPal
我们的网上商店需要购物车和 PayPal 集成才能正常运行。让我们直奔主题。
功能性购物车
对于购物车,我喜欢使用 one well-maintained package for Laravel that works very well with PayPal’s SDK。让我们安装它:
composer require bumbummen99/shoppingcart
接下来,让我们添加两件事情:“购物车”小部件和将商品添加到购物车的功能。
首先,让我们更新 WebstoreController.php
文件。我们将添加三个用于编辑购物车的功能:
不错。但是缺少一些东西:我们必须能够从网上商店页面与购物车进行交互。登录后,我喜欢在导航栏中有一个购物车按钮,该按钮显示带有我们购物车内容的表格。让我们更新 layouts / app.blade.php
文件:
网上商店页面 & 将商品添加到我们的购物车
单击网上商店中的产品应将其添加到购物车中。多亏了我们使用的软件包,这真的很容易。在本教程中,我们使用网络商店的主视图,因此让我们更新 home.blade.php
:
PayPal SDK
PayPal 提供了一个很棒的 SDK for PHP, 其中包括一个 composer 包。让我们也安装这个:
composer require paypal/rest-api-sdk-php
接下来,我们需要在 config
目录中创建 paypal.php
文件。在其中粘贴以下内容:
我已在此文件中省略了注释,因为该代码是不言自明的,而且您可能不会碰它。
PayPal 沙盒
PayPal 为开发人员提供了一个沙盒变量,使测试真正简单安全。要 create a sandbox account,您将需要一个普通的 PayPal 帐户。
登录沙盒帐户后,我们需要三件事:一个沙盒企业帐户,一个客户ID和密钥。这三个凭据可以在沙箱仪表板的我的应用和凭据 > 您的应用程序 下找到。
点击“我的应用和凭据”下的应用,即可显示上述信息。
更新我们的 .env 文件
由于我们现在有了沙盒凭据,因此可以通过添加以下内容在 .env 文件中定义它们:
PAYPAL_CLIENT_ID=YOUR_APPS_CLIENT_ID
PAYPAL_SECRET=YOUR_APPS_SECRET
PAYPAL_MODE=sandbox
创建我们的 PayPal 控制器
快好了。剩下的就是PayPal的控制器,让我们开始吧:
php artisan make:controller PaypalController
我们的控制器应如下所示(我在文件中对此进行了很多评论以解释该过程):
路由
最后,让我们更新 routes / web.php
文件:
结束
非常棒!我们为测试做好了准备。通过运行 php artisan migrate:fresh --seed
和 php artisan serve
迁移并填充数据库。最终结果应如下所示:
将产品添加到购物车,然后打开购物车模式。
单击结帐会将您带到PayPal交易,然后将您重定向到带有提示的网上商店。
另外,您的数据库将得到更新。将插入“已初始化”状态的订单。付款完成后,状态将设置为“待处理”(这意味着成功了,这块逻辑您也可以更改)。发票将以“已批准”状态和其余的 PayPal 响应数据一起插入数据库中!太酷了吧?
下一步是什么?
这是我在 medium.com 上的第一篇文章。我写得很开心。我很高兴发表更多文章,并继续进行第2部分,其中涉及如何创建有用且安全的网络商店管理后台。
我还创建了一个 本教程的GitHub存储库,其中包含完整的源代码。
感谢您提供任何反馈意见,我很乐意与您联系。如果您有任何疑问,请随时提问。感谢您的阅读! ❤️
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。