[英]Using paypal SDK and custom configuration not from web.config
我正在尝试通过动态配置(而不是通过Web配置)使用Paypal .net sdk。 我发现PayPalAPIInterfaceServiceService类的重载可以通过Dictionary对象启动,而该对象实际上代表配置。 github上的主题https://github.com/paypal/sdk-core-dotnet/issues/1 我的代码:
Dictionary<string, string> paypalConfig = new Dictionary<string, string>();
paypalConfig.Add("mode", "sandbox");
paypalConfig.Add("connectionTimeout", "30000");
paypalConfig.Add("requestRetries", "5");
paypalConfig.Add("IPAddress", "127.0.0.1");
paypalConfig.Add("apiUsername", "***.gmail.com");
paypalConfig.Add("apiPassword", "api password goes here");
paypalConfig.Add("apiSignature", "signature goes here");
paypalConfig.Add("applicationId", "sandbox app id");
paypalConfig.Add("signatureSubject", "");
paypalConfig.Add("certificateSubject", "");
PayPalAPIInterfaceServiceService service = new PayPalAPIInterfaceServiceService(paypalConfig);
DoDirectPaymentResponseType response = service.DoDirectPayment(wrapper);
当我调用DoDirectPayment(wrapper)方法时,出现MissingCredentialException消息,消息为“缺少凭据”。 现在的问题是:如何正确初始化自定义配置? 我应该使用什么钥匙? 我找不到有关此问题的任何信息。
贝宝(PayPal)文档有时会激怒我。 他们说“签出样本”,然后没有单个样本引用此构造函数!
幸运的是,他们确实在本页上进行了解释。
...或者,通过动态传入字典(您可以从数据库中加载或根据需要加载字典)。
Dictionary<string, string> config = new Dictionary<string, string>();
config.Add("mode", "sandbox");
config.Add("account1.apiUsername", "jb-us-seller_api1.paypal.com");
config.Add("account1.apiPassword", "...");
config.Add("account1.apiSignature", "...");
PayPalAPIInterfaceService s = new PayPalAPIInterfaceService(config);
这很有趣,但是我在发布此问题后立即找到了解决方案:)因此,初始化自定义配置的正确方法是:
Dictionary<string, string> paypalConfig = new Dictionary<string, string>();
paypalConfig.Add("mode", "sandbox");
paypalConfig.Add("connectionTimeout", "30000");
paypalConfig.Add("requestRetries", "5");
paypalConfig.Add("IPAddress", "127.0.0.1");
paypalConfig.Add("account1.apiUsername", "***.gmail.com");
paypalConfig.Add("account1.apiPassword", "*******");
paypalConfig.Add("account1.apiSignature", "api signature here");
paypalConfig.Add("account1.applicationId", "app id here");
paypalConfig.Add("account1.signatureSubject", "");
paypalConfig.Add("account1.certificateSubject", "");
因此,我只需要在配置属性之前添加“ account1”前缀。
您应该在以下区域提供帐户凭据。更改。
aypalConfig.Add("apiUsername", "***.gmail.com");
paypalConfig.Add("apiPassword", "api password goes here");
paypalConfig.Add("apiSignature", "signature goes here");
paypalConfig.Add("applicationId", "sandbox app id");
转到您的开发者帐户。您将在此处获得必需的信息。
您可以通过测试帐户Paypal APIContext类具有字典Config来覆盖Paypal测试凭据,您可以在其中指定凭据,如下所示
APIContext apiContext = new APIContext(GetAccessToken());
apiContext.Config = GetConfig();
private static Dictionary<string, string> GetConfig()
{
Dictionary<string, string> configMap = new Dictionary<string, string>();
configMap.Add("mode", ConfigurationManager.AppSettings["mode"].ToString());
configMap.Add("account0.apiUsername",ConfigurationManager.AppSettings["apiUsername"].ToString());
configMap.Add("account0.apiPassword", ConfigurationManager.AppSettings["apiPassword"].ToString());
configMap.Add("account0.apiSignature", ConfigurationManager.AppSettings["apiSignature"].ToString());
configMap.Add("account0.apiCertificate", ConfigurationManager.AppSettings["apiCertificate"].ToString());
configMap.Add("account0.privateKeyPassword", ConfigurationManager.AppSettings["privateKeyPassword"].ToString());
configMap.Add("account0.subject", ConfigurationManager.AppSettings["subject"].ToString()); configMap.Add("account0.applicationId",ConfigurationManager.AppSettings["applicationId"].ToString());
return configMap;
}
我将密钥存储在Web配置中,您可以直接添加它们
我从网络配置文件中获得了另一种方法
<configSections>
<section name="paypal" type="PayPal.Manager.SDKConfigHandler, PayPalCoreSDK"/>
</configSections>
<!-- PayPal SDK config -->
<paypal>
<settings>
<add name="endpoint" value="https://api.sandbox.paypal.com"/>
<add name="connectionTimeout" value="360000"/>
<add name="requestRetries" value="1"/>
<add name="ClientID" value="AUSaZxBqv5PQ2eQ2XyNfhgo2- q_sf7WOKxoOgvbjP_y_KOy0fbKUYApiEZJE"/>
<add name="ClientSecret" value="EBDXUBA040ErNqIfDpvh1KZqSaRJhANQuQWl-OHtsSrhEa93o3GICa7WoyF-"/>
</settings>
<accounts>
<account apiUsername="rhealb_1340347945_biz_api1.gmail.com" apiPassword="1340347981" apiSignature="ATm0VCcoUsJbzRddp810M7zr08G.AAZF2y729RqpgeeyThP.1mI1qXYT"/>
</accounts>
设置部分是可选的。 我是第一次使用SDK,所以我真的不知道clientId和ClientSecret在哪里使用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.