Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Adobe Sign(echo Sign)API使用C发送文档#_C#_Api_Asp.net Web Api_Restsharp_Echosign - Fatal编程技术网

C# Adobe Sign(echo Sign)API使用C发送文档#

C# Adobe Sign(echo Sign)API使用C发送文档#,c#,api,asp.net-web-api,restsharp,echosign,C#,Api,Asp.net Web Api,Restsharp,Echosign,好的,我对使用API的理解有限 我正在努力掌握Adobe Sign API,但遇到了一个死胡同,在那个测试页面上我输入了这个,它可以正常工作 但我不知道如何在C#中做到这一点 我尝试了以下内容,但知道它缺少OAuth的东西,我只是不知道下一步该尝试什么。 顺便说一下,foo.GetAgreementCreationInfo()刚刚得到屏幕截图中的字符串,我只是把它移了出来,因为它又大又丑 var foo = new Models(); var client = new RestClient("

好的,我对使用API的理解有限

我正在努力掌握Adobe Sign API,但遇到了一个死胡同,在那个测试页面上我输入了这个,它可以正常工作

但我不知道如何在C#中做到这一点

我尝试了以下内容,但知道它缺少OAuth的东西,我只是不知道下一步该尝试什么。 顺便说一下,foo.GetAgreementCreationInfo()刚刚得到屏幕截图中的字符串,我只是把它移了出来,因为它又大又丑

var foo = new Models();
var client = new RestClient("https://api.na1.echosign.com/api/rest/v5");
// client.Authenticator = new HttpBasicAuthenticator(username, password);
var request = new RestRequest("agreements/{AgreementCreationInfo}", Method.POST);
request.AddParameter("name", "value"); // adds to POST or URL querystring based on Method
request.AddUrlSegment("AgreementCreationInfo",                     foo.GetAgreementCreationInfo()); // replaces matching token in request.Resource
IRestResponse response = client.Execute(request);
var content = response.Content; // raw content as string

您误解了API文档。API中需要的
Access Token
参数显然是HTTP头,而
AgreementCreationInfo
只是JSON格式的请求主体。没有URI段,请按如下方式重写代码:

var foo = new Models();
//populate foo
var client = new RestClient("https://api.na1.echosign.com/api/rest/v5");
var request = new RestRequest("agreements", Method.POST);
request.AddHeader("Access-Token", "access_token_here!");
// request.AddHeader("x-api-user", "userid:jondoe"); //if you want to add the second header
request.AddParameter("application/json", foo.GetAgreementCreationInfo(), ParameterType.RequestBody);

IRestResponse response = client.Execute(request);
var content = response.Content;
还请注意,在RESTSharp中,根本不需要手动将身体序列化为JSON。如果您创建的强类型对象(或者只创建一个匿名对象就足够了)与最终JSON具有相同的结构,RESTSharp将为您序列化它

为了获得更好的方法,我强烈建议您更换这一行:

request.AddParameter("application/json", foo.GetAgreementCreationInfo(), ParameterType.RequestBody);
其中:

request.RequestFormat = DataFormat.Json;
request.AddBody(foo);
假设您的
foo
对象属于
Models
类型,并且具有以下结构及其属性:

public class Models
{
    public DocumentCreationInfo documentCreationInfo { get; set; }
}

public class DocumentCreationInfo
{
    public List<FileInfo> fileInfos { get; set; }
    public string name { get; set; }
    public List<RecipientSetInfo> recipientSetInfos { get; set; }
    public string signatureType { get; set; }
    public string signatureFlow { get; set; }
}

public class FileInfo
{
    public string transientDocumentId { get; set; }
}

public class RecipientSetInfo
{
    public List<RecipientSetMemberInfo> recipientSetMemberInfos { get; set; }
    public string recipientSetRole { get; set; }
}

public class RecipientSetMemberInfo
{
    public string email { get; set; }
    public string fax { get; set; }
}
公共类模型
{
公共文档CreationInfo DocumentCreationInfo{get;set;}
}
公共类文档CreationInfo
{
公共列表文件信息{get;set;}
公共字符串名称{get;set;}
公共列表recipientSetInfos{get;set;}
公共字符串signatureType{get;set;}
公共字符串signatureFlow{get;set;}
}
公共类文件信息
{
公共字符串transientDocumentId{get;set;}
}
公共类RecipientSetInfo
{
公共列表recipientSetMemberInfos{get;set;}
公共字符串recipientSetRole{get;set;}
}
公共类RecipientSetMemberInfo
{
公共字符串电子邮件{get;set;}
公共字符串传真{get;set;}
}

指向AdobeSign存储库的链接:

AdobeSignAPI集成商-这是一种隐藏在AdobeSigns GIT存储库中的东西。指向GIT项目中C#和REST客户端集成C#项目的所有生成的SWAGGER类(模型/方法)的链接,您可以在项目内部编译并用作项目引用或编译的DLL。此项目已更新为使用API版本6。这对我来说是一个巨大的时间节省。我在下面提供了一个关于如何使用它的快速示例。我希望这也能帮助其他人节省时间

注意:您可能必须在configuration.cs中切换出BasePath,以便在出现404错误时可以检索初始的Adobe URI“BaseURI”调用

更改BasePath=“”

致:

BasePath=“”

