C#对接电子签章
前言
第一次写博客,记录下最近所做项目开发历程,遇到了很多坑,后续要坚持写博客,最近公司接到一个对接电子签章平台得项目,蛮有意思得,随着时代得发展,纸质得签名盖章逐渐被替代了,电子签名,电子签章逐渐普及,比如去银行办理卡证,去政府单位办理相关得都用到到了电子签章,本文就介绍了C#如何对接电子签章。
一、电子签章是什么?
电子合同订立的法律效力与纸质版的书面合同订立的法律效力一样。依据《电子签名法》第三条规定,民事活动中的合同或者其他文件、单证等文书,当事人可以约定使用或者不使用电子签名、数据电文。当事人约定使用电子签名、数据电文的文书,不得仅因为其采用电子签名、数据电文的形式而否定其法律效力,当然这也是我去百度得,毕竟我也不是专业得,有兴趣得小伙伴可以去自行百度~~
二、使用步骤
首先对接得平台会提供相应得接口文档这个就不多做叙述了。按照文档要求对接即可
1.根据要求获取token
代码如下:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Web;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Text;
//调试模式获取token Get请求
public static string TokenMQ()
{
string tokens = "";
string appsecret = ConfigurationManager.AppSettings["appsecret"];
string appId = ConfigurationManager.AppSettings["appId"];
string url = ConfigurationManager.AppSettings["Url"] + "/base/login/oauth2/token?appId=" + appId + "&appKey=" + appsecret;
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
request.KeepAlive = true;
request.AllowAutoRedirect = true;
request.Timeout = 20 * 1000;
request.UserAgent = "Apache-HttpClient/4.1.1";
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
JObject obj = JObject.Parse(responseString);
string Code = obj["code"].ToString();
if (Code == "0")
{
tokens = obj["data"]["accessToken"].ToString();
}
else
{
tokens = obj["message"].ToString();
}
//要求token前使用时要加" "
return " " + tokens;
}
//加密模式token
public static string Token()
{
string tokens = "";
string timestamp = Convert.ToString(DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss").Replace("-", ""));//获取当前系统时间
string appsecret = ConfigurationManager.AppSettings["appsecret"];
string appId = ConfigurationManager.AppSettings["appId"];
string sign = SHA256EncryptString(timestamp + appsecret);
StringBuilder strb = new StringBuilder();
strb.AppendLine("{");
strb.AppendLine("\"appId\":\"" + appId + "\",");
strb.AppendLine("\"sign\":\"" + sign + "\",");
strb.AppendLine("\"timestamp\":\"" + timestamp + "\"");
strb.AppendLine("}");
WebClient client = new WebClient();
client.Encoding = Encoding.UTF8;
string url = ConfigurationManager.AppSettings["Url"] + "/base/login/oauth2/accessToken";
byte[] postDatas = Encoding.UTF8.GetBytes(strb.ToString());
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.ContentLength = postDatas.Length;
request.KeepAlive = true;
request.AllowAutoRedirect = true;
request.Timeout = 20 * 1000;
client.Headers.Add(HttpRequestHeader.ContentType, "application/json; charset=UTF-8");
request.UserAgent = "Apache-HttpClient/4.1.1";
byte[] rvData = client.UploadData(url, postDatas);
string rv = Encoding.UTF8.GetString(rvData);
JObject obj = JObject.Parse(rv);
string Code = obj["code"].ToString();
if (Code == "0")
{
tokens = obj["data"]["accessToken"].ToString();
}
else
{
tokens = obj["message"].ToString();
}
//要求token前使用时要加" "
return " "+tokens;
}
2.相关接口调用
代码如下:
[WebMethod(Description = "查询企业信息接口")]
public string SelectCompanys(string companyName)
{
string Tokens = Token();
//string companyId = "";//企业在本地电子签系统的唯一标识
//string tpOrgId = "";//企业在第三方业务系统的唯一标识
//string companyName = "";//公司名称
//string creditNo = "";//统一社会信用代码
string url = ConfigurationManager.AppSettings["Url"] + "/user/api/company/getCompany?companyName=" + companyName;
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
request.KeepAlive = true;
request.AllowAutoRedirect = true;
request.Timeout = 20 * 1000;
request.UserAgent = "Apache-HttpClient/4.1.1";
request.ContentType = "application/x-www-form-urlencoded";
request.Headers.Add("Authorization", "bearer" + Tokens);
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
//前端解析json返回
return responseString;
}
总结
代码完了然后来讲讲遇到得一些坑吧
1.第一个就是第三方得文档给的一言难尽,一个接口差不多上百个字段,只言片语完全靠猜,折磨人,不过这个需要点耐心,需要去反复得调试,其中乐趣就需要用到的小伙伴自行体会妙趣。
2.这个代码得东西多了就需要细致和耐心了,可能一个字符和一个大小写能搞几十分钟或者几小时,这个属于自己的本身的原因,以后加以改善,做事仔细点
3.程序员这个行业拼的就是谁更努力谁更愿意去学,加油吧,骚年~~