将自签名证书添加到Netsuite https模块以访问第三方Web服务

时间:2018-11-19 18:16:40

标签: ssl netsuite suitescript2.0

有人知道如何使用Netsuite https模块将自签名证书文件(.pem或.pfx扩展名)附加到外部Web服务来创建请求吗?

我想使用地图/缩小脚本将发票自动报告给西班牙税务注册实体(SII)。我已使用POSTMAN和CURL命令行将生成的XML测试到SII Web界面中,并且Web服务收到了我的请求并返回了预期的XML响应。但是我无法使用N / https模块创建请求而获得相同的结果,这主要是因为我不知道如何随附有证书文件一起发送该请求。我的脚本失败,并显示一条消息:

“类型”:“ error.SuiteScriptError”,“名称”:“ SSS_CONNECTION_TIME_OUT”

这是我尝试过的代码:

var siiURL = 'https://www7.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP';

//get the content of the generated xml
var xml_content = getXMLContent(url);

//get the url of the certificate file that is saved in the NS file cabinet
var certificate = getClientCertificate();
log.audit({ title: 'Certificate File', details: certificate });
var headers = {
    'Content-Type': 'text/xml; charset=utf-8',
    'SOAPAction': 'SuministroLRFacturasEmitidas',
    'local_cert': certificate,
    'passphrase': '****'
};
var SIIresponse = https.post({ url: siiURL, body: xml_content, headers: headers });
log.audit({title: 'Response from SII', details: SIIresponse.code + ' | ' + SIIresponse.body });

示例代码段摘自PHP的一个帖子:https://es.stackoverflow.com/questions/77233/conectar-con-el-web-service-de-sii-aeat-soap-php

西班牙税收报告实体提供了一个pfx文件进行身份验证。出于测试目的,我使用以下帖子创建了一个PEM文件(cl和key以及捆绑的.pem文件):https://es.stackoverflow.com/a/131407/59793

我猜想Web服务在请求的标头中不希望证书文件,但是我不知道应将其放置在何处或是否有合适的标头密钥。另外,我找到了有关如何将.cert / .pem文件保存到Netsuite的信息,但据我所知,这是针对套件商务的。

https://noblue.co.uk/blog/netsuite-tips-installing-an-ssl-certificate-on-suitecommerce

感谢您的帮助或评论。

PD。请原谅任何语法错误或错字。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用N/https/clientCertificate模块:

define(['N/https/clientCertificate'], function (cert) {
         ....
         ....
         ....

         var siiURL = 'https://www7.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP';

         //get the content of the generated xml
         var xml_content = getXMLContent(url);

         var key = "certID";

         var headers = {
             'Content-Type': 'text/xml; charset=utf-8', // Use application/soap+xml instead??
             'SOAPAction': 'SuministroLRFacturasEmitidas'
         };

         var SIIresponse = cert.post({
               url: siiURL,
               certId: key,
               body: xml_content,
               headers: headers
         });

         log.audit({title: 'Response from SII', details: SIIresponse.code + ' | ' + SIIresponse.body });

         ....
         ....
         ....