【问题标题】:Using paypal SDK and custom configuration not from web.config使用非来自 web.config 的 paypal SDK 和自定义配置
【发布时间】:2013-06-01 00:27:03
【问题描述】:

我正在尝试将 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 消息“缺少凭据”。现在的问题是:如何正确初始化自定义配置?我应该使用什么键?我找不到有关此问题的任何信息。

【问题讨论】:

    标签: c# .net paypal


    【解决方案1】:

    PayPal 文档有时会激怒我。他们说“检查样本”,然后没有一个样本引用此构造函数!

    幸运的是他们确实解释了on this page

    ...或者,通过动态传递字典(您可以从 数据库或适合您的需要)。

    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);
    

    【讨论】:

    • 我意识到这与@cmd 的答案相同,但我想发布所需的正式清单。此处的 applicationId 似乎不需要基本操作 - 但如果您使用需要批准的高级 API,则可能是这样
    【解决方案2】:

    这很有趣,但我在发布此问题后立即找到了解决方案 :) 所以,初始化自定义配置的正确方法:

    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”前缀。

    【讨论】:

      【解决方案3】:

      您应该在以下区域提供您的帐户凭据。更改。

      aypalConfig.Add("apiUsername", "***.gmail.com");
      paypalConfig.Add("apiPassword", "api password goes here");
      paypalConfig.Add("apiSignature", "signature goes here");
      paypalConfig.Add("applicationId", "sandbox app id");
      

      转到您的开发者帐户。在这里您将获得所需的信息。

      【讨论】:

      • 嗨,Ehsan,感谢您的回复,但我已经知道我的帐户凭据。我在发布代码示例之前替换了它们。请参阅我自己的答案。
      • 很好,你得到了你的解决方案。做得好。如果我的回答对你有帮助或可能对其他人有帮助。请批准。谢谢。@cmd
      【解决方案4】:

      您可以通过您的测试帐户覆盖 Paypal 测试凭据 Paypal APIContext 类具有字典配置,您可以在其中指定凭据,如下所示

      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;
      }
      

      我将密钥存储在网络配置中,您可以直接添加它们

      我从网络配置文件中获得了另一种方法

      <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 在哪里使用

      【讨论】:

        猜你喜欢
        • 2013-08-23
        • 2015-02-16
        • 1970-01-01
        • 2015-03-07
        • 2011-06-17
        • 2014-04-18
        • 2021-12-18
        • 2013-06-11
        • 1970-01-01
        相关资源
        最近更新 更多