【问题标题】:Error to Post xml via HTTPS to Paypal Reporting API using .net使用 .net 通过 HTTPS 将 xml 发布到 Paypal 报告 API 时出错
【发布时间】:2014-11-27 22:11:58
【问题描述】:

您好,我正在尝试使用 .Net 通过 HTTPS 将以下 xml 发布到 PayPal 报告引擎。我正在尝试使用 .net 以编程方式生成贝宝报告。我检查了 PayPal 报告 API 的文档并在 xml 文件下面创建。我想将此 XML 发布到贝宝以生成报告。请求的内容/类型应该是文本/纯文本。但是我收到异常抛出的消息,我试图捕捉异常但无法做到这一点。如果我更改程序,我不会收到任何响应,并且根据 PayPal 文档响应将是包含状态代码的 xml 文件。

DailyActivity.xml

<?xml version="1.0" encoding="UTF-8"?>
<reportingEngineRequest>
<authRequest>

<vendor>**</vendor>
<partner>**</partner>
<password>**</password>
</authRequest>
<runReportRequest>
<reportName>DailyActivityReport</reportName>
<reportParam>
<paramName>report_date</paramName>
<paramValue>2007-10-10</paramValue>
</reportParam>
<pageSize>50</pageSize>
</runReportRequest>
</reportingEngineRequest>

我的 C# 代码如下

  using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  using System.Threading.Tasks;
   using System.Net.Http;
  using System.Net.HttpWebRequest;

  namespace RunPaypalReport
  {
   class Program
   {
     static void Main(string[] args)
    {
        string URL = "https://payments-reports.paypal.com/test-reportingengine";
        string filename = "report.xml";
        try
        {
            WebRequest request = WebRequest.Create(URL);

            //Set values for the request back
            request.Method = "POST";
            request.ContentType = "text/plain";
            string postdata = GetTextFromXMLFile(filename);
            Console.Write(postdata);
            //   byte[] byteArray = Encoding.Default.GetBytes(postdata);
            byte[] bytes = System.Text.Encoding.ASCII.GetBytes(postdata);
            request.ContentLength = bytes.Length;

            using (Stream os = request.GetRequestStream())
            {
                os.Write(bytes, 0, bytes.Length);
            }

            using (System.Net.WebResponse response = request.GetResponse())
            {
                if (response == null)
                    return;

                    using (System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream()))
                    {
                        string post = sr.ReadToEnd().Trim();

                        Console.Write(post);
                        sr.Close();
                        return;
                    }

            }
        }

        catch (Exception e)
        {
            Console.Write(e.Message);
        }
    }

    private static string GetTextFromXMLFile(string file)
    {
      StreamReader reader = new StreamReader(file);
      string ret = reader.ReadToEnd();
      reader.Close();
    // Console.Write(ret);
      return ret;
    }       }
  }

【问题讨论】:

    标签: .net xml paypal xmlhttprequest


    【解决方案1】:

    终于收到回复了。错误出现在 XML 文件中。我们需要在请求 xml 中添加用户,用户应该是您的商家登录。通过添加用户,我收到了一个 xml 响应。 下面是更新的 XML

      <?xml version="1.0" encoding="utf-8" ?>
      <reportingEngineRequest>
      <authRequest>
      <user>Vendor/MerchantID</user>
      <vendor>Vendor/MerchantID</vendor>
      <partner>********</partner>
      <password>*******</password>
      </authRequest>
      <runReportRequest>
      <reportName>DailyActivityReport</reportName>
      <reportParam><paramName>report_date</paramName>
      <paramValue>2014-10-02</paramValue>
      </reportParam>
      <pageSize>50</pageSize>
      </runReportRequest>
      </reportingEngineRequest>
    

    【讨论】:

      【解决方案2】:

      request 对象需要使用 PayPal 报告端点 URL 创建:

      Live: https://payments-reports.paypal.com/reportingengine
      Test: https://payments-reports.paypal.com/test-reportingengine
      

      参考PayPal Reporting Guide

      试试这个:

      static void Main(string[] args)
      {
          try
          {
              var liveEndpointUrl = "https://payments-reports.paypal.com/reportingengine";
              var testEndpointUrl = "https://payments-reports.paypal.com/test-reportingengine";
      
              var request = System.Net.WebRequest.Create(testEndpointUrl);
              request.Method = "POST";
              request.ContentType = "application/x-www-form-urlencoded";
      
              UTF8Encoding encoder = new UTF8Encoding();
              byte[] data = encoder.GetBytes("report.xml");
              request.ContentLength = data.Length;
              var reqStream = request.GetRequestStream();
              reqStream.Write(data, 0, data.Length);
              reqStream.Close();
              var response = request.GetResponse();
              var reader = new System.IO.StreamReader(response.GetResponseStream());
              var str = reader.ReadToEnd();
              reader.Close();
              response.Close();
              Console.WriteLine(str);
          }
          catch (Exception ex)
          {
              Console.WriteLine("ERROR: " + ex.Message);
          }
      }
      

      【讨论】:

      • 感谢您的回复。错误地我忘记在 C# 代码中添加该行的 URL。我试过了,但还是不行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 2019-08-26
      • 2016-03-12
      • 2014-01-25
      • 1970-01-01
      相关资源
      最近更新 更多