继续我的旅程,创建最简单的基线 DocuSign 电子签名项目,以便我们可以将 DocuSign 功能集成到更大的应用程序中。我创建了一个新的 C# .net 核心 Web 应用程序,并从 C# 快速入门示例项目中引入了 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;
}
}
}
答案 0 :(得分:0)
答案其实很简单。复制粘贴 ImpersonatedUserId 时,' - ' 字符之间添加了空格,即“xxxx-xxx-xxxx”变成了“xxxx - xxx - xxxx”。删除这些空格解决了这个问题。