首页 > 解决方案 > dotnet core paypal GetAccessToken 实时返回 401,但适用于沙盒

问题描述

尝试在 asp.net 核心网站上使用 paypal,但我无法获得访问令牌,我不断收到 PayPal.HttpException: The remote server returned an error: (401) Unauthorized.

这是有问题的代码部分:

        Dictionary<string, string> configurationMap = new Dictionary<string, string>();
        configurationMap.Add("clientId", _options.PayPalClientId);
        configurationMap.Add("clientSecret", _options.PayPalClientSecret);
        configurationMap.Add("mode", _options.PayPalMode);

        _logger.Info($"paypal data: mode={_options.PayPalMode}, client id={_options.PayPalClientId}");
        var accessToken = new OAuthTokenCredential(_options.PayPalClientId, _options.PayPalClientSecret, configurationMap).GetAccessToken();
        var apiContext = new APIContext(accessToken) { Config = configurationMap };

我使用的 nuget 包是:

<PackageReference Include="PayPal" Version="2.0.0-rc2"/>
<PackageReference Include="PayPalCore" Version="1.0.0"/>

查看日志以确保 mode=live 并且 clientId 是 live 的(所以我确信秘密也被正确加载)。

这段代码在我的工作站和我的开发服务器(运行 IIS 和 kestrel)上运行良好,使用沙盒 clientId/secret。但是,在 AWS 的生产服务器上,我收到此错误。在 AWS windows 服务器上运行 postman 以确保它可以与 paypal 的 api 进行通信,我可以获得 accesstoken,所以这不是防火墙问题。

还有其他线索吗?

标签: asp.net-corepaypal

解决方案


对于任何有同样问题的人,或者想知道将哪个 paypal sdk 用于 dotnet 核心应用程序,这就是诀窍:

<PackageReference Include="PayPal.SDK.NETCore" Version="1.9.1.2" />

推荐阅读