diff --git a/Sdk/.editorconfig b/Sdk/.editorconfig
new file mode 100644
index 0000000000000000000000000000000000000000..3dda769e61d1eafe9b3af0f8de9ed22b3143e5fb
--- /dev/null
+++ b/Sdk/.editorconfig
@@ -0,0 +1,9 @@
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 4
+end_of_line = lf
+trim_trailing_whitespace = true
+
diff --git a/Sdk/Entity/BaseFileData.cs b/Sdk/Entity/BaseFileData.cs
index 47f9b24a84e37d74f9b616d80b661e7b2c7c4855..9e591689e6881a8af9b8159db07da2c4681cc0bf 100644
--- a/Sdk/Entity/BaseFileData.cs
+++ b/Sdk/Entity/BaseFileData.cs
@@ -1,8 +1,20 @@
-namespace Signit.Sdk.Entity
+namespace Signit.Sdk.Entity
{
public class BaseFileData
{
+ ///
+ /// 文件数据 URL 地址
+ ///
public string Url { get; set; }
+
+ ///
+ /// 采用 BASE64 编码的文件内容,支持最大约 10MB 文件数据
+ ///
public string Base64 { get; set; }
+
+ ///
+ /// 文件名
+ ///
+ public string Name { get; set; }
}
}
diff --git a/Sdk/Entity/FileData.cs b/Sdk/Entity/FileData.cs
index ea2c98a8b62f2eb3dec104f54dea7e79ab02b37b..b0814a3fc87701fd9590e6940a4f0f4cb5337a84 100644
--- a/Sdk/Entity/FileData.cs
+++ b/Sdk/Entity/FileData.cs
@@ -1,13 +1,31 @@
-namespace Signit.Sdk.Entity
+using System;
+
+namespace Signit.Sdk.Entity
{
public class FileData
{
+ ///
+ /// 待签名文件(html/pdf/doc/docx/xls/xlsx/ppt/pptx)的URL地址。
+ /// 注意:如果 Url 和 Base64 同时存在,优先使用 Base64
+ ///
public string Url { get; set; }
+
+ ///
+ /// 待签名文件(html/pdf/doc/docx/xls/xlsx/ppt/pptx)数据的 BASE64 编码,
+ /// 支持最大约 10MB 的文件数据。
+ /// 注意:如果 Url 和 Base64 同时存在,优先使用 Base64
+ ///
public string Base64 { get; set; }
+
+ ///
+ /// 待签名的文件是否转换成单页的形式,否则,默认使用A4尺寸自动进行分页。
+ /// 注:待签名文件为html时该值有效,且此单页最大支持的高度为5000mm
+ ///
public bool EnableSinglePage { get; set; }
public FileData() { }
+ [Obsolete("将在 v1.2 中删除此构造,请使用对象初始化语法代替")]
public FileData(string url)
{
Url = url;
diff --git a/Sdk/Entity/InitialValue.cs b/Sdk/Entity/InitialValue.cs
index e8bf1cc69ab33941f38508dd7728137b892b35d4..4a7bcb64d6cdaeccb66ae68d8b0b71646980d127 100644
--- a/Sdk/Entity/InitialValue.cs
+++ b/Sdk/Entity/InitialValue.cs
@@ -1,73 +1,80 @@
-using Signit.Sdk.Types;
+using Signit.Sdk.Types;
namespace Signit.Sdk.Entity
{
- /**
- * 签名初始化数据。包含印章数据、手写数据、证书数据、证书签名证书秘钥访问口令、证书类型、 渲染模式、签名地理位置、联系方式、签名是否锁定、签名原因。
- * 印章数据、手写数据仅一个不为空的有效。
- */
+ ///
+ /// 签名初始化数据。包含印章数据、手写数据、证书数据、证书签名证书秘钥访问口令、证书类型、
+ /// 渲染模式、签名地理位置、联系方式、签名是否锁定、签名原因。
+ /// 印章数据、手写数据仅一个不为空的有效。
+ ///
public class InitialValue
{
- /**
- * 印章数据.
- */
+ ///
+ /// 印章数据.
+ ///
public SealData SealData { get; set; }
- /**
- * 手写签名数据.
- */
+ ///
+ /// 手写签名数据.
+ ///
public WriteData WriteData { get; set; }
- /**
- * 证书数据.
- */
+ ///
+ /// 证书数据.
+ ///
public CertData CertData { get; set; }
- /**
- * 证书签名证书密钥访问口令.
- */
+ ///
+ /// 证书签名证书密钥访问口令.
+ ///
public string CertPassin { get; set; }
- /**
- * 证书类型.
- * 对应枚举:CertType
- */
+ ///
+ /// 证书类型.
+ /// 对应枚举:CertType
+ ///
public CertType CertType { get; set; }
- /**
- * 渲染模式. 对应枚举:
- * 对应枚举:RenderMode
- */
+ ///
+ /// 渲染模式. 对应枚举:
+ /// 对应枚举:RenderMode
+ ///
public RenderMode RenderingMode { get; set; } = RenderMode.GRAPHIC;
- /**
- * 签名地理位置.
- */
+ ///
+ /// 签名地理位置.
+ ///
public string Location { get; set; }
- /**
- * 联系方式.
- */
+ ///
+ /// 联系方式.
+ ///
public string Contact { get; set; }
- /**
- * 签名是否锁定.
- */
+ ///
+ /// 签名是否锁定.
+ ///
public bool Locked { get; set; }
- /**
- * 签名原因.
- */
+ ///
+ /// 签名原因.
+ ///
public string Reason { get; set; }
- /**
- * 文本框文本内容
- */
+ ///
+ /// 文本框文本内容
+ ///
public string TextContent { get; set; }
- /**
- * 二维码内容字符串.
- */
+ ///
+ /// 二维码内容字符串.
+ ///
public string QrcodeContent { get; set; }
+
+ ///
+ /// 时间表单的时间戳(单位:毫秒(ms)).
+ /// @since v1.1
+ ///
+ public long Timestamp { get; set; }
}
-}
\ No newline at end of file
+}
diff --git a/Sdk/Entity/KeywordPosition.cs b/Sdk/Entity/KeywordPosition.cs
index d928c7af7e81dc5c9445d9b6d69a80af0df94c97..f338530c1d57480e30f531f59e64eac11b3faadf 100644
--- a/Sdk/Entity/KeywordPosition.cs
+++ b/Sdk/Entity/KeywordPosition.cs
@@ -1,4 +1,4 @@
-using Signit.Sdk.Types;
+using Signit.Sdk.Types;
namespace Signit.Sdk.Entity
{
@@ -15,6 +15,9 @@ namespace Signit.Sdk.Entity
public float? Scale { get; set; }
public string Pages { get; set; }
+ public string ReplaceTextAfterLocate { get; set; }
+ public bool DeleteTextAfterLocate { get; set; }
+
///
/// x 方向的便移量 正是往右,负是往左,坐标缩放前进行最后的微调参数
///
diff --git a/Sdk/Entity/Receiver.cs b/Sdk/Entity/Receiver.cs
index 65fcbc520a0688a202bf3cae416d0279d01850f9..c311e8b22d2bc204c85af9d3d26e383710bededb 100644
--- a/Sdk/Entity/Receiver.cs
+++ b/Sdk/Entity/Receiver.cs
@@ -1,85 +1,130 @@
-using Signit.Sdk.Types;
using System.Collections.Generic;
+using Signit.Sdk.Types;
namespace Signit.Sdk.Entity
{
- /**
- * 接收方信息。 包含接收方名字、接收方联系方式、安全等级、接收方类型、 接收方是否必须预分配表单域、设置接收方私人信息、接收方处理顺序、
- * 签署认证等级、接收方所在企业名称、信封自定义元数据信息、预设表单信息.
- */
+ ///
+ /// 接收方信息。 包含接收方名字、接收方联系方式、安全等级、接收方类型、
+ /// 接收方是否必须预分配表单域、设置接收方私人信息、接收方处理顺序、
+ /// 签署认证等级、接收方所在企业名称、信封自定义元数据信息、预设表单信息.
+ ///
public class Receiver
{
- /**
- * 接收方名字.
- */
+ ///
+ /// 接收方名字.
+ ///
public string Name { get; set; }
- /**
- * 接收方联系方式.
- */
+
+ ///
+ /// 接收方联系方式.
+ ///
public Contact Contact { get; set; }
- /**
- * 安全等级.
- *
- * 对应枚举:SecureLevel
- *
- */
+
+ ///
+ /// 安全等级.
+ ///
+ /// 对应枚举:SecureLevel
+ ///
+ ///
public SecureLevel SecureLevel { get; set; }
- /**
- * 接收方类型。 接收方类型:ReceiverType
- *
- */
+
+ ///
+ /// 接收方类型。 接收方类型:ReceiverType
+ ///
+ ///
public ReceiverType Type { get; set; }
- /**
- * 接收方是否必须预分配表单域.
- */
+
+ ///
+ /// 接收方是否必须预分配表单域.
+ ///
public bool NeedForm { get; set; }
- /**
- * 设置接收方私人信息.
- */
+
+ ///
+ /// 设置接收方私人信息.
+ ///
public string AssignedMessage { get; set; }
- /**
- * 接收方处理顺序.
- */
+
+ ///
+ /// 接收方处理顺序.
+ ///
public int AssignedSequence { get; set; }
- /**
- * 接收方所在企业名称.
- */
+ ///
+ /// 接收方所在企业名称.
+ ///
public string EnterpriseName { get; set; }
- /**
- * 信封自定义元数据信息.
- */
+
+ ///
+ /// 信封自定义元数据信息.
+ ///
public string Metadata { get; set; }
- /**
- * 预设表单信息.
- */
+
+ ///
+ /// 预设表单信息.
+ ///
public IList PresetForms { get; set; }
public EnvelopeRoleType RoleType { get; set; }
- /**
- * 流程完成后删除当前参与者的信封。 默认:false
- *
- */
+ ///
+ /// 流程完成后删除当前参与者的信封。 默认:false
+ ///
public bool DeleteCompletedEnvelope { get; set; }
- /**
- * 参与者处理表单各种模式的枚举
- */
+
+ ///
+ /// 参与者处理表单各种模式的枚举
+ ///
public ParticipantHandleMode HandleMode { get; set; }
public IList SelectedAuthTypes { get; set; }
- /**
- * 启用嵌入模式,调用方系统中直接嵌入易企签WEB流程时设置为true,签署流程消息只会通过webhook事件消息方式通知,用户在易企签平台设置的短信/邮件等消息将自动屏蔽。非必填,默认值:false.
- * @since 2.1.0
- */
+ ///
+ /// 启用嵌入模式,调用方系统中直接嵌入易企签WEB流程时设置为true,
+ /// 签署流程消息只会通过webhook事件消息方式通知,用户在易企签平台设置的短信/邮件等消息将自动屏蔽。
+ /// 非必填,默认值:false.
+ ///
public bool EnableEmbeddedMode { get; set; }
- /**
- * 签署接收方用户在调用方系统的唯一标识.
- * enableEmbeddedMode为false时,非必填;当enableEmbeddedMode为true时,则必填。默认:null
- * @since 2.1.0
- */
+ ///
+ /// 签署接收方用户在调用方系统的唯一标识.
+ /// enableEmbeddedMode为false时,非必填;当enableEmbeddedMode为true时,则必填。默认:null
+ ///
public string ClientId { get; set; }
+
+ ///
+ /// 参与者唯一标识.
+ /// @since v1.1
+ ///
+ public string ParticipantWsid { get; set; }
+
+ ///
+ /// 是否是外部.
+ /// @since v1.1
+ ///
+ public bool IsExternal { get; set; }
+
+ ///
+ /// 是否是委托外部.
+ /// @since v1.1
+ ///
+ public bool IsEntrust { get; set; }
+
+ ///
+ /// 是否允许撤销.
+ /// @since v1.1
+ ///
+ public bool AllowRevoke { get; set; }
+
+ ///
+ /// 是否区分顺序.
+ /// @since v1.1
+ ///
+ public bool SequenceSensitive { get; set; }
+
+ ///
+ /// 用户ID.
+ /// @since v1.1
+ ///
+ public string UserWsid { get; set; }
}
}
diff --git a/Sdk/HISTORY.md b/Sdk/HISTORY.md
new file mode 100644
index 0000000000000000000000000000000000000000..7f0a1ce2b2fe8e1bb20e4db32fee5967923ae77b
--- /dev/null
+++ b/Sdk/HISTORY.md
@@ -0,0 +1,18 @@
+# 升级历史简要记录
+
+> Ref Repository (Java)
+>
+> - https://github.com/signit-wesign/java-sdk.git
+> - https://github.com/signit-wesign/java-sdk-sample
+
+## v1.0.1 2020-06-05
+
+> *Ref: [java-sdk]: `575a3bc7fcb5e2b817ea1a9fe1e1899d30fe89d2`*
+
+### 已知问题
+
+- 没有 `cn.signit.sdk.type.WebhookEventType`
+
+## v1.0.0 2019-05-26
+
+> *Ref: java-sdk: `c06f5d4156657198d61f8ba7f4816cdf848fa8d6`*
\ No newline at end of file
diff --git a/Sdk/Http/Enterprise/EnterpriseVerifyRequest.cs b/Sdk/Http/Enterprise/EnterpriseVerifyRequest.cs
index 0745b3e7e3be9a690f5a6244162b0566638fce8c..915eb7fb9bf45a48fdd79c382d5cc0446a2b57f7 100644
--- a/Sdk/Http/Enterprise/EnterpriseVerifyRequest.cs
+++ b/Sdk/Http/Enterprise/EnterpriseVerifyRequest.cs
@@ -1,6 +1,6 @@
-using Signit.Sdk.Entity;
-using Signit.Sdk.Types;
using System.Collections.Generic;
+using Signit.Sdk.Entity;
+using Signit.Sdk.Types;
namespace Signit.Sdk.Http.Enterprise
{
@@ -54,6 +54,12 @@ namespace Signit.Sdk.Http.Enterprise
///
public EnterpriseAuthType AuthType { get; set; }
+ ///
+ /// 设置经办人或者法人的个人实名认证方式,默认为:PHONE_AUTH
+ /// @since v1.1
+ ///
+ public List AuthModes { get; set; }
+
///
/// 企业对公银行信息.
///
@@ -63,5 +69,13 @@ namespace Signit.Sdk.Http.Enterprise
/// 额外认证所需照片信息数组.
///
public IList ExtraAuthImages { get; set; }
+
+ ///
+ /// 启用嵌入模式,调用方系统中直接嵌入易企签WEB流程时设置为true,
+ /// 签署流程消息只会通过webhook事件消息方式通知,用户在易企签平台设置的短信/邮件等消息将自动屏蔽。
+ /// 非必填,默认值:false.
+ /// @since v1.1
+ ///
+ public bool? EnableEmbeddedMode { get; set; }
}
-}
\ No newline at end of file
+}
diff --git a/Sdk/Http/Envelope/EnvelopeBasicInfo.cs b/Sdk/Http/Envelope/EnvelopeBasicInfo.cs
index 4ee4af034ba141bc9d83ed7ee0e89361f47f6497..c685ac051825d0702a5bd5aed92ca6a167b2b004 100644
--- a/Sdk/Http/Envelope/EnvelopeBasicInfo.cs
+++ b/Sdk/Http/Envelope/EnvelopeBasicInfo.cs
@@ -1,37 +1,55 @@
-using Signit.Sdk.Types;
+using Signit.Sdk.Types;
namespace Signit.Sdk.Http.Envelope
{
- /**
- * 信封基本信息. 包含信封标题、信封主题、信封类型、信封认证等级、自定义元数据信息.
- */
+ ///
+ /// 信封基本信息. 包含信封标题、信封主题、信封类型、信封认证等级、自定义元数据信息.
+ ///
public class EnvelopeBasicInfo
{
- /**
- * 信封标题.
- */
+ ///
+ /// 信封标题.
+ ///
public string Title { get; set; }
- /**
- * 信封主题.
- */
+ ///
+ /// 信封主题.
+ ///
public string Subject { get; set; }
- /**
- * 信封类型.
- * 对应枚举:EnvelopeType
- */
+ ///
+ /// 信封类型.
+ /// 对应枚举:EnvelopeType
+ ///
public EnvelopeType Type { get; set; }
- /**
- * 信封认证等级.
- * 对应枚举:AuthLevel
- */
+ ///
+ /// 信封认证等级.
+ /// 对应枚举:AuthLevel
+ ///
public AuthLevel AuthLevel { get; set; }
- /**
- * 自定义元数据信息.
- */
+ ///
+ /// 自定义元数据信息.
+ ///
public string Metadata { get; set; }
+
+ ///
+ /// 时间单位:天;如果 `当前时间 > 信封发起时间 + 逾期时间` 后,信封将不可签署
+ /// @since v1.1
+ ///
+ public int? Expire { get; set; }
+
+ ///
+ /// 信封ID.
+ /// @since v1.1
+ ///
+ public string EnvelopeWsid { get; set; }
+
+ ///
+ /// 模式.
+ /// @since v1.1
+ ///
+ public string Mode { get; set; }
}
-}
\ No newline at end of file
+}
diff --git a/Sdk/Http/HttpClientSync.Response.cs b/Sdk/Http/HttpClientSync.Response.cs
index 546d403f914242dadc5578b38fc6fec565f26d34..9ed173d3ed344daf0c8fe07fb24e273e36fbefd3 100644
--- a/Sdk/Http/HttpClientSync.Response.cs
+++ b/Sdk/Http/HttpClientSync.Response.cs
@@ -1,5 +1,6 @@
-using Newtonsoft.Json;
using System.Net;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
namespace Signit.Sdk.Http
{
@@ -15,7 +16,33 @@ namespace Signit.Sdk.Http
{
return string.IsNullOrWhiteSpace(Content)
? default(T)
- : JsonConvert.DeserializeObject(Content);
+ : FromJson(Content);
+ }
+
+ private T FromJson(string json)
+ {
+ try
+ {
+ var jo = JsonConvert.DeserializeObject(json) as JObject;
+
+ if (jo.ContainsKey("error"))
+ {
+ throw new SignitException(jo
+ .GetValue("error")
+ .Value());
+ }
+
+ if (jo.ContainsKey("errorWsid"))
+ {
+ throw new SignitException(json);
+ }
+
+ return jo.ToObject();
+ }
+ catch (JsonSerializationException jse)
+ {
+ throw new SignitException(jse);
+ }
}
}
}
diff --git a/Sdk/Http/JsonContent.cs b/Sdk/Http/JsonContent.cs
index 28253da1e377ee0e543eb3a7c64ed01f223d3a72..ddb15d6090e382d8a4dc9fd897e718adae458208 100644
--- a/Sdk/Http/JsonContent.cs
+++ b/Sdk/Http/JsonContent.cs
@@ -1,8 +1,6 @@
-using Newtonsoft.Json;
-using Newtonsoft.Json.Converters;
-using Newtonsoft.Json.Serialization;
-using System.Net.Http;
+using System.Net.Http;
using System.Text;
+using Signit.Sdk.Util;
namespace Signit.Sdk.Http
{
@@ -10,22 +8,6 @@ namespace Signit.Sdk.Http
{
public JsonContent(object model) : base(ToJson(model), Encoding.UTF8, "application/json") { }
- private static readonly JsonSerializerSettings defaultJsonSettings = CreateDefaultJsonSettings();
-
- private static JsonSerializerSettings CreateDefaultJsonSettings()
- {
- var settings = new JsonSerializerSettings
- {
- ContractResolver = new CamelCasePropertyNamesContractResolver(),
- };
-
- settings.Converters.Add(new StringEnumConverter());
- return settings;
- }
-
- private static string ToJson(object model, JsonSerializerSettings settings = null)
- {
- return JsonConvert.SerializeObject(model, settings ?? defaultJsonSettings);
- }
+ private static string ToJson(object model) => model.ToJson();
}
}
diff --git a/Sdk/Http/Webhook/EnvelopeStarted.cs b/Sdk/Http/Webhook/EnvelopeStarted.cs
index 532a2812c03517e05d11d7a6088f1dea6d70b26d..5d8215bc0a3dddb1ffcc694221634d5e84c95b49 100644
--- a/Sdk/Http/Webhook/EnvelopeStarted.cs
+++ b/Sdk/Http/Webhook/EnvelopeStarted.cs
@@ -1,28 +1,40 @@
-using System.Collections.Generic;
+using System.Collections.Generic;
namespace Signit.Sdk.Http.Webhook
{
public class EnvelopeStarted : AbstractWebhookResponse
{
- // 执行的动作对应的URL地址
+ ///
+ /// 执行的动作对应的URL地址
+ ///
public string ActionUrl { get; set; }
- // 流程允许在易企签WEB执行的动作
+ ///
+ /// 流程允许在易企签WEB执行的动作
+ ///
public IList Actions { get; set; }
- // 接收方对应的在易企签的帐号
+ ///
+ /// 接收方对应的在易企签的帐号
+ ///
public string Account { get; set; }
- // 信封基本信息
+ ///
+ /// 信封基本信息
+ ///
public RawDataBasicInfo BasicEnvelope { get; set; }
public Sender SenderParticipant { get; set; }
public Receiver ReceiverParticipant { get; set; }
- // 已完成的签署数据
+ ///
+ /// 已完成的签署数据
+ ///
public SignData SignData { get; set; }
- // 客户端回调地址
+ ///
+ /// 客户端回调地址
+ ///
public string ReturnUrl { get; set; }
}
}
diff --git a/Sdk/Http/Webhook/RawDataBasicInfo.cs b/Sdk/Http/Webhook/RawDataBasicInfo.cs
index a68643cba4a596db80773fce36e1fdac7e3b268d..6df9d8bc4d8d8204c958d0a4487f42465c73aace 100644
--- a/Sdk/Http/Webhook/RawDataBasicInfo.cs
+++ b/Sdk/Http/Webhook/RawDataBasicInfo.cs
@@ -1,31 +1,68 @@
-namespace Signit.Sdk.Http.Webhook
+namespace Signit.Sdk.Http.Webhook
{
- /**
- * 信封基本信息.
- *
- * @since 2.0.0
- */
+ ///
+ /// 信封基本信息.
+ ///
public class RawDataBasicInfo
{
- // 信封全局唯一ID
+ ///
+ /// 信封全局唯一ID
+ ///
public string Wsid { get; set; }
- // 信封状态
+ ///
+ /// 信封发起者ID
+ ///
+ public string SenderWsid { get; set; }
+
+ ///
+ /// 信封发起者名字
+ ///
+ public string SenderName { get; set; }
+
+ ///
+ /// 信封状态
+ ///
public string Status { get; set; }
- // 信封创建时间
+ ///
+ /// 信封类型
+ ///
+ public string Type { get; set; }
+
+ ///
+ /// 信封标题
+ ///
+ public string Title { get; set; }
+
+ ///
+ /// 信封主题
+ ///
+ public string Subject { get; set; }
+
+ ///
+ /// 信封创建时间
+ ///
public long? CreatedDatetime { get; set; }
- // 信封过期时间
+ ///
+ /// 信封过期时间
+ ///
public long? ExpireDatetime { get; set; }
- // 信封最新状态时间
+ ///
+ /// 信封最新状态时间
+ ///
public long? StatusDatetime { get; set; }
- // 信封最新状态原因
+ ///
+ /// 信封最新状态原因
+ ///
public string StatusReason { get; set; }
- // 当前签署方的序号
+ ///
+ /// 当前签署方的序号
+ ///
public int? CurrentSequence { get; set; }
}
}
diff --git a/Sdk/Http/Webhook/WebhookDataBase.cs b/Sdk/Http/Webhook/WebhookDataBase.cs
index e93638470b4ea179a77bab4897cf50812e9711b9..ab05580c931e3cc6b82f7c30a91cf37a78453bed 100644
--- a/Sdk/Http/Webhook/WebhookDataBase.cs
+++ b/Sdk/Http/Webhook/WebhookDataBase.cs
@@ -1,11 +1,11 @@
-namespace Signit.Sdk.Http.Webhook
+namespace Signit.Sdk.Http.Webhook
{
public class WebhookDataBase
{
public string Event { get; set; }
public SourceType Source { get; set; }
public TargetType Target { get; set; }
- public bool NeedCallback { get; set; }
+ public bool? NeedCallBack { get; set; }
public class SourceType
{
diff --git a/Sdk/Properties/AssemblyInfo.cs b/Sdk/Properties/AssemblyInfo.cs
index 4a7bf64a80a2b6547324dd884f996f731a74fd03..7418c03dba3deee724b0d53f5e0128bed2a7d8f5 100644
--- a/Sdk/Properties/AssemblyInfo.cs
+++ b/Sdk/Properties/AssemblyInfo.cs
@@ -1,4 +1,4 @@
-using System.Reflection;
+using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
@@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("SignIt")]
[assembly: AssemblyProduct("Sdk")]
-[assembly: AssemblyCopyright("Copyright © SignIt 2019")]
+[assembly: AssemblyCopyright("Copyright © SignIt 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: AssemblyVersion("1.1.1.0")]
+[assembly: AssemblyFileVersion("1.1.1.0")]
diff --git a/Sdk/Sdk.csproj b/Sdk/Sdk.csproj
index 6417192fe6cf1661bde441a8c4ec538606e10ebe..269d1c767ba9dc2e3877c702927abce8601eec86 100644
--- a/Sdk/Sdk.csproj
+++ b/Sdk/Sdk.csproj
@@ -153,7 +153,6 @@
-
@@ -161,13 +160,16 @@
+
+
+
diff --git a/Sdk/SignitClient.cs b/Sdk/SignitClient.cs
index 02e1cf20d59c066093596279f807b47a20972fc4..a9690fc4bfa68c45cf74f8886b0ed282e7914679 100644
--- a/Sdk/SignitClient.cs
+++ b/Sdk/SignitClient.cs
@@ -1,16 +1,47 @@
-using Newtonsoft.Json;
+/**
+ * The MIT License (MIT)
+ *
+ * Copyright (C) 2018 signit.cn
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+using System.Collections.Specialized;
+using System.Threading;
+using Newtonsoft.Json;
using Signit.Sdk.Http;
using Signit.Sdk.Http.Webhook;
using Signit.Sdk.Types;
using Signit.Sdk.Util;
-using System.Collections.Specialized;
-using System.Diagnostics;
using Viyi.Util;
namespace Signit.Sdk
{
+ // TODO 还没有添加重试机制
+
+ ///
+ /// 易企签快捷签署 Java SDK的基本操作类.
+ ///
public class SignitClient
{
+ private const int MAX_COUNT = 3;
+
public static WebhookData ParseWebhookData(string raw)
{
return JsonConvert.DeserializeObject(raw);
@@ -25,14 +56,25 @@ namespace Signit.Sdk
private readonly ApiOptions options;
//private HttpClientWrapper httpClient;
- //private readonly int MAX_COUNT = 3;
//private readonly AtomicInteger count = new AtomicInteger(MAX_COUNT);
//private const Pattern LEFT_QUOTATION = Pattern.compile("\"\\{");
//private const Pattern RIGHT_QUOTATION = Pattern.compile("\\}\"");
//private const Pattern BACKLASH_QUOTATION = Pattern.compile("\\\\\"");
- public string BaseUrl { get; set; }
- public string OAuthTokenUrl { get; set; }
+ private ThreadLocal baseUrl = new ThreadLocal();
+ private ThreadLocal oAuthTokenUrl = new ThreadLocal();
+
+ public string BaseUrl
+ {
+ get => baseUrl.Value;
+ set => baseUrl.Value = value;
+ }
+
+ public string OAuthTokenUrl
+ {
+ get => oAuthTokenUrl.Value;
+ set => oAuthTokenUrl.Value = value;
+ }
public SignitClient(ApiOptions options = null) : this(null, null, options) { }
@@ -144,7 +186,7 @@ namespace Signit.Sdk
.Post(BaseUrl, request, headers);
var result = response.GetObject();
- if (!result.IsSuccess)
+ if (result?.IsSuccess != true)
{
result.Error = response.GetObject();
}
diff --git a/Sdk/Types/FormType.cs b/Sdk/Types/FormType.cs
index 074c598daae92fa9bdff12af3388eb39b02af179..bfdf00c8eec1322ca11f598ca6dfe88ff9f4ea32 100644
--- a/Sdk/Types/FormType.cs
+++ b/Sdk/Types/FormType.cs
@@ -1,33 +1,30 @@
namespace Signit.Sdk.Types
{
- /**
- *
- * 表单类型枚举.
- *
- * @since 2.0.0
- */
+ ///
+ /// 表单类型枚举.
+ /// @since v1.0
+ ///
public enum FormType
{
-
- /**
- * 印章签名表单域
- */
+ /// 印章签名表单域
SEAL_SIGN,
- /**
- * 手写签名表单域
- */
+
+ /// 手写签名表单域
WRITE_SIGN,
- /**
- * 文本表单域
- */
+
+ /// 文本表单域
TEXT,
- /**
- * 骑缝章表单域
- */
+
+ /// 骑缝章表单域
MULTI_CHECK_MARK,
- /**
- * 二维码骑缝章表单域
- */
- MULTI_QRCODE_MARK
+
+ /// 二维码骑缝章表单域
+ MULTI_QRCODE_MARK,
+
+ ///
+ /// 时间戳表单
+ /// @since v1.1
+ ///
+ DATE,
}
-}
\ No newline at end of file
+}
diff --git a/Sdk/Types/IdCardType.cs b/Sdk/Types/IdCardType.cs
index ae9990fdd4994d027b136488ca9b4e8b67d89716..a81690eddd71251c8490eb7f47563b67ceefa5f9 100644
--- a/Sdk/Types/IdCardType.cs
+++ b/Sdk/Types/IdCardType.cs
@@ -1,25 +1,36 @@
namespace Signit.Sdk.Types
{
- /**
- *
- * 身份证类型枚举.
- *
- * @since 1.0.2
- */
+ ///
+ /// 身份证类型枚举
+ /// @since 1.0
+ ///
public enum IdCardType
{
- /**
- * 二代身份证
- */
+ /// 二代身份证
SECOND_GENERATION_IDCARD,
- /**
- * 临时身份证
- */
+
+ /// 临时身份证
TEMPORARY_IDCARD,
- /**
- * 护照
- */
- PASSPORT
+ /// 护照
+ PASSPORT,
+
+ ///
+ /// 香港身份证
+ /// @since v1.1
+ ///
+ HONG_KONG_IDCARD,
+
+ ///
+ /// 澳门身份证
+ /// @since v1.1
+ ///
+ MA_CAO_IDCARD,
+
+ ///
+ /// 台湾身份证
+ /// @since v1.1
+ ///
+ TAI_WAN_IDCARD,
}
-}
\ No newline at end of file
+}
diff --git a/Sdk/Types/NamingStyle.cs b/Sdk/Types/NamingStyle.cs
deleted file mode 100644
index 23138ce82f493108676e00b1201be8c26fd74182..0000000000000000000000000000000000000000
--- a/Sdk/Types/NamingStyle.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-namespace Signit.Sdk.Types
-{
- /**
- * 命名风格的枚举.
- *
- * @author zhd
- * @since 1.0.0
- */
- public enum NamingStyle
- {
- /**
- * 小驼峰命名风格.如:nameStyle
- */
- CAMEL,
-
- /**
- * 字母间均大写命名风格.如:NameStyle
- */
- PASCAL,
-
- /**
- * 字母间均以下划线分隔命名风格(unix命名风格).如:name_style
- */
- SNAKE,
-
- /**
- * 字母间均以连词符分隔命名风格.如:name-style
- */
- KEBAB
- }
-}
diff --git a/Sdk/Types/ParticipantHandleMode.cs b/Sdk/Types/ParticipantHandleMode.cs
index b73840cc6464a21b84902dfba6f32cfe385f7f03..ce36477d5f1bf81b67b98fa68265c50efc21762b 100644
--- a/Sdk/Types/ParticipantHandleMode.cs
+++ b/Sdk/Types/ParticipantHandleMode.cs
@@ -1,25 +1,22 @@
namespace Signit.Sdk.Types
{
- /**
- * 参与者处理表单的模式枚举
- *
- * @since 2.0.0
- */
+ ///
+ /// 参与者处理表单的模式枚举
+ ///
public enum ParticipantHandleMode
{
- /**
- * 正常处理模式(默认).
- *
- * @since 2.0.0
- */
+ ///
+ /// 正常处理模式(默认).
+ ///
NORMAL,
- /**
- * 静默处理模式.
- * 该接受方不用执行签署流程,自动完成签署。接收方设置为静默签署条件:①接收方类型为签署者SIGNER;②接收方和发起方为同一企业下的同一人;③该接收方有预设表单,且该接收方的预设表单均设置了初始值(手写签名表单除外)。
- *
- * @since 2.0.0
- */
- SILENCE
+ ///
+ /// 静默处理模式。
+ /// 该接受方不用执行签署流程,自动完成签署。接收方设置为静默签署条件:
+ /// - ① 接收方类型为签署者SIGNER;
+ /// - ② 接收方和发起方为同一企业下的同一人;
+ /// - ③ 该接收方有预设表单,且该接收方的预设表单均设置了初始值(手写签名表单除外)。
+ ///
+ SILENCE,
}
}
\ No newline at end of file
diff --git a/Sdk/Types/PersonAuthType.cs b/Sdk/Types/PersonAuthType.cs
index aa78860ee100b996bc5a954a74214b5ade1e6469..75eb2aae2565c84d3e56e07565703b03d920718e 100644
--- a/Sdk/Types/PersonAuthType.cs
+++ b/Sdk/Types/PersonAuthType.cs
@@ -1,16 +1,30 @@
namespace Signit.Sdk.Types
{
- /**
- * 个人实名认证方式
- *
- * @since 2.1.0
- */
+ ///
+ /// 个人实名认证方式
+ /// @since v1.0
+ ///
public enum PersonAuthType
{
- /**
- * 三网手机号三元素实名认证方式
- */
- PHONE_AUTH
+ /// 三网手机号三元素实名认证方式
+ PHONE_AUTH,
+ ///
+ /// 人脸识别认证方式
+ /// @since v1.1
+ ///
+ FACE_AUTH,
+
+ ///
+ /// 支付宝芝麻认证方式
+ /// @since v1.1
+ ///
+ ZM_AUTH,
+
+ ///
+ /// 三网手机号三元素实名认证+人脸识别认证,双重认证方式
+ /// @since v1.1
+ ///
+ PHONE_FACE_AUTH,
}
}
\ No newline at end of file
diff --git a/Sdk/Util/Json.cs b/Sdk/Util/Json.cs
new file mode 100644
index 0000000000000000000000000000000000000000..a629208a63eeb02b322897cd727c64ac222b1a9a
--- /dev/null
+++ b/Sdk/Util/Json.cs
@@ -0,0 +1,48 @@
+using System;
+using System.IO;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
+using Newtonsoft.Json.Linq;
+using Newtonsoft.Json.Serialization;
+
+namespace Signit.Sdk.Util
+{
+ public static class Json
+ {
+ private static readonly JsonSerializerSettings defaultJsonSettings = CreateDefaultJsonSettings();
+
+ private static JsonSerializerSettings CreateDefaultJsonSettings()
+ {
+ var settings = new JsonSerializerSettings
+ {
+ ContractResolver = new CamelCasePropertyNamesContractResolver(),
+ };
+
+ settings.Converters.Add(new StringEnumConverter());
+ return settings;
+ }
+
+ public static string ToJson(this object model, JsonSerializerSettings settings = null)
+ {
+ return JsonConvert.SerializeObject(model, settings ?? defaultJsonSettings);
+ }
+
+ public static string ToJson(this object model, Action configure)
+ {
+ if (configure == null) { return ToJson(model); }
+ var settings = CreateDefaultJsonSettings();
+ configure(settings);
+ return ToJson(model, settings);
+ }
+
+ public static T FromFile(string filePath)
+ {
+ using (var reader = new StreamReader(filePath))
+ using (var jsonReader = new JsonTextReader(reader))
+ {
+ var jo = JToken.ReadFrom(jsonReader) as JObject;
+ return jo.ToObject();
+ }
+ }
+ }
+}