如何在WCF RESTful Service中使用C#处理来自HelloSign的回调请求数据?

时间:2019-11-28 08:22:31

标签: c# wcf-rest hellosign-api

我创建了具有2种方法的WCF RESTful服务。

1-要使用模板发送签名请求:这非常好

2-接收者完成签名过程时接收事件(回调事件):不知道如何处理

第二种方法应该用作Callback Endpoint,在用户完成签名过程时,HelloSign将在其中发送数据。

我尝试使用此链接:https://app.hellosign.com/api/eventsAndCallbacksWalkthrough

请在下面找到代码,并建议如何定义方法,特别是如何处理HelloSign将提供的JSON数据。

IService1.svc

public interface IService1
{
    //Working
    [OperationContract]
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "sendEmailRequestForSignature/")]
    string sendEmailRequestForSignature();

    //Not working
    [OperationContract]
    [WebInvoke(Method = "POST",ResponseFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "callbackHandler/")]
    string callbackHandler(EventData postData);
}

Service1.svc

public string sendEmailRequestForSignature()
{
    string responseValue = "";
    try
    {
        var client = new Client("000007083e35f5f9sdfgsgfc77sdfgsdfg56785678");
        var request3 = new TemplateSignatureRequest();
        request3.AddTemplate("testtemplateid");
        request3.Title = "Registration Form";
        request3.Subject = "Registration Form";
        request3.Message = "Please sign this NDA and then we can discuss more. Let me know if you have any questions.";
        request3.AddSigner("Customer", "x@gmail.com", "TestFirst TestLast");
        request3.AddCustomField("First Name", "TestFirst", "Customer",true);
        request3.AddCustomField("Surname", "TestSurname", "Customer", true);
        request3.TestMode = true;
        var response = client.SendSignatureRequest(request3);
        responseValue = "200,Email send successfully";  
    }
    catch (Exception ex)
    {
        responseValue = "400," + ex.Message;
    }
    return responseValue;
}


//Method to handle callback
public string callbackHandler(EventData postData)
{
    string responseStatus = "";
    try
    {
        var client = new Client("000007083e35f5f9sdfgsgfc77sdfgsdfg56785678");
        // The following will throw an EventHashException if the hash is missing or invalid
        var event = client.ParseEvent("Callback JSON data here");
        responseStatus = "Hello API Event Received.";
    }
    catch (Exception ex)
    {
        responseStatus = ex.Message;        
    }
    return responseStatus;
}

//用于处理回调json的类

public class EventData
{
    [DataMember]
    public string account_guid { get; set; }
    [DataMember]
    public string client_id { get; set; }
    [DataMember]
    public Event @event { get; set; } = new Event();
    public SignatureRequest1 signature_request { get; set; } = new SignatureRequest1();
}

public class Event
{

    [DataMember]
    public string event_type { get; set; }
    [DataMember]
    public string event_time { get; set; }
    [DataMember]
    public string event_hash { get; set; }
    [DataMember]
    public EventMetaData event_metadata { get; set; } = new EventMetaData();
}
public class EventMetaData
{

    [DataMember]
    public string related_signature_id { get; set; }
    [DataMember]
    public string reported_for_account_id { get; set; }
    [DataMember]
    public string reported_for_app_id { get; set; }
    [DataMember]
    public string event_message { get; set; }

}

public class SignatureRequest1
{

    [DataMember]
    public string signature_request_id { get; set; }
    [DataMember]
    public bool test_mode { get; set; }
    [DataMember]
    public string title { get; set; }

    [DataMember]
    public string original_title { get; set; }

    [DataMember]
    public string subject { get; set; }
    [DataMember]
    public string message { get; set; }

    //[DataMember]
    //public List<MetaData> metadata { get; set; } = new List<MetaData>();

    [DataMember]
    public long created_at { get; set; }


    [DataMember]
    public bool is_complete { get; set; }

    [DataMember]
    public bool is_declined { get; set; }
    [DataMember]
    public bool has_error { get; set; }

    [DataMember]
    public List<CustomField> custom_fields { get; set; } = new List<CustomField>();
    [DataMember]
    public List<CustomField> response_data { get; set; } = new List<CustomField>();


    [DataMember]
    public string signing_url { get; set; }

    [DataMember]
    public string signing_redirect_url { get; set; }

    [DataMember]
    public string final_copy_uri { get; set; }
    [DataMember]
    public string files_url { get; set; }

    [DataMember]
    public string details_url { get; set; }

    [DataMember]
    string requester_email_address { get; set; }

    [DataMember]
    public List<Signature> signatures { get; set; } = new List<Signature>();

    [DataMember]
    public List<string> cc_email_addresses { get; set; } = new List<string>();

    [DataMember]
    public List<string> template_ids { get; set; } = new List<string>();

    //Test
    [DataMember]
    public string client_id { get; set; }
}

public class CustomField
{
    [DataMember]
    public string name { get; set; }

    [DataMember]
    public string type { get; set; }

    [DataMember]
    public bool required { get; set; }

    [DataMember]
    public string api_id { get; set; }

    [DataMember]
    public string editor { get; set; }
    [DataMember]
    public string value { get; set; }
}


public class Signature
{
    [DataMember]
    public string signature_id { get; set; }

    [DataMember]
    public bool has_pin { get; set; }
    [DataMember]
    public string signer_email_address { get; set; }

    [DataMember]
    public string signer_name { get; set; }
    [DataMember]
    public string signer_role { get; set; }

    [DataMember]
    public string order { get; set; }
    [DataMember]
    public string status_code { get; set; }
    [DataMember]
    public long signed_at { get; set; }
    [DataMember]
    public long last_viewed_at { get; set; }
    [DataMember]
    public long last_reminded_at { get; set; }

    [DataMember]
    public long error { get; set; }
}

public class MetaData
{


}

0 个答案:

没有答案