我正在尝试使用
/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);
}
}
}
}
根据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# 代码,我会添加更多详细答案。