使用node.js发布Docusign的上线问题

时间:2019-04-26 14:21:38

标签: node.js docusignapi

这是我的问题:

  • 我们使用本教程https://github.com/docusign/docusign-node-client(在“ OAuth JSON Web令牌(JWT)授予”部分)中,将docusign与nodejs集成到了应用程序的服务器端中。
  • 我们已完成“上线流程”:我们的应用程序已在我们的生产帐户中注册
  • 我们已将测试配置替换为生产配置。
  • 当我们尝试创建信封时,出现以下错误: PARTNER_AUTHENTICATION_FAILED:找不到或禁用了指定的集成商密钥。为用户指定的帐户无效

我在做什么错了?

async function docusignInit() {
    var options;
    var env = [40077,50077].indexOf(config.main.port) != -1 ? 'test' :'prod';
    if (env == "test") {
        options = {
            basePath: restApi.BasePath.DEMO,
            oAuthBasePath: oAuth.BasePath.DEMO
        }
    } else {
        options = {
            oAuthBasePath: "account.docusign.com",
           // We called https://account.docusign.com/oauth/userinfo to found the uri
            basePath:"https://eu.docusign.net/restapi/"
        }
    }
    // in production, We must do
    // var apiClient = new docusign.ApiClient(options.basePath);
    // Otherwise, we get "Error: getaddrinfo ENOTFOUND undefined undefined:443"
    var apiClient = new docusign.ApiClient(options.basePath);
    var privateKeyFile = fs.readFileSync(`./server/docusign/keys/${env}/private.PEM`);
    var res = await apiClient.requestJWTUserToken(config.docusign.integratorKey, config.docusign.userName, [oAuth.Scope.IMPERSONATION, oAuth.Scope.SIGNATURE], privateKeyFile, 3600)
    var token = res.body.access_token;
    apiClient.addDefaultHeader('Authorization', 'Bearer ' + token);
    docusign.Configuration.default.setDefaultApiClient(apiClient);
    await sendDocusign({
        userId: 1,
        firstName: 'foor',
        lastName: 'bar',
        email:'foo@bar;'
    })
}


async function sendDocusign(role) {

    var envDef = new docusign.EnvelopeDefinition();
    envDef.emailSubject = 'Please signe this';
    envDef.templateId = config.docusign.templateId;

    var role = new docusign.TemplateRole();
    role.roleName = "roleName";
    role.clientUserId = role.userId;
    role.name = role.firstName + " " + role.lastName;
    role.email = role.email;

    envDef.allowReassign = false;
    envDef.templateRoles = [role];
    envDef.status = 'sent';

    var envelopesApi = new docusign.EnvelopesApi();
    return await envelopesApi.createEnvelope(config.docusign.userAccountId, {
        'envelopeDefinition': envDef
    })
}

2 个答案:

答案 0 :(得分:0)

考虑到您的错误,似乎是您缺少了integratorKey或以wrontg方式编写了它。根据{{​​3}},您可能会错过解释器键内的括号吗?

  

必须将集成商密钥放在以下用户ID的前面   UsernameToken的Username节点。集成商密钥必须为   用方括号“ [和]”包裹。

上述文档中的api示例:

<soap:Header>
   <wsa:Action>http://www.docusign.net/API/3.0/GetRecipientEsignList</wsa:Action>
   <wsa:MessageID>uuid:3f9d7626-c088-43b4-b579-2bd5e8026b17</wsa:MessageID>
   <wsa:ReplyTo>
      <wsa:Address>http://schemas.xmlsoap.org/ws/2004/03/addressing/role/anonymous</wsa:Address>
   </wsa:ReplyTo>
   <wsa:To>http://demo.docusign.net/api/3.0/api.asmx</wsa:To>
   <wsse:Security soap:mustUnderstand="1">
      <wsu:Timestamp wsu:Id="Timestamp-8838aa24-9759-4f85-8bf2-26539e14f750">
         <wsu:Created>2006-04-14T14:29:23Z</wsu:Created>
         <wsu:Expires>2006-04-14T14:34:23Z</wsu:Expires>
      </wsu:Timestamp>
      <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="SecurityToken-7c7b695e-cef7-463b-b05a-9e133ea43c41">
         <wsse:Username>[Integrator Key Here]2988541c-4ec7-4245-b520-f2d324062ca3</wsse:Username>
         <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>
         <wsse:Nonce>SjlScsL5q3cC1CDWrcMx3A==</wsse:Nonce>
         <wsu:Created>2006-04-14T14:29:23Z</wsu:Created>
      </wsse:UsernameToken>
   </wsse:Security>
</soap:Header>

答案 1 :(得分:0)

由于您可以使用PROD RSA KeyPair在PROD中正确生成AccesToken,因此请检查用于进行API调用以创建信封的端点。在演示中,它始终为demo.docusign.net,但在PROD中,它将是不同的值,具体取决于您的PROD帐户在DocuSign数据中心中的位置。例如,如果您的PROD帐户位于NA1中,则主机名将为www.docusign.net;如果它是NA2,则主机名将为na2.docusign.net等。

因此,建议使用Access令牌进行/ userinfo API调用,以了解要进行与信封相关的调用的baseURI。要获取基本URI,请调用/ oauth / userinfo端点,并提供应用程序的访问令牌作为标头。

与/ userinfo API调用相关的文档可以在here中找到。知道BaseURI之后,然后将此baseURI附加与信封相关的端点,如下所示:

{base_uri} + "/restapi/v2.1/accounts/" + {account_id}