【发布时间】:2018-08-16 22:16:54
【问题描述】:
在 Javascript 中我有:
function authenticateAndFetch(payload) {
const endpoint = PropertiesService.getScriptProperties().getProperty('WEBHOOK_URL');
const hmac_key = PropertiesService.getScriptProperties().getProperty('HMAC_SHA_256_KEY');
var send_data = JSON.stringify(payload)
const signature = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, send_data)
.map(function(chr){return (chr+256).toString(16).slice(-2)})
.join(''); // Golf https://stackoverflow.com/a/49759368/300224
const fetch_options = {
'method': 'post',
'payload': {'gmail_details': send_data, 'signature': signature},
'muteHttpExceptions': true
};
const response = UrlFetchApp.fetch(endpoint, fetch_options);
return response.getContentText();
}
然后在 PHP 中,我使用以下方法进行验证:
$detailsString = $_POST['gmail_details'];
$correctSignature = md5($detailsString);
经过一些记录和漫长的一天,我发现 Javascript 和 PHP 会为包含这些数据的字符串生成不同的 md5 和:
HEX: 65 20 c2 97 20 44
有没有办法在将 Javascript 中的输入发送到 PHP 之前对其进行清理,或者有什么方法可以在两种环境中获取匹配的字符串?
【问题讨论】:
标签: javascript php google-apps-script