是否可以使用 google 应用程序脚本将 POST 作为客户端?
Is it possible to make a POST as being on A client side using google app script?
作为标题,我目前正在开展一个项目,该项目要求我使用 Google 应用程序脚本连接到 third-party 付款 API。然而,技术支持说,经过所有的努力,我必须创建一个 CLIENT POST,而不是 SERVER POST。因此,可以使用 google 应用程序脚本作为客户端发出 post 请求。以下是我目前的脚本。
function ecpay_payment()
{
var payment_Object = {payment_data:[]};
payment_Object.payment_data.push({
'ChoosePayment':'CVS',
'EncryptType':"1" ,
'ItemName':'Test',
'MerchantID':'2000132',
'MerchantTradeDate':Utilities.formatDate(new Date(), "GMT+8", "yyyy/MM/dd HH:mm:ss"),
'MerchantTradeNo':'20210809002',
'PaymentType':'aio',
'ReturnURL':'https://script.google.com/macros/s/AKfycT5khFUkTbmLJWJXP9Y6sovFRJig/exec',
'TotalAmount':500,
'TradeDesc':'WriteAwayPLUS'
})
//'CheckMacValue':macvalue,
//JSON字串化(STRING)
var payment = JSON.parse(JSON.stringify(payment_Object.payment_data[0]));
var qs ;
for(var key in payment ) {
var value = payment[key];
qs += key + "=" + value + "&";
}
payment = qs.replace('undefined', '', );
//字串加KEY
payment = "Hashkey=5294y06JbISpM5x9&" + payment + "HashIV=v77hoKGq4kWxNNIS";
console.log(payment);// Success
//文字ENCODE
var payment= encodeURIComponent(payment);
//ENCODE不同點修正
payment = payment.replace('%7e', '~', );
payment = payment.replace('%27', "'", );
payment = payment.replace('%20', "+", );
//全文轉小寫
payment = payment.toLowerCase();
//加密
Hashvalue= Sha256Hash(payment);
//密文內容轉大寫
var macvalue = Hashvalue.toUpperCase();
//密文加入JSON
var payment_json = JSON.parse(JSON.stringify(payment_Object.payment_data[0]));
payment_json.CheckMacValue = macvalue;
var options = {
'method' : 'POST',
'contentType': 'application/x-www-form-urlencoded',
'payload' : payment_json
};
var resp= UrlFetchApp.fetch("https://payment-stage.ecpay.com.tw/Cashier/AioCheckOut/V5", options);
var code = resp.getResponseCode();
if (code >= 200 && code < 300)
{
//var ret = JSON.parse(resp.getContentText("utf-8"));
console.log(resp.getContentText("utf-8"));// Success
}
else if (code == 401 || code == 403)
{
maybeAuthorized = false;
return "error";
} else
{
console.error("Backend server error (%s): %s", code.toString(),resp.getContentText("utf-8"));
return "error";
}
//console.log(t);
var tempText = t.toLowerCase();
//tempText= tempText.toLowerCase();
//console.log(tempText);
tempText= Sha256Hash(tempText);
var macvalue = tempText.toUpperCase();
console.log(macvalue);
}
function formatDate(){
//= (current_datetime)=>{
var formatted_date= new Date();
var yyyy = formatted_date.getFullYear();
var MM = (formatted_date.getMonth()+1<10 ? '0' : '')+(formatted_date.getMonth()+1);
var dd = (formatted_date.getDate()<10 ? '0' : '')+formatted_date.getDate();
var h = (formatted_date.getHours()<10 ? '0' : '')+formatted_date.getHours();
var m = (formatted_date.getMinutes()<10 ? '0' : '')+formatted_date.getMinutes();
var s = (formatted_date.getSeconds()<10 ? '0' : '')+formatted_date.getSeconds();
formatted_date= (yyyy+"/"+MM+"/"+dd+" "+h+":"+m+":"+s);
return formatted_date;
}
POST 应该完成什么?如果你想重定向用户,就好像他们点击了一个表单,制作一个 <form>
并使用 JavaScript 或可点击的按钮触发提交操作。
如果您想停留在当前页面并只从浏览器(客户端)发出 asynchronous/XHR 请求,请使用 JavaScript Fetch API
如果您想在没有浏览器的情况下与该服务器通信,他们的支持会告诉您不要那样做因为您与之通信的任何端点都不是为此设计的。做一个 CLIENT post 需要一个浏览器用户代理(客户端)来实际制作 post.
作为标题,我目前正在开展一个项目,该项目要求我使用 Google 应用程序脚本连接到 third-party 付款 API。然而,技术支持说,经过所有的努力,我必须创建一个 CLIENT POST,而不是 SERVER POST。因此,可以使用 google 应用程序脚本作为客户端发出 post 请求。以下是我目前的脚本。
function ecpay_payment()
{
var payment_Object = {payment_data:[]};
payment_Object.payment_data.push({
'ChoosePayment':'CVS',
'EncryptType':"1" ,
'ItemName':'Test',
'MerchantID':'2000132',
'MerchantTradeDate':Utilities.formatDate(new Date(), "GMT+8", "yyyy/MM/dd HH:mm:ss"),
'MerchantTradeNo':'20210809002',
'PaymentType':'aio',
'ReturnURL':'https://script.google.com/macros/s/AKfycT5khFUkTbmLJWJXP9Y6sovFRJig/exec',
'TotalAmount':500,
'TradeDesc':'WriteAwayPLUS'
})
//'CheckMacValue':macvalue,
//JSON字串化(STRING)
var payment = JSON.parse(JSON.stringify(payment_Object.payment_data[0]));
var qs ;
for(var key in payment ) {
var value = payment[key];
qs += key + "=" + value + "&";
}
payment = qs.replace('undefined', '', );
//字串加KEY
payment = "Hashkey=5294y06JbISpM5x9&" + payment + "HashIV=v77hoKGq4kWxNNIS";
console.log(payment);// Success
//文字ENCODE
var payment= encodeURIComponent(payment);
//ENCODE不同點修正
payment = payment.replace('%7e', '~', );
payment = payment.replace('%27', "'", );
payment = payment.replace('%20', "+", );
//全文轉小寫
payment = payment.toLowerCase();
//加密
Hashvalue= Sha256Hash(payment);
//密文內容轉大寫
var macvalue = Hashvalue.toUpperCase();
//密文加入JSON
var payment_json = JSON.parse(JSON.stringify(payment_Object.payment_data[0]));
payment_json.CheckMacValue = macvalue;
var options = {
'method' : 'POST',
'contentType': 'application/x-www-form-urlencoded',
'payload' : payment_json
};
var resp= UrlFetchApp.fetch("https://payment-stage.ecpay.com.tw/Cashier/AioCheckOut/V5", options);
var code = resp.getResponseCode();
if (code >= 200 && code < 300)
{
//var ret = JSON.parse(resp.getContentText("utf-8"));
console.log(resp.getContentText("utf-8"));// Success
}
else if (code == 401 || code == 403)
{
maybeAuthorized = false;
return "error";
} else
{
console.error("Backend server error (%s): %s", code.toString(),resp.getContentText("utf-8"));
return "error";
}
//console.log(t);
var tempText = t.toLowerCase();
//tempText= tempText.toLowerCase();
//console.log(tempText);
tempText= Sha256Hash(tempText);
var macvalue = tempText.toUpperCase();
console.log(macvalue);
}
function formatDate(){
//= (current_datetime)=>{
var formatted_date= new Date();
var yyyy = formatted_date.getFullYear();
var MM = (formatted_date.getMonth()+1<10 ? '0' : '')+(formatted_date.getMonth()+1);
var dd = (formatted_date.getDate()<10 ? '0' : '')+formatted_date.getDate();
var h = (formatted_date.getHours()<10 ? '0' : '')+formatted_date.getHours();
var m = (formatted_date.getMinutes()<10 ? '0' : '')+formatted_date.getMinutes();
var s = (formatted_date.getSeconds()<10 ? '0' : '')+formatted_date.getSeconds();
formatted_date= (yyyy+"/"+MM+"/"+dd+" "+h+":"+m+":"+s);
return formatted_date;
}
POST 应该完成什么?如果你想重定向用户,就好像他们点击了一个表单,制作一个 <form>
并使用 JavaScript 或可点击的按钮触发提交操作。
如果您想停留在当前页面并只从浏览器(客户端)发出 asynchronous/XHR 请求,请使用 JavaScript Fetch API
如果您想在没有浏览器的情况下与该服务器通信,他们的支持会告诉您不要那样做因为您与之通信的任何端点都不是为此设计的。做一个 CLIENT post 需要一个浏览器用户代理(客户端)来实际制作 post.