【问题标题】:docusign apiexception invalid_request error while requesting server请求服务器时docusign apiexception invalid_request错误
【发布时间】:2021-07-02 23:58:58
【问题描述】:

继续创建最简单的基线 DocuSign 签名项目,以便我们可以将 DocuSign 功能集成到更大的应用程序中。据我了解,我创建了一个新的 C# .net 核心 Web 应用程序,并从 C# Quickstart 示例项目中引入了 SDK 调用。

我使用与 QuickStart 项目相同的集成密钥,并已将 URL 添加到 DocuSign 仪表板中的新应用程序。我现在可以从https://account-d.docusign.com/oauth/auth 获得重定向。我将 private.key 从 QuickStart 复制到我的项目中。当我尝试在 RequestItemService/UpdateUserFromJWT 中复制 ApiClient 调用时,我现在收到以下错误。

HomeController 代码:

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using DocuSign.eSign.Api;
using DocuSign.eSign.Model;
using DocuSign.eSign.Client;
using System.Text;
using DocusignStart.Common;
using System.Security.Claims;
using static DocuSign.eSign.Client.Auth.OAuth;
using static DocuSign.eSign.Client.Auth.OAuth.UserInfo;

namespace DocusignStart.Controllers
{
public class HomeController : Controller
{
    protected IRequestItemsService RequestItemsService { get; }
    protected static ApiClient _apiClient;
    public HomeController(IRequestItemsService requestItemsService)
    {
        RequestItemsService = requestItemsService;
        _apiClient = new ApiClient();
        ViewBag.title = "Signing request by email";
    }

    public IActionResult Index()
    {
        // ClientId is the integration key on the DocuSign dashboard
        string ClientId = "xxxxxxxx";
        string AuthorizationEndpoint = "https://account-d.docusign.com/oauth/auth";
        string AppUrl = "https://localhost:44340";

        string scopes = "signature impersonation";

        string DocuSignAuthUrl = AuthorizationEndpoint + "?response_type=code" +
                        "&scope=" + scopes +
                        "&client_id=" + ClientId +
                        "&redirect_uri=" + AppUrl + "/home/loggedin?authType=JWT";

        return Redirect(DocuSignAuthUrl);
    }

    public IActionResult LoggedIn(string authType)
    {
        string ClientId = "xxxxxxxxx";
        string ClientSecret = "xxxxxxxxxxxxxxxx";
        string TokenEndpoint = "https://account-d.docusign.com/oauth/token";
        string UserInformationEndpoint = "https://account-d.docusign.com/oauth/userinfo";
        string RoomsApiEndpoint = "https://demo.rooms.docusign.com";
        string SignerEmail = "example.com";
        string SignerName = "User";
        string GatewayAccountId = "{GATEWAY_ACCOUNT_ID}";
        string GatewayName = "TestApplication";
        string GatewayDisplayName = "TestApplication";
        string ImpersonatedUserId = "xxxxxxxxxxxxxxxxxxxx";
        string AuthServer = "account-d.docusign.com";
        string PrivateKeyFile = "private.key";
        List<string> scopes = new List<string>
            {
                "signature",
                "impersonation",
            };

        OAuthToken _authToken;
        
        Account _account;

        _authToken = _apiClient.RequestJWTUserToken(
            ClientId, ImpersonatedUserId, AuthServer,
            DSHelper.ReadFileContent(DSHelper.PrepareFullPrivateKeyFilePath(PrivateKeyFile)), 1, scopes);
        _account = GetAccountInfo(_authToken);


        var identity = HttpContext.User.Identity as ClaimsIdentity;
        bool auth = identity.IsAuthenticated;

        var accessToken = RequestItemsService.User.AccessToken;
        var basePath = "https://demo.docusign.net" + "/restapi";
        var accountId = RequestItemsService.Session.AccountId;

        // Call the Examples API method to create and send an envelope via email
        var envelopeId = SendEnvelopeViaEmail(SignerEmail, SignerName, accessToken, basePath, accountId, "Incomplete");

        //RequestItemsService.EnvelopeId = envelopeId;


        return View();
    }

    public static string SendEnvelopeViaEmail(/* same as original */)
    {
        // same as original
    }

    private static byte[] document1(string signerEmail, string signerName)
    {
        /// same as document1
    }

    private Account GetAccountInfo(OAuthToken authToken)
    {
        string AuthServer = "account-d.docusign.com";

        _apiClient.SetOAuthBasePath(AuthServer);
        DocuSign.eSign.Client.Auth.OAuth.UserInfo userInfo = _apiClient.GetUserInfo(authToken.access_token);
        Account acct = userInfo.Accounts.FirstOrDefault();
        if (acct == null)
        {
            throw new Exception("The user does not have access to account");
        }

        return acct;
    }
}
}

【问题讨论】:

    标签: docusignapi


    【解决方案1】:

    答案实际上是微不足道的。在复制和粘贴 ImpersonatedUserId 时,在 ' - ' 字符之间添加了空格,即“xxxx-xxx-xxxx”变成了“xxxx - xxx - xxxx”。删除这些空格可解决此问题。

    【讨论】:

      猜你喜欢
      • 2020-11-18
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多