访问PayPal沙盒REST API应用时出现身份验证错误的原因是什么?
应Preston PHX要求,我已将完整测试ASP.NET Web App代码上传至Dropbox,方便大家定位我遇到的问题。
问题描述
我尝试使用PayPal官方Checkout-NET-SDK开发分支下的示例代码对接PayPal沙盒,运行失败。我在Visual Studio的Localhost环境下开启调试模式,设置多个断点排查问题。
测试页面中的以下代码行:
var createOrderResponse = CreateOrderSample.CreateOrder(true).Result;
抛出错误如下:
- 内部异常2:
- HttpException:
{"error":"invalid_client","error_description":"*Client Authentication failed*"}
进一步排查发现错误触发位置为PayPalClient.cs中的environment方法,我已经修改该方法填入了我的PAYPAL_CLIENT_ID和PAYPAL_CLIENT_SECRET:
public static PayPalEnvironment environment() { return new SandboxEnvironment( System.Environment.GetEnvironmentVariable("PAYPAL_CLIENT_ID") != null ? System.Environment.GetEnvironmentVariable("PAYPAL_CLIENT_ID"):"<<PAYPAL-CLIENT-ID>>", System.Environment.GetEnvironmentVariable("PAYPAL_CLIENT_SECRET") != null ? System.Environment.GetEnvironmentVariable("PAYPAL_CLIENT_SECRET"):"<<PAYPAL-CLIENT-SECRET>>"); }
我是从PayPal开发者后台我创建的REST API应用中准确复制的PAYPAL_CLIENT_ID和PAYPAL_CLIENT_SECRET,除了这两处配置外没有修改官方示例代码。我没有在官方示例代码中看到需要指定沙盒URL的要求,推测SandboxEnvironment实例会由PayPalCheckoutSdk自动配置对应的沙盒地址。
目前不清楚为什么对接沙盒账号会认证失败,想知道哪里可能操作有误,该问题是否和我使用Localhost环境有关?
2021年11月1日更新(针对Preston PHX的回复)
创建新的沙盒Client ID和Secret没有解决问题。此前我参考论坛帖子的建议,使用ngrok开放80端口以便通过Localhost进行PayPal测试,但沙盒连接依然认证失败。
测试用沙盒信息如下:
- 沙盒Client ID:AZcb8XrqhJEUO7lS_JtKSe3sdNDLESmo3ekhupDKTL1J9vQCKVOzacCjO3PBQwSfngYkLGa-qS7EUrGV
- Secret:EBEcuPewHdzCB8p0qE1Yszjk2eMyFCstzkL0Diz2WC5IQREsu6cDHr7yFG9a-GDIyljb-KRb2DA6Hoey
我在Windows10设备上安装了curl、Bash和Git,运行了PayPal官方文档中获取访问令牌页面指定的curl命令,运行结果已存入Word文档上传至Dropbox。
2021年11月2日更新
应Preston PHX要求,我已将测试使用的ASP.NET Web App项目文件夹上传至Dropbox,未上传解决方案文件。
内容的提问来源于stack exchange,提问作者haggis999