然后这个快速最小值演示BaseUri,上传PDF a.k.a.瞬态文档,然后创建协议(示例1基本签名者最小值选项

字符串transientDocumentId=”“;
字符串adobesignDocKey=“”;
字符串baseURI=“”;
var apinstancebase=new BaseUrisApi();
var authorization=“Bearer”+apiKey//作为集成键的示例,请参见OAuth的adobesign文档。
尝试
{
//___________________获取BASEURI ADOBE签名_________________________
BaseUriInfo resultBase=apInstanceBase.GetBaseUris(授权);
baseURI=resultBase.ApiAccessPoint;//返回基本uri
//___________________上传您的PDF,然后参考ADOBE SIGN_________________________
var apinstancefileupload=newtransientDocumentsAPI(baseURI+“api/rest/v6/”);
TransientDocumentResponse resultTransientID=apInstanceFileUpload.CreateTransientDocument(授权,文件.OpenRead([输入本地文件路径]),null,null,_文件名,null);
如果(!String.IsNullOrEmpty(resultTransientID.TransientDocumentId))
{
transientDocumentId=resultTransientID.transientDocumentId;//返回要在下面用作参考的临时文档id
}
var apinstance=newagreementsapi(baseURI+“api/rest/v6/”);
//___________________创建ADOBE标志_________________________
var agreementId=“”;//string |协议标识符,由协议创建API返回或从API检索以获取协议。
var agreementInfo=新的AgreementCreationInfo();
//transientDocument、libraryDocument或URL(注意完整名称空间/与System.IO冲突
List useFile=新列表();
useFile.Add(new IO.Swagger.model.agreements.FileInfo{TransientDocumentId=TransientDocumentId});
agreementInfo.FileInfos=useFile;
//添加要发送到的电子邮件:
List partSigners=new List();
partSigners.Add(new ParticipantSetMemberInfo{Email=“[ENTER VALID Email SIGNER]”,SecurityOption=null});
//向参与者添加签名者
List partSetInfo=新列表();
partSetInfo.Add(new ParticipantSetInfo{Name=“signer1”,MemberInfos=partSigners,Role=ParticipantSetInfo.RoleEnum.SIGNER,Order=1,Label=”“});
agreementInfo.ParticipantSetInfo=partSetInfo;
agreementInfo.SignatureType=AgreementCreationInfo.SignatureType.ESIGN;
agreementInfo.Name=“API的示例设计”;
agreementInfo.Message=“要使用签名的一些示例消息”;
agreementInfo.State=AgreementCreationInfo.StateEnum.INPROCESS;
AgreementCreationResponse结果=apInstance.CreateAgreement(授权,agreementInfo,null,null);
adobesignDocKey=result.Id;//返回文档Id供以后引用,以获取get上的状态/信息
}
捕获(例外情况除外)
{
//捕获并写入错误以调试或显示给我们
//include namespaces: 
using IO.Swagger.Api;
using IO.Swagger.model.agreements;
using IO.Swagger.model.baseUris;
using IO.Swagger.model.transientDocuments;
using System.IO;
        string transientDocumentId = "";
        string adobesignDocKey = "";
        string baseURI = "";
        var apiInstanceBase = new BaseUrisApi();
        var authorization = "Bearer " + apiKey;   //Example as Integration Key, see adobesign docs For OAuth.

        try
        {
            //___________________GET BASEURI ADOBE SIGN_________________________

            BaseUriInfo resultBase = apiInstanceBase.GetBaseUris(authorization);
            baseURI = resultBase.ApiAccessPoint; //return base uri

            //___________________UPLOAD YOUR PDF THEN REF ADOBE SIGN_________________________

            var apiInstanceFileUpload = new TransientDocumentsApi(baseURI + "api/rest/v6/");
            TransientDocumentResponse resultTransientID = apiInstanceFileUpload.CreateTransientDocument(authorization, File.OpenRead([ENTER YOUR LOCAL FILE PATH]), null, null, _filename, null);

            if (!String.IsNullOrEmpty(resultTransientID.TransientDocumentId))
            {
                transientDocumentId = resultTransientID.TransientDocumentId; //returns the transient doc id to use below as reference                    
            }

            var apiInstance = new AgreementsApi(baseURI + "api/rest/v6/");

            //___________________CREATE ADOBE SIGN_________________________

            var agreementId = "";  // string | The agreement identifier, as returned by the agreement creation API or retrieved from the API to fetch agreements.

            var agreementInfo = new AgreementCreationInfo();                

            //transientDocument, libraryDocument or a URL (note the full namespace/conflicts with System.IO
            List<IO.Swagger.model.agreements.FileInfo> useFile = new List<IO.Swagger.model.agreements.FileInfo>();
            useFile.Add(new IO.Swagger.model.agreements.FileInfo { TransientDocumentId = transientDocumentId });
            agreementInfo.FileInfos = useFile;

            //Add Email To Send To:
            List<ParticipantSetMemberInfo> partSigners = new List<ParticipantSetMemberInfo>();
            partSigners.Add( new ParticipantSetMemberInfo { Email = "[ENTER VALID EMAIL SIGNER]", SecurityOption=null });

            //Add Signer To Participant
            List<ParticipantSetInfo> partSetInfo = new List<ParticipantSetInfo>();
            partSetInfo.Add(new ParticipantSetInfo { Name = "signer1", MemberInfos = partSigners, Role = ParticipantSetInfo.RoleEnum.SIGNER, Order=1, Label="" });
            agreementInfo.ParticipantSetsInfo = partSetInfo;

            agreementInfo.SignatureType = AgreementCreationInfo.SignatureTypeEnum.ESIGN;
            agreementInfo.Name = "Example Esign For API";

            agreementInfo.Message = "Some sample Message To Use Signing";

            agreementInfo.State = AgreementCreationInfo.StateEnum.INPROCESS;

            AgreementCreationResponse result = apiInstance.CreateAgreement(authorization, agreementInfo, null, null);
            adobesignDocKey = result.Id; //returns the document Id to reference later to get status/info on GET                
        }
        catch (Exception ex) 
        {
            //Capture and write errors to debug or display to user 
            System.Diagnostics.Debug.Write(ex.Message.ToString());
        }