[原创]C#植入友商网在线服务并实现同步用户注册接口(三)
《从友商网数据库检查用户是否存在》
我们在注册页面输入新用户名系统会自动检查该名称是否已经注册,流程是这样的:
1.首先检查自己的数据库,如果已经存在直接提示用户,如果不存在执行第2步.
2.检查友商网的数据库.
第一个检测非常容易写个sql就能解决,关键是第2步如果实现查找友商网的数据库呢?
先看接口说明书:
接口举例:
http://agent.youshang.com/federation/commonservice/servicePortal.do? partnerId=1021& cipherCode=value&iv=value
该接口同步用户的信息,并且可以绑定到同一个合作伙伴下的公司。
必须有的参数包括partnerId,所以用户必须首先注册成为合作伙伴,否则服务会无法正常运行。
http传送的数据必须包含cipherCode,iv,否则服务会无法正常运行。
xml中类型是<type>userLogin</type>
默认算法是AES,不带明文。
接口参数:
序号 | 参数名 | 名称 | 备注 | 备注 |
1. | userAccount | 登录名 | 登录名 | 必填 |
1. 2. | time | 系统当前时间 | 此请求发起的时间,目前定为发起时间的20分钟内有效, 超时请求将被视为非法。从January 1, 1970 UTC(coordinated universal time)开始计数的毫秒数,注意正确设置系统时间。 | 必填 |
xml中类型是<type>userLogin</type> 说明只需要修改type就行
//将type设为userLogin
private string getLoginXML(string userAccount)
{
string xml =
"<?xml version=\"1.0\" encoding = \"utf-8\"?>" +
" <request>" +
" <type>userLogin</type>" +
" <data>" +
" <attr name=\"userAccount\">{0}</attr>" +
" <attr name=\"time\">{1}</attr>" +
" </data>" +
" </request>";
string utc = DateTimeToUTC(DateTime.Now).ToString();
// utc = utc.Substring(0, utc.IndexOf("."));
string ret = string.Format(xml, userAccount, utc);
return ret;
}
接口说明书指定系统时间为UTC,需要写个函数转换
//WINDOWS时间转UTC时间
private long DateTimeToUTC(DateTime vDate)
{
TimeZone tz = TimeZone.CurrentTimeZone;
vDate = vDate.ToUniversalTime();
DateTime dtZone = new DateTime(1970, 1, 1, 0, 0, 0, 0);
TimeSpan ts = vDate.Subtract(dtZone);
return (long)ts.TotalMilliseconds;
}
检查用户是否存在的代码
/// <summary>
///友商网检查用户登录接口
/// </summary>
/// <param name="userAccount"></param>
/// <returns></returns>
public bool Exists(string userAccount)
{
try
{
string url = "http://agent.youshang.com/federation/commonservice/servicePortal.do"; //友商网接口
string urlParam = "partnerId={0}&cipherCode={1}&iv={2}"; //接口的URL参数
string iv = AES_Crypto.GetIv(16); //生成iv代码
string xmlLogin = this.getLoginXML(userAccount); //TUser对象转换为xml文件
//AES加密用户XML数据
string cipherCode = AES_Crypto.AESEncrypt(xmlLogin, _aesKey, iv);
cipherCode = HttpUtility.UrlEncode(cipherCode);//HTML ENCODE
iv = HttpUtility.UrlEncode(iv);//HTML ENCODE
urlParam = string.Format(urlParam, _partnerID, cipherCode, iv);
string response = this.HttpPost(url, urlParam); //提交数据....
return response.Trim().Length > 0;
}
catch //如友商网不存在该用户,会抛出服务器内部错误
{
//在这里接收到异常视该用户不存在
return false;
}
}
扫一扫加作者微信