Paypal 争议 API 在发布文件时返回 INVALID_EVIDENCE_FILE

问题描述 投票:0回答:1

我正在尝试使用

/v1/customer/disputes/" + dispute.ID + "/provide-evidence
端点在 Paypal 沙箱中提交 PDF 文件作为争议证据。 无论我尝试什么,来自 Paypal 的错误消息都显示为:

INVALID_EVIDENCE_FILE

我在发布之前将

fileBytes
保存到磁盘,验证了它是有效的 PDF 文件,确实如此。 我也尝试过发送 JPG,但收到相同的错误。

Paypal 文档对这个问题没有太大帮助:
https://developer.paypal.com/docs/api/customer-disputes/v1/#disputes_provide-evidence

并且对于如何发布文档并没有真正提供任何帮助。 可能我没有正确提交数据,非常感谢您指出我可能做错了什么。

using (var httpClient = new HttpClient())
{
    httpClient.DefaultRequestHeaders.Authorization = AuthenticationHeaderValue.Parse($"Bearer {auth.access_token}");

    using (var request = new HttpRequestMessage(HttpMethod.Post, $"{BaseUrl()}" + path))
    {
        var form = new MultipartFormDataContent();

        dynamic p = new
        {
            evidences = new List<object>
            {

            }
        };
        string strData = JsonConvert.SerializeObject(p);

        var jsonPart = new StringContent(strData);
        jsonPart.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data");
        jsonPart.Headers.ContentType = new MediaTypeHeaderValue("application/json");
        form.Add(jsonPart);

        var byteContent = new ByteArrayContent(fileBytes, 0, fileBytes.Length);
        byteContent.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
        form.Add(byteContent, fileNameWithExtension);

        using (var response = await httpClient.PostAsync(request.RequestUri, form))
        {
            strResponse = await response.Content.ReadAsStringAsync();
            var statusCode = (int)response.StatusCode;
            if (statusCode is < 200 or >= 300)
            {
                throw new PaypalClientException(strResponse);
            }
        }
    }
}
c# asp.net file-upload paypal
1个回答
0
投票

根据PayPal的文档关于发送“客户纠纷”的“证据”,我认为发送的所有内容都应该是JSON结构,如下图所示,您的PDF文件的内容嵌入在其中“文档”部分作为“JSON.stringify()”字符串。

或者,如果该“证据”文件不是私有的,并且该公司有专用的站点和服务器,并且在安全性方面是可能的,则将该文件上传到您服务器上的某个位置,然后将包含“AccessID”的链接放在“文档”部分。例如如下:

"documents": [
    {
        "name": "Evidence_12.pdf", 
        "url": "https://example.com/PayPalEvidences/?EvidenceId=12&AccessId=3583597257053jjgfr766"
    }
]

值得注意的是,每个文档的内容不应超过10 MB,文档总大小不应超过50 MB。 从您的代码看来,您将 PDF 文件与 JSON 结构分开放入请求信息中。

因为发送“证据”的实际实现有不同的步骤,包括在 PayPal 中注册为开发人员,目前我还没有亲自测试过,但如果我在未来几天获得实用的 C# 代码,我会添加更多详细答案。

Evidence

© www.soinside.com 2019 - 2024. All rights reserved.