我正在尝试使用AWS Lambda函数作为调度代理来将定期付款发布到付款api(USIO)。用于发出发布请求的函数如下:
const doPostRequest = async (data) => {
return new Promise((resolve, reject) => {
const options = {
host: "api.securepds.com",
path: "/2.0/payments.svc/JSON/SubmitTokenPayment",
method: 'POST',
headers: {
'Content-Type': 'https://application/json',
'Access-Control-Allow-Origin': '*',
}
};
//create the request object with the callback with the result
const req = https.request(options, (res) => {
res.setEncoding('utf8');
resolve(JSON.stringify(res.statusCode));
});
// handle the possible errors
req.on('error', (e) => {
reject(e.message);
});
console.log(req)
//do the request
req.write(JSON.stringify(data));
//finish the request
req.end();
});
};
其中数据是这样的对象:
var obj = `{"MerchantID":"${merchantId}",
"Login":"${merchantLogin}",
"Password":"${merchantPassword}",
"Token": "${token}",
"Amount": "${result.Items[i]['amount']}"
和post函数的调用方式如下:
await doPostRequest(obj)
.then(result => console.log(`Status code: ${result}`))
.catch(err => console.log(`Error doing the request for the event: ${JSON.stringify(event)} => ${err}`));
尽管验证obj输入都是有效的,但是在发出POST请求时,我仍然收到记录的“状态码:404”。没有将任何VPC添加到lambda函数。
我是不熟悉通过lambda进行api调用的人,但是在使用其他api地址测试该功能时能够接收到200状态代码。想知道在这种情况下可能导致404状态代码的原因!
答案 0 :(得分:0)
不确定您是否仍然有问题,但是JSON可能无效。
当我尝试在JSONLint上验证JSON时,它以失败告终,因为它期望结尾处有额外的}
。
当我摘下单个'
并在末尾添加了括号时,下面的格式已经过验证。
{
"MerchantID": "${merchantId}",
"Login": "${merchantLogin}",
"Password": "${merchantPassword}",
"Token": "${token}",
"Amount": "${result.Items[i]['amount']}"
}
您可以找到指向JSONLint here的链接。
如果仍然存在问题,您能否在将JSON发送到端点时发送JSON?另外,您要呼叫哪个端点?