PayPal标准集成迁移至PHP页面遇Cannot Get错误求解决方案
正确集成PayPal标准示例到PHP页面的步骤
先明确环境差异
原示例是基于Node.js的Express服务,而XAMPP的Apache负责处理PHP文件,你需要二选一:要么在Node.js服务中添加PHP支持,要么把整套逻辑迁移到Apache环境下运行。
方案一:保留Node.js服务,添加PHP支持
- 安装PHP处理依赖:
npm install php-express - 修改Node.js入口文件(比如
app.js或server.js),添加PHP路由配置:const phpExpress = require('php-express')({ binPath: 'php' // 若系统PATH没配置PHP,直接写XAMPP的PHP路径,比如'C:/xampp/php/php.exe' }); // 单独配置webpage.php的路由 app.get('/webpage.php', phpExpress.router); // 或者让服务处理所有PHP文件 app.use(phpExpress.router); - 将
webpage.php放到Node.js服务的静态文件目录(通常是public文件夹) - 重启Node.js服务,访问
http://localhost:8888/webpage.php
方案二:迁移到XAMPP的Apache环境
- 把原示例index.html里的PayPal按钮脚本复制到XAMPP的
htdocs目录下的webpage.php中 - 替换原Node.js的后端API为PHP版本:
- 安装PayPal PHP SDK(需先装Composer):
composer require paypal/rest-api-sdk-php - 编写
create-order.php和capture-order.php接口,配置沙箱凭证:<?php require 'vendor/autoload.php'; $apiContext = new \PayPal\Rest\ApiContext( new \PayPal\Auth\OAuthTokenCredential( '你的沙箱Client ID', '你的沙箱Secret' ) ); $apiContext->setConfig(['mode' => 'sandbox']); // 创建订单的核心逻辑(参考原Node.js示例的逻辑转换) $order = new \PayPal\Api\Order(); // ... 填充订单参数,执行创建请求 ... echo json_encode($order->create($apiContext)); ?> - 修改
webpage.php中的PayPal脚本,将API请求指向PHP接口:paypal.Buttons({ createOrder: (data, actions) => { return actions.request.post('/create-order.php') .then(res => res.id); }, onApprove: (data, actions) => { return actions.request.post('/capture-order.php', { orderID: data.orderID }) .then(details => alert('交易完成!')); } }).render('#paypal-button-container');
- 安装PayPal PHP SDK(需先装Composer):
- 启动XAMPP的Apache服务,访问
http://localhost/webpage.php(注意用Apache默认的80端口,不是Node.js的8888)
"Cannot Get"错误的解决关键点
- 路由未配置:Node.js服务默认只识别根路径的
index.html,没有/webpage.php的路由规则,必须手动添加路由或配置PHP解析。 - 环境端口冲突:不要同时启动Node.js服务和Apache服务在同一端口,二选一即可。
- 文件位置错误:确保
webpage.php放在Node.js服务指定的静态文件目录下,否则服务找不到该文件。
内容的提问来源于stack exchange,提问作者Frank Srebot
相关产品推荐
相关产品推荐

