我创建了具有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
{
}