概述
我正在使用AgileCRM。当用户填写表单时,我想在这个CRM中创建新的联系人。我在PostMan中成功地做到了这一点。我试图从WIX做一个简单的“获取”请求,以便在进入我的POST请求之前能够理解VELO代码(创建联系人)。
问题
当我发出POST请求时,我得到了一个200状态,我得到了一个空的JSON作为响应,在我的请求头中说我的方法是一个GET,这不是我定义的方法。
问题
我在这里做错了什么,导致了一个空的响应和错误的方法?
设置
我的前端导入了一个后端函数,它处理基本的auth和获取。我是这样做的,就像当我从前端做这件事的时候,我遇到了一个CORS问题。
//agileapi.jsw
import {fetch} from 'wix-fetch';
import base64 from "nodejs-base64-encode";
import {getSecret} from 'wix-secrets-backend';
export async function getAPIKey() {
return await getSecret("AGILERESTAPI");
}
export async function getUsername() {
return await getSecret("AGILEUSERNAME");
}
let password = getAPIKey()
let username = getUsername()
let options = {
"method": "GET",
headers: {
"Authorization": 'Basic ' + base64.encode(username + ":" + password, 'base64'),
"Content-Type": "application/json",
}
}
let url = "https://photodynamic.agilecrm.com/dev/api/contacts";
export async function getContacts() {
await fetch(url, options)
.then( (response) => {
if(response.ok) {
return response.json()
}
else {
return Promise.reject('Fetch did not succeed');
}}
)
.then((json) => console.log(json))
.catch((err) => console.log(err));
}
//wix debug page code
import {getContacts} from 'backend/agileapi'
$w.onReady(function (){
$w("#getContacts").onClick( (event) => {
getContacts()
})
});发布于 2021-09-03 14:35:38
你得等到承诺兑现。代码中的密码和用户名--这不是一个字符串,而是一个承诺。
//agileapi.jsw
import { fetch } from 'wix-fetch';
import base64 from "nodejs-base64-encode";
import { getSecret } from 'wix-secrets-backend';
const url = "https://photodynamic.agilecrm.com/dev/api/contacts";
export async function getContacts() {
// Wait for until all promises to be fulfilled
const [password, username] = await Promise.all([
getSecret("AGILERESTAPI"),
getSecret("AGILEUSERNAME")
])
const options = {
method: "GET",
headers: {
// Now the password and username are the strings
"Authorization": 'Basic ' + base64.encode(username + ":" + password, 'base64'),
"Content-Type": "application/json",
}
}
// Returns the API result to client (browser)
return fetch(url, options)
.then((response) => {
if (response.ok) {
return response.json();
}
return Promise.reject('Fetch did not succeed');
});
}页面代码
import { getContacts } from 'backend/agileapi'
$w.onReady(function () {
$w("#getContacts").onClick((event) => {
getContacts()
.then((json) => {
// Your json
console.log(json);
})
.catch((error) => {
// Reason of error
console.log(error)
});
})
});发布于 2021-05-14 16:45:05
我解决了这个问题。rest默认返回xml。通过将以下内容添加到我的标题中,我可以将其格式化为JSON。
let options = {
"method": "GET",
headers: {
"Authorization": 'Basic ' + base64.encode(username + ":" + password, 'base64'),
"Content-Type": "application/json",
// added this to resolve the issue
"Accept": "application/json"
}
}此解决方案是特定于AgileCRM的,并且可能与您正在使用的API不同。希望我上面的代码能让其他人尝试用WIX进行API调用。
https://stackoverflow.com/questions/67536510
复制相似问题