我正在将OpenPay支付网关集成到我们的应用程序之一。在进行测试时,它需要一个名为“deviceDataId”的东西,可以使用OpenPay JavaScript库(https://github.com/open-pay/openpay-js)生成。应在客户端的浏览器中生成此值。
var deviceDataId = OpenPay.deviceData.setup("formId");
但我需要在我的Java应用程序中运行它来测试我的实现。所以我使用以下代码从我的Java应用程序运行这个Js文件。
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
engine.eval(new BufferedReader(new FileReader(JsTest.class.getClassLoader().getResource("openpay-data.v1.js").getFile())));
Invocable inv = (Invocable) engine;
inv.invokeFunction("OpenPay.deviceData.setup");
当我运行此代码时,它会给我以下错误。
Exception in thread "main" javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "window" is not defined. (<Unknown source>#698) in <Unknown source> at line number 698
at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:110)
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:232)
at com.chathura.JsTest.main(JsTest.java:13)
我在这里搜索类似的错误,发现错误的发生是因为从服务器端运行它时没有“文档”对象。
Executing javascript in java - Opening a URL and getting links
因此,编辑并重新编写此JS库以删除所有客户端依赖项,是否有任何方法可以在服务器上运行时模拟该“文档”对象?可能是我可以包含在该JS文件之上的代码块吗?