我正在尝试使用moneybird api(documentation)通过XHR发布方法将收据上载到我的帐户。 我的连接工作正常,但是我似乎无法弄清楚(经过大量的搜索并查看了实际示例之后)如何将帖子的cURL数据部分解析为JavaScript兼容的部分(如果我是json,我正确吗?)。
这是moneybird在其文档中提供的示例:
curl -s -H "Content-Type: application/json" -H "Authorization: Bearer 84ec207ad0154a508f798e615a998ac1fd752926d00f955fb1df3e144cba44ab" \
-XPATCH \
-d '{"receipt":{"details_attributes":{"0":{"id":226902553790514831,"description":"updated description","price":20}}}}' \
https://moneybird.com/api/v2/123/documents/receipts/226902553785271950.json
这是我需要以某种方式解析/转换的部分:'{"receipt":{"details_attributes":{"0":{"id":226902553790514831,"description":"updated description","price":20}}}}' \
要适合我的JavaScript代码:
var XMLHttpRequest = require('xhr2');
var request = new XMLHttpRequest();
request.open('POST', 'https://moneybird.com/api/v2/myId/documents/receipts');
request.setRequestHeader('Authorization', 'Bearer myApiKey');
request.setRequestHeader('Content-Type', 'application/json');
request.setRequestHeader('Accept', 'application/json');
request.onreadystatechange = function () {
if (this.readyState === 4) {
console.log('Status:', this.status);
console.log('Headers:', this.getAllResponseHeaders());
console.log('Body:', this.responseText);
}
};
var body = "cURL/converted json has to be in this place"
request.send(body);
如果有帮助,文档中也有一个红宝石示例,但是由于我对这种语言不熟悉,所以对我没有太大帮助。
尽管它可以在网站上运行,但我更喜欢使用JavaScript,但是如果您有其他/更好的解决方案,我很乐意尝试。
答案 0 :(得分:0)
示例中提供的cURL数据结构在格式化为JSON时如下所示:
{
"receipt":{
"details_attributes":{
"0":{
"id":226902553790514831,
"description":"updated description",
"price":20
}
}
}
}
我假设您需要使用要发布的正确值填充ID,说明和价格。如果您需要发布多个订单项,则可以在“ details_attributes”对象中添加其他条目。如下所示:
{
"receipt":{
"details_attributes":{
"0":{
"id":226902553790514831,
"description":"updated description",
"price":20
},
"1":{
"id": "Another ID",
"description":"Another Description",
"price": "Another Price"
}
}
}
}
一旦在body变量中定义了有效负载,就需要将其转换为JSON字符串,然后使用XHR.send()将其发布,如下所示:
request.send(JSON.stringify(body));
我还建议您研究“ fetch”或“ axios”之类的内容,以简化请求流程。
最后快速阅读文档,您还需要更改Moneybird的API端点,使其包含“ .json”
var myId = 123;
request.open('POST', `https://moneybird.com/api/v2/${myId}/documents/receipts.json`);