我正在开发一个Electron
应用程序并尝试集成Easy Digital Downloads
软件许可WordPress 插件。我在 Electron/Javascript 中的通信方面做得不多,HTTP
所以这可能是一个幼稚的问题。
问题:我能够从我的 EDD 服务器获得许可证激活响应,虽然没有特定错误,但由于某种原因未激活许可证。奇怪的是,如果我在具有相同数据的浏览器中使用 URL 和查询字符串,插件会按预期响应:我可以激活、停用和检查许可证的状态。
所以 EDD 似乎正在工作,并且 Electron 没有错误。但是缺少一些东西。最初我使用的是net Electron 模块,但在出现此问题后,我切换到使用来自 EDD(如下)的示例脚本,该脚本使用XMLHttpRequest
. 有了这个,我得到了以下回复:
{"success":true,"license":"valid","item_id":539,"item_name":"My Awesome App","license_limit":1,"site_count":0,"expires":"2020- 12-19 23:59:59","activations_left":1,"checksum":"f2d66c6844b37d1fa931b813c408", "payment_id":248,"customer_name":"Marvin Gardens","customer_email":"marvin@home.com" "price_id":false}
除了“activations_left”:1永远不会改变并且应该给出“license_limit”:1之外,这很好。所以出了点问题。
另一方面,如果我在浏览器中使用带有查询字符串的 URL,则“activations_left”会递减,并且许可证激活只能工作一次(应该如此)。例如,这有效:
http://YOURSITE.com/?edd_action=activate_license&item_id=8&license=cc22c1ec86304b36883440e2e84cddff&url=http://licensedsite.com
我的问题:这两种方法之间有什么根本区别吗?有什么我需要添加到我的XMLHttpRequest
吗?我有一张 EDD 的支持票,但我需要继续前进。很抱歉这么啰嗦!
更新:
@aw04 建议我尝试使用GET
——刚刚尝试过,我“得到”与以前相同的响应:没有错误但也没有激活。
是否有一些属性应该(或不应该Electron
)在默认情况下在浏览器请求中(或不是)的请求中?
xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
if (this.readyState === XMLHttpRequest.DONE && this.status === 200) {
console.log('xhttp.responseText', xhttp.responseText);
}
}
var url = "http://YOURSITE.com/?edd_action=activate_license&item_id=8&license=cc22c1ec86304b36883440e2e84cddff"
xhttp.open("GET", url);
xhttp.send();
var xhttp = new XMLHttpRequest();
var postUrl = 'http://<domain.com>/edd-sl/';
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
console.log(xhttp.responseText);
}
}
var data = {
edd_action: 'check_license',
license: '<license key>',
item_name: encodeURIComponent('<item name>'),
};
xhttp.open("POST", postUrl, true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.setRequestHeader("Access-Control-Allow-Origin", "http://local.dev");
var values = '';
for (var key in data){
values += key + '=' + data[ key ] + '&';
}
values = values.substring(0, values.length - 1);
xhttp.send(values);