在 Sandbox 中一切正常,但我使用 PayPal Live 得到 IdentityException
Everything works in Sandbox, but I get IdentityException using PayPal Live
我正在使用 .NET SDK (https://www.nuget.org/packages/PayPal) 使用 PayPal REST API 将 PayPal 支付集成到我的网站中。我的网站 运行 作为 Microsoft Azure 中的应用服务。我有一个配置为使用 PayPal 沙盒的测试槽,以及一个使用实时凭证的生产槽(配置设置位于应用程序设置中,并且是特定于槽的)。
Sandbox 中一切正常,我能够使用实时配置进行身份验证并获取访问令牌,但是当我尝试处理任何内容时,我得到一个 PayPal.IdentityException
(我尝试了付款和计费计划和协议)。如果我查看 IdentityException
Response
(或 Details
),我会得到:
{"error":"invalid_token","error_description":"The token passed in was not found in the system"}
进一步挖掘,似乎创建的 ApiContext
设置了 AccessToken,但 Config 属性 是 null
。如果我查看 API 请求(来自 PayPalResource.LastRequestDetails.Value
),我发现即使它使用实时配置,它也会将请求发送到 api.sandbox.paypal.com,而不是实时 API。这似乎是我的 ApiContext
的问题,我建立如下:
public static APIContext Authenticate()
{
string clientId = ConfigurationManager.AppSettings["PayPalClientId"];
string clientSecret = ConfigurationManager.AppSettings["PayPalSecret"];
string mode = ConfigurationManager.AppSettings["PayPalMode"];
var config = new Dictionary<string, string>();
config.Add("mode", mode);
config.Add("clientId", clientId);
config.Add("clientSecret", clientSecret);
accessToken = new OAuthTokenCredential(config).GetAccessToken();
return new APIContext(accessToken); // <--- problem here
}
除了手动构建 Config
字典而不是使用 ConfigManager
从自定义配置部分自动创建它之外,这非常接近 .NET SDK 文档。我做错了什么?
这里的问题是所有传递给 APIContext
构造函数的都是 accessToken
。如果没有 Web.config
或 App.config
的自定义配置部分中的设置,APIContext
默认使用沙箱 API.
解决方案是使用对象初始化程序显式设置配置 属性:
return new APIContext(accessToken) { Config = config }; // <---- fixed
我正在使用 .NET SDK (https://www.nuget.org/packages/PayPal) 使用 PayPal REST API 将 PayPal 支付集成到我的网站中。我的网站 运行 作为 Microsoft Azure 中的应用服务。我有一个配置为使用 PayPal 沙盒的测试槽,以及一个使用实时凭证的生产槽(配置设置位于应用程序设置中,并且是特定于槽的)。
Sandbox 中一切正常,我能够使用实时配置进行身份验证并获取访问令牌,但是当我尝试处理任何内容时,我得到一个 PayPal.IdentityException
(我尝试了付款和计费计划和协议)。如果我查看 IdentityException
Response
(或 Details
),我会得到:
{"error":"invalid_token","error_description":"The token passed in was not found in the system"}
进一步挖掘,似乎创建的 ApiContext
设置了 AccessToken,但 Config 属性 是 null
。如果我查看 API 请求(来自 PayPalResource.LastRequestDetails.Value
),我发现即使它使用实时配置,它也会将请求发送到 api.sandbox.paypal.com,而不是实时 API。这似乎是我的 ApiContext
的问题,我建立如下:
public static APIContext Authenticate()
{
string clientId = ConfigurationManager.AppSettings["PayPalClientId"];
string clientSecret = ConfigurationManager.AppSettings["PayPalSecret"];
string mode = ConfigurationManager.AppSettings["PayPalMode"];
var config = new Dictionary<string, string>();
config.Add("mode", mode);
config.Add("clientId", clientId);
config.Add("clientSecret", clientSecret);
accessToken = new OAuthTokenCredential(config).GetAccessToken();
return new APIContext(accessToken); // <--- problem here
}
除了手动构建 Config
字典而不是使用 ConfigManager
从自定义配置部分自动创建它之外,这非常接近 .NET SDK 文档。我做错了什么?
这里的问题是所有传递给 APIContext
构造函数的都是 accessToken
。如果没有 Web.config
或 App.config
的自定义配置部分中的设置,APIContext
默认使用沙箱 API.
解决方案是使用对象初始化程序显式设置配置 属性:
return new APIContext(accessToken) { Config = config }; // <---- fixed