首先得申请开发者账号,貌似现在只能已公司名义填写相关信息,有账号后,登陆开发者中心,到接口处申请你所需要的接口,等待审核,这个过程有点长,时间在一个星期左右不等,不然没有接口的使用权限。
开发时里面有对应的相关文档,建议自己COPY下来,因没有下载的,而且还是分开几种,所以还是自己COPY下来写在一个文档里查看起来比较好。
部分原文(开发文件部分):
-------------------------------------------------------------------------------
1、中通支持的消息接收方式为 HTTPPOST 和 GET。
如果以 HTTP POST 方式发送,请求方法的编码格式:
"application/x-www-form-urlencoded;charset=GBK"。
如果以GET方式发送,请将参数链接在 URL 的后面。
2、在 POST 时用 "data" 字段表示要发送的 JSON 内容。
3、在 POST 时用 "data_digest" 字段进行签名验证。签名使用 MD5 方式,对 data 的内容进行签名。
原理为:通知内容 JSON + partnerID (联调时分配的签名),然后进行 MD5,转换为 Base64 字符串。
详细解释如下:
假设 JSON 内容为: JSON,parternID为 123456 那么要签名的内容为 JSON123456(默认GBK 编
码),经过 md5 和 base64 后的内容就为 yhmQhg2ZiWCMc91nH0/vsg = = 最终要发送的数据为 :
data = JSON & data_digest = yhmQhg2ZiWCMc91nH0/vsg == & msg_type=? & company_id =?。
(data_digest = base64(md5(data+key)))
4、要求合作商收到消息后,一定要验证数据是否完整及正确。
5、合作商收到消息后,内容不正确?请检查字符集是否为 GBK/UTF-8;所有的参数都是通过 URL 编码
传送的,符合 HTTP 协议,注意客户端是否解码正确,有些控件已经自带 URL 解码功能,请开发人
员注意。
注意:有些接口不需要使用parternID对数据进行签名校验
-------------------------------------------------------------------------------
因为在签名这部分,经常会出现S02的错误,所以在签名的时候,最好用文档里的字符串先测试一下,看得到的结果是不是一样的,不然只能是签名错误。
C#:加密方法和请求方法可以用开发文档提供的(下面是自己写的方法)
private void btn_post_Click(object sender, EventArgs e)
{
string di = null;
string jobno = "123456";//单号
string k = "xxx";//key
di = "['" + jobno + "']" + k;
di = Base64(MDD5(di, Encoding.UTF8));
string url = "接口";
string postDate = "data=['"+ jobno +"']&data_digest=" + di + "&msg_type=xxxxxx&company_id=xxxxxx=" + jobno + "";
byte[] ByteArray = Encoding.UTF8.GetBytes(postDate);
HttpWebRequest mHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
mHttpWebRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
mHttpWebRequest.Method = "POST";
mHttpWebRequest.ContentLength = ByteArray.Length;
Stream ReqStream = mHttpWebRequest.GetRequestStream();
ReqStream.Write(ByteArray, 0, ByteArray.Length);
ReqStream.Close();
//接收返回信息:
HttpWebResponse response = (HttpWebResponse)mHttpWebRequest.GetResponse();
StreamReader php = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string Message = php.ReadToEnd(); //接收到的请求返回信息,然后自己解析得到自己想要的信息
}
/// <summary>
/// MD5
/// </summary>
public static byte[] MDD5(string input, Encoding encodeType)
{
MD5 md5Hash = MD5.Create();
return md5Hash.ComputeHash(encodeType.GetBytes(input));
}
/// <summary>
/// Base64
/// </summary>
/// <param name="md5"></param>
/// <returns></returns>
public static string Base64(byte[] md5)
{
return Convert.ToBase64String(md5);
}