0

我正在开发一个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);
4

1 回答 1

0

基于 Easy Digital Downloads 支持人员的一些帮助,此问题已得到解决。

这个问题与他们Software Licensing插件设置中的一个属性有关:“不检查 URL”。我没有启用它,结果是我的 API 调用Electron失败,而使用浏览器的调用成功,因为浏览器添加了 Electron 没有的标头。

启用“不检查 URL”后,从Electron工作中调用。我想还有一个传递 URL 的选项,但由于我使用 EDD 来授权桌面软件,这似乎不是一个需要的选项。

无论如何,希望这对某人有所帮助。

于 2020-01-06T21:29:31.590 回答