rud*_*den 4 .net c# integration paypal paypal-rest-sdk
我正在使用.NET SDK(https://www.nuget.org/packages/PayPal)使用PayPal REST API将PayPal付款集成到我的网站中。我的网站在Microsoft Azure中作为应用程序服务运行。我有一个配置为使用PayPal Sandbox的测试插槽,以及一个使用实时凭据的生产插槽(配置设置在“应用程序设置”中,并且是特定于插槽的)。
一切在Sandbox中都可以正常工作,并且我可以使用实时配置进行身份验证并获得访问令牌,但是当我尝试处理任何事情时,我都得到了PayPal.IdentityException(我尝试了“付款”以及“计费计划和协议”)。如果查看IdentityException Response(或Details),则会得到以下信息:
{"error":"invalid_token","error_description":"The token passed in was not found in the system"}
Run Code Online (Sandbox Code Playgroud)
进一步挖掘,似乎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
}
Run Code Online (Sandbox Code Playgroud)
除了手动构造Config字典,而不是使用字典ConfigManager从自定义配置部分自动创建字典以外,这与.NET SDK文档非常相似。我究竟做错了什么?
这里的问题是,传递给APIContext构造函数的全部是accessToken。如果没有的自定义配置部具有设置Web.config或App.config,APIContext默认使用沙盒API。
解决方案是使用对象初始化程序显式设置Config属性:
return new APIContext(accessToken) { Config = config }; // <---- fixed
Run Code Online (Sandbox Code Playgroud)