簡體   English   中英

如何使用 restlet 而不是 suitetalk 成功地將服務與 .netsuite 集成?

[英]How can I successfully integrate a service with netsuite using a restlet instead of suitetalk?

我有一個非常(令人尷尬的基本)內置的 restlet in.netsuite,它調用我們公司用來銷售數字產品的外部 API。 現在它只是部署在一個模擬賬戶中,但最終它會在我們的產品中使用。 但是現在我迷路了,看不到將其部署到任何地方的鏈接。 我知道我也必須創建一個客戶端腳本,但我不確定為什么,所以如果有人能向我解釋一下,那會很有幫助。 基本上,我們認為沒有必要使用 suitetalk,因為我們只使用該公司的 api 的一個電話。我也是 javascript 的新手,所以我真的需要一些幫助。 我需要將外部公司的 API 密鑰塞進去。 這家外部公司將只接受 XML 作為發布請求的格式,但我認為 NS 不允許在 restlets 中這樣做,因為它說 json 或純文本。 有人可以告訴我是否可以這樣做,以及如何改進這段代碼? NS 文檔似乎幾乎是故意含糊不清的,而且我使用它並沒有走得太遠。

/**
 * @NApiVersion 2.0
 * @NScriptType Restlet
 * @NModuleScope SameAccount
 */
define(['N/https'],function(https){
      function postRequest(params){
        var headersObj = {
          name:'Content-Type',
          value:'application/json',
          sku: 'abcde',
          'license-type': 'xxxxx',
          'num-codes': 1,
          'online-license-type': 'numdays',
          'online-num-days': 365
        };


        const headerArray = ["X-[outsidecompany]-API-Key: ABCDEFG"];

        var apiResponse = https.post({
          url:'https://api.[outsidecompany].com/v3/codes.xml',
          headers:headersObj
          //body:headerArray
        });
        log.debug('apiResponse',JSON.stringify(apiResponse));
        return apiResponse;
      }

      return {
        'post':postRequest
      }
      });

我試圖將所有內容都轉換為 XML,但 NS 出於某種原因無法識別它 - 顯然它只能用於 GET,但 API 僅接受 XML 用於 POST。 我很容易做錯事。 我想實現一個 api 調用,當客戶從我們的電子商務網站訂購特定的數字商品時,我們可以使用它,這樣我們就可以在他們結賬時創建並在商品記錄中准備好代碼。

您可以從 RESTlet 執行此操作

首先,您可能希望將 https.createSecureString 方法與 NetSuite 中的 API Secrets 功能結合使用,以存儲這些秘密憑證並將它們傳遞到您的 API 調用中。

其次,RESTlets 可以與 XML 一起工作,甚至還有一個方便的“N/xml”庫可以用來幫助解析它。

/**
 * @NApiVersion 2.0
 * @NScriptType Restlet
 * @NModuleScope SameAccount
 */
define(['N/https'],function(https){
      function postRequest(params){
        var headersObj = {
          name:'Content-Type',
          value:'application/json',
          sku: 'abcde',
          'license-type': 'xxxxx',
          'num-codes': 1,
          'online-license-type': 'numdays',
          'online-num-days': 365,
          // custsecret_apikey is defined in an API secret and referenced here securely
          'X-[outsidecompany]-API-Key': https.createSecureString({input: '{custsecret_apikey}'}),
        };

        // XML is defined as a string here
        var myXMLData = "";

        var apiResponse = https.post({
          url:'https://api.[outsidecompany].com/v3/codes.xml',
          headers: headersObj
          body: myXMLData // this must be a string
        });
        
        if (apiResponse.code == 200) {
          log.debug({title: "response", details: apiResponse.body});
        } else {
          // do something else
        }

        return JSON.stringify(apiResponse);
      }

      return {
        post: postRequest
      };
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM