【发布时间】: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