合同相关接口详解 - lvxunDev/yunhetong-DotNet-sdk GitHub Wiki

0x00相关实体类

云合同的SDK有两个重点,一个用户,一个是合同。

  • 合同实体类

合同实体类为LxContract,具体字段如下:

字段 说明
appId 应用Id
title 合同标题,小于64位的字符串
defContractNo 自定义合同编号,方便客户管理合同的一个参数,可以随便传
templateId 合同模板id,在 SDK 开发平台上传了合同模板之后返回的一个 Id
params 合同模板相关占位符,array类型,key 是${XXX}的形式,value 是相应的值
  • 合同参与方实体类

合同参与方的实体类为 LxContractActor ,这个类继承自LxUserLxUser 中有的字段他都有,除此之外,它还有以下字段

字段 说明
autoSign 是否自动签署合同:1 是;0不是
locationName 签名位置Id

0x01如何创建合同

LxSDKManager 类有下列几个方法可以创建合同:

  1. 可以通过 syntCreateContract(LxContract contract, LxContractActor[] actors) 创建合同
  2. 可以通过 public string syntGetTokenWithContract(LxUser currentUser, LxContract contract, LxContractActor[] actors) 方法创建合同并且获取 Token 注意此方法获取的 token 为第一个参数的 usertoken,若该user不是合同参与方中的一员,则该用户没有权限查看这个方法生成的合同。

0x02如何作废合同

当你想要作废合同的时候,你可以调用LxSDKManager 类实例下的public string invalidContract(String contractId)方法作废合同。 注意 已经完成(所有参与方都签署了)的合同不支持作废。

0x03如何下载合同

当你想要作废合同的时候,你可以调用LxSDKManager 类实例下的public Dictionary<string, Object> downloadContract(string contractId)方法下载合同。当下载成功的时候会返回一个 Zip 的文件流,失败的话会返回具体的失败信息,示例代码如下

using LxSDK.Library;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace LxSDK.example
{
    /// <summary>
    /// dowmloadContract 的摘要说明
    /// </summary>
    public class dowmloadContract : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            LxSDKManager sdkManager = R.getLxSDKManager();
            string cid = context.Request.Params.Get("contractId");
            
            if (cid == null)
            {
                context.Response.Write("合同id不能为空");
                return;
            }

            Dictionary<string, Object> result = sdkManager.downloadContract(cid);
            if ((bool)result["success"])
            {
                context.Response.ContentType = "application/octet-stream";
                context.Response.AddHeader("Accept-Ranges", "bytes");
                context.Response.AddHeader("Accept-Length", ((byte[])result["body"]).Length.ToString());
                context.Response.AddHeader("Content-Disposition", "attachment; filename=" + cid + ".zip");   
                context.Response.BinaryWrite((byte[])result["body"]);
            }
            else
            {
                context.Response.ContentType = "Content-type: application/json;charset=utf-8";
                context.Response.Write(result["body"]);
            }

            
            return;
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
⚠️ **GitHub.com Fallback** ⚠️