如何解决尝试通过 PayPal API 上传文件但收到错误请求错误
我尝试通过 PayPal API (https://developer.paypal.com/docs/api/customer-disputes/v1/) 上传证据文件。我成功通过 cURL 请求上传文件:
curl -v -X POST \
-F 'file=@mao.pdf' \
-F 'input={"evidences":[{"evidence_type": "OTHER","evidence_info": {"tracking_info": [{"carrier_name": "FEDEX","tracking_number": "123456789"}]},"notes": "Test"}]};type=application/json' \
-H 'Content-Type: multipart/related; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
-H 'Authorization: Bearer xxxxxxxxxxxxxxx' \
https://api.sandbox.paypal.com/v1/customer/disputes/PP-D-47363/provide-evidence
上面的 cURL 效果很好! 但是当我将此 cURL 转换为常规获取请求时,我得到 400 - Bad Request 错误:
const body = new FormData();
body.append("file",fileBuffer,"@mao.pdf")
body.append("","\\")
body.append("input","{\"evidences\":[{\"evidence_type\": \"OTHER\",\"evidence_info\": {\"tracking_info\": [{\"carrier_name\": \"FEDEX\",\"tracking_number\": \"123456789\"}]},\"notes\": \"Test\"}]};type=application/json")
body.append("","\\")
fetch("https://api.sandbox.paypal.com/v1/customer/disputes/PP-D-47363/provide-evidence",{
body,headers: {
Authorization: `Bearer ${accessToken}`,"Content-Type": "multipart/related; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW"
},method: "POST"
})
.then(response => console.log(response));
表单数据的日志:
FormData {
_overheadLength: 457,_valueLength: 195,_valuesToMeasure: [],writable: false,readable: true,dataSize: 0,maxDataSize: 2097152,pauseStreams: true,_released: false,_streams: [
'----------------------------315582696200967347353818\r\n' +
'Content-Disposition: form-data; name="file"; filename="@mao.pdf"\r\n' +
'Content-Type: application/pdf\r\n' +
'\r\n',<Buffer 4d 4d 4d 4d 4d 4d 4d 4d 4d 4d 4d 4d 4d 4d 4d>,[Function: bound ],'----------------------------315582696200967347353818\r\n' +
'Content-Disposition: form-data; name=""\r\n' +
'\r\n','\\','----------------------------315582696200967347353818\r\n' +
'Content-Disposition: form-data; name="input"\r\n' +
'\r\n','{"evidences":[{"evidence_type": "OTHER","notes": "Test"}]};type=application/json',[Function: bound ]
],_currentStream: null,_insideLoop: false,_pendingNext: false,_boundary: '--------------------------315582696200967347353818'
}
PayPal 响应日志:
Response {
size: 0,timeout: 0,[Symbol(Body internals)]: {
body: PassThrough {
_readableState: [ReadableState],_events: [Object: null prototype],_eventsCount: 2,_maxListeners: undefined,_writableState: [WritableState],allowHalfOpen: true,[Symbol(kCapture)]: false,[Symbol(kTransformState)]: [Object]
},disturbed: false,error: null
},[Symbol(Response internals)]: {
url: 'https://api.sandbox.paypal.com/v1/customer/disputes/PP-D-44006/provide-evidence',status: 400,statusText: 'Bad Request',headers: Headers { [Symbol(map)]: [Object: null prototype] },counter: 0
}
}
这个请求有什么问题?
解决方法
如果没有您的实际请求数据和返回的实际错误的日志,任何人都很难获得具体的帮助,但最可能的问题是未能发送文件的正确元数据,或者它不在API 参考中记录的正确顺序(证据 JSON 对象然后是文件)。
有关如何使用文件元数据正确格式化多部分/请求帖子的文档和示例,请参阅 RFC 2387
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。