更新旧PHP项目遇Composer报错:paypal/paypal-checkout-sdk已废弃
解决
paypal/paypal-checkout-sdk废弃问题的方案 paypal/paypal-checkout-sdk已被PayPal官方废弃且不再维护,官方目前推荐直接通过HTTP请求调用PayPal REST API来替代,以下是具体解决步骤:
1. 移除废弃包
在项目的composer.json中删除paypal/paypal-checkout-sdk的依赖条目,然后执行命令移除包:
composer remove paypal/paypal-checkout-sdk
2. 添加HTTP客户端依赖
选择一个常用的HTTP客户端(比如Guzzle)来发起API请求,执行命令安装:
composer require guzzlehttp/guzzle
如果项目已经有其他HTTP客户端(如Symfony HttpClient),可以跳过此步骤。
3. 重构代码调用PayPal API
替换原有SDK调用逻辑,直接通过HTTP请求对接PayPal的REST API,以下是一个简单的示例(以创建订单为例):
<?php use GuzzleHttp\Client; use GuzzleHttp\Exception\GuzzleException; // 初始化客户端,沙箱环境用api-m.sandbox.paypal.com,生产环境用api-m.paypal.com $client = new Client([ 'base_uri' => 'https://api-m.sandbox.paypal.com/', 'headers' => ['Content-Type' => 'application/json'], ]); try { // 获取访问令牌 $authResponse = $client->post('v1/oauth2/token', [ 'auth' => ['你的PayPal客户端ID', '你的PayPal客户端密钥'], 'form_params' => ['grant_type' => 'client_credentials'], ]); $authData = json_decode($authResponse->getBody()->getContents(), true); $accessToken = $authData['access_token']; // 构建订单数据 $orderPayload = [ 'intent' => 'CAPTURE', 'purchase_units' => [ [ 'amount' => [ 'currency_code' => 'USD', 'value' => '19.99' ] ] ] ]; // 创建订单 $orderResponse = $client->post('v2/checkout/orders', [ 'headers' => ['Authorization' => "Bearer {$accessToken}"], 'json' => $orderPayload ]); $orderData = json_decode($orderResponse->getBody()->getContents(), true); // 处理订单结果,比如获取订单ID用于前端跳转 echo "订单ID: " . $orderData['id']; } catch (GuzzleException $e) { // 处理请求异常,比如打印错误信息 echo "请求错误: " . $e->getMessage(); }
关键注意事项
- 替换示例中的客户端ID、密钥以及金额、货币代码等参数为实际项目值
- 沙箱环境和生产环境的API域名不同,上线前务必切换到生产地址
- 参考PayPal官方API文档,根据原有SDK的功能(如捕获订单、查询订单、退款等),对应调用v2版本的REST API端点
- 务必处理API请求的异常情况,避免因网络问题或参数错误导致业务逻辑中断
内容的提问来源于stack exchange,提问作者Whimsy Cat
相关产品推荐
相关产品推荐

