using System;
|
using System.Collections.Generic;
|
using System.IO;
|
using System.Net;
|
using System.Text;
|
using Jayrock.Json.Conversion;
|
using YouZanSDKStandard.Api.Request;
|
using YouZanSDK.Setting;
|
using CommonUtil.Web;
|
using CommonUtil;
|
|
namespace YouZanSDKStandard.Api
|
{
|
public class YouZanClient
|
{
|
/// <summary>
|
/// 调用接口
|
/// </summary>
|
/// <typeparam name="T"></typeparam>
|
/// <param name="request"></param>
|
/// <returns></returns>
|
public static T Execute<T>(IRequest<T> request) where T : YouZanResponse
|
{
|
return Execute<T>(request, string.Empty);
|
}
|
|
|
/// <summary>
|
/// 调用接口
|
/// </summary>
|
/// <typeparam name="T"></typeparam>
|
/// <param name="request"></param>
|
/// <param name="SessionKey"></param>
|
/// <returns></returns>
|
public static T Execute<T>(IRequest<T> request, string SessionKey) where T : YouZanResponse
|
{
|
T t = null;
|
|
#region 检验参数
|
request.Validate();
|
#endregion
|
|
|
//接口参数
|
IDictionary<string, object> dict = request.GetParameters();
|
//Dictionary<string, object> dict = new Dictionary<string, object>();
|
//foreach (var dic in dictionary)
|
//{
|
// dict.Add(dic.Key, dic.Value);
|
//}
|
string reStr = "";
|
YouZanResponse rspBase = null;
|
try
|
{
|
string apiUrl = YouZanSetting.GetApiUrl(request.GetApiName(), request.GetApiVersion(), SessionKey);
|
//reStr = PostJson(apiUrl, dict);
|
reStr = new WebUtil().DoPostWithJson(apiUrl, dict, null);
|
//if (!reStr.Contains("true"))
|
// LogTextHelper.WriteLine("有赞接口返回错误信息", reStr);
|
|
try
|
{
|
//rspBase = JsonConvert.Import(typeof(YouZanResponse), reStr) as YouZanResponse;
|
rspBase = JSONUtil.JsonToObject<YouZanResponse>(reStr);
|
}
|
catch (Exception e)
|
{
|
LogTextHelper.WriteLine("有赞接口转换错误", reStr);
|
}
|
|
if (rspBase != null)
|
{
|
if (rspBase.success)
|
{
|
try
|
{
|
reStr = request.ResponseJsonPrefix(reStr);
|
// t = JsonConvert.Import(typeof(T), reStr) as T;
|
t= JSONUtil.JsonToObject<T>(reStr);
|
}
|
catch (Exception ex)
|
{
|
LogTextHelper.WriteLine("有赞接口转换错误1", reStr);
|
rspBase = new YouZanResponse
|
{
|
code = 500,
|
success = false,
|
message = "接口调用异常" + ex.ToString() + "接口返回:" + reStr,
|
};
|
|
t = (T)rspBase;
|
}
|
}
|
else
|
{
|
reStr = request.ResponseJsonPrefix(reStr);
|
t = JSONUtil.JsonToObject<T>(reStr);
|
}
|
}
|
else
|
{
|
rspBase = new YouZanResponse
|
{
|
code = 500,
|
success = false,
|
message = "接口调用异常接口返回:" + reStr,
|
};
|
|
t = (T)rspBase;
|
}
|
}
|
catch (Exception ex)
|
{
|
rspBase = new YouZanResponse
|
{
|
code = 500,
|
success = false,
|
message = "接口调用异常" + ex.ToString() + "接口返回:" + reStr,
|
};
|
|
t = (T)rspBase;
|
}
|
if (t == null)
|
{
|
rspBase = new YouZanResponse
|
{
|
code = 500,
|
success = false,
|
message = "接口调用异常接口返回:" + reStr,
|
};
|
|
t = (T)rspBase;
|
}
|
|
return t;
|
#region 旧sdk废弃
|
/*
|
//youzan.items.get 长度16
|
int num = apiName.LastIndexOf(".");//num=12
|
string text = apiName.Substring(0, num);//text="youzan.items"
|
string text2 = apiName.Substring(num + 1, apiName.Length - (num + 1));//text2="get"
|
string postUrl = YouZanSetting.OfficialCallUrl + "/" + text + "/3.1.0/" + text2;
|
string postPar = "?access_token=" + SessionKey;
|
if (dictionary.Count > 0)
|
{
|
foreach (var item in dictionary )
|
{
|
postPar += "&" + item.Key + "=" + item.Value;
|
}
|
}
|
// string reStr = postMethod(postUrl, postPar, false);
|
Auth auth = new Token(SessionKey);
|
YZClient yzClient = new DefaultYZClient(auth);
|
string reStr="" ;
|
switch (apiName)
|
{
|
case "youzan.scrm.customer.search": reStr = yzClient.Invoke(apiName, "3.1.0", "Post", dict, null); ; break;
|
case "youzan.trades.sold.outer.get": reStr = yzClient.Invoke(apiName, "3.0.0", "get", dict, null); ; break;
|
case "youzan.trades.sold.get": reStr = yzClient.Invoke(apiName, "4.0.0", "get", dict, null); ; break;
|
}
|
YouZanResponse rspBase;
|
try
|
{
|
rspBase = JsonConvert.Import(typeof(YouZanResponse), reStr) as YouZanResponse;
|
|
if (rspBase != null)
|
{
|
if (rspBase.error_response != null)
|
{
|
rspBase.IsError = true;
|
}
|
|
|
|
|
#region 返回值处理
|
if (rspBase.IsError)
|
{
|
t = (T) rspBase;
|
}
|
else
|
{
|
#region Response对象处理
|
try
|
{
|
reStr = request.ResponseJsonPrefix(reStr);
|
t = JsonConvert.Import(typeof(T), reStr) as T;
|
}
|
catch(Exception ex)
|
{
|
string exStr = ex.ToString();
|
}
|
#endregion
|
}
|
#endregion
|
|
}
|
else
|
{
|
rspBase = new YouZanResponse
|
{
|
IsError = true,
|
error_response = {msg = "接口调用异常"}
|
};
|
t = (T)rspBase;
|
}
|
}
|
catch (Exception ex)
|
{
|
rspBase = new YouZanResponse
|
{
|
IsError = true,
|
error_response = { msg = "接口调用异常" }
|
};
|
t = (T) rspBase;
|
}
|
return t;
|
*/
|
#endregion
|
}
|
|
|
|
|
|
/// <summary>
|
/// post调用求情
|
/// </summary>
|
/// <param name="postUrl">请求地址</param>
|
/// <param name="pars">请求参数</param>
|
/// <param name="isLogin"></param>
|
/// <returns></returns>
|
private static string postMethod(string postUrl, string pars, bool isLogin = false)
|
{
|
byte[] postData = System.Text.Encoding.UTF8.GetBytes(pars);
|
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(postUrl);
|
request.ContentType = "application/x-www-form-urlencoded";
|
request.Method = "post";
|
request.Timeout = 5000;
|
request.ContentLength = postData.Length;
|
|
System.IO.Stream requestStream = request.GetRequestStream();
|
requestStream.Write(postData, 0, postData.Length);
|
requestStream.Close();
|
|
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
|
|
var ecoding = isLogin ? Encoding.Default : Encoding.UTF8;
|
|
System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream(), ecoding);
|
|
string str = sr.ReadToEnd();//读取获取到的参数
|
sr.Close();
|
response.Close();
|
return str;
|
|
}
|
|
/// <summary>
|
/// PostJson请求
|
/// </summary>
|
/// <param name="url"></param>
|
/// <param name="postObj"></param>
|
/// <returns></returns>
|
public static string PostJson(string url, object postObj)
|
{
|
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
|
httpWebRequest.ContentType = "application/json";
|
httpWebRequest.Method = "POST";
|
var postData = Jayrock.Json.Conversion.JsonConvert.ExportToString(postObj);
|
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
|
{
|
streamWriter.Write(postData);
|
streamWriter.Flush();
|
streamWriter.Close();
|
}
|
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
|
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
|
{
|
var result = streamReader.ReadToEnd();
|
return result;
|
}
|
}
|
|
public static string PostJsonSpecial(string url, string postData)
|
{
|
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
|
httpWebRequest.ContentType = "application/json";
|
httpWebRequest.Method = "POST";
|
|
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
|
{
|
streamWriter.Write(postData);
|
streamWriter.Flush();
|
streamWriter.Close();
|
}
|
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
|
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
|
{
|
var result = streamReader.ReadToEnd();
|
return result;
|
}
|
}
|
|
}
|
}
|