| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Net.Http;
- using System.Text;
- using System.Threading.Tasks;
- using Winsoft.GOV.XF.WebApi.WXCore.Models;
- using Newtonsoft.Json;
- using Winsoft.GOV.XF.WebApi.WXCore.Data;
- using Microsoft.Extensions.Logging;
- using System.Net;
- namespace Winsoft.GOV.XF.WebApi.WXCore.Services
- {
- public class XFApiService : BaseService
- {
- public delegate void OnFails(string message);
- BundlesService _bundlesService;
- public XFApiService(BundlesService bundlesService, XFDbContext context, ILoggerFactory loggerFactory):base(context, loggerFactory)
- {
- _bundlesService = bundlesService;
- }
- /// <summary>
- /// 提交信件
- /// </summary>
- /// <param name="b">信件内容</param>
- /// <param name="onFails">失败回调</param>
- /// <returns></returns>
- public async Task<bool> PostLetter(Bundle b, string absoluteUri, OnFails onFails)
- {
- string d = b.Describe;
- if (b.Assets.Count() > 0)
- d += "(此信件内容含有其他多媒体信息,详细请复制网址到浏览器打开:" + _bundlesService.GenerateBaseURL(b, absoluteUri) + ")";
- string s = "advice={0};type={1};name={2};phone={3};is_public={4};content={5};title={6};county_id={7};unit_id={8};sswz=8;ly=2; user_id={9}";
- s = String.Format(s, b.Advice, b.Type.ToString(), b.Name, b.Mobile, b.IsPublic.ToString(), d, b.Title, b.County_id, b.Unit_id, b.OpenID);
-
- XFApiResult rObj = await HttpPostAsync<XFApiResult>("http://118.178.118.50/test1/letter/submitLetter;", s, onFails);
- if (rObj == null)
- return false;
- if (rObj.Data == null || !rObj.Data.Success)
- {
- Logger.LogError("数据提交省统一平台失败,原因:{0}", rObj.Message);
- onFails(string.Format("数据提交省统一平台失败,原因:{0}", rObj.Message));
- return false;
- }
- b.SearchCode = rObj.Data.Data;
- _bundlesService.Update(b);
- return true;
- //if (rObj != null)
- //{
- // b.SearchCode = rObj.Data.Data;
- // return true;
- //}
- //return false;
- }
- /// <summary>
- /// 查询码是否有效
- /// </summary>
- /// <param name="queryCode">查询码</param>
- /// <param name="onFails">失败回调</param>
- /// <returns></returns>
- public async Task<bool> QueryCodeIsValid(string queryCode, OnFails onFails)
- {
- XFApiResult rObj = await HttpPostAsync<XFApiResult>("http://<服务器IP>/query/code;", "query_code=" + queryCode, onFails);
- if (rObj == null)
- return false;
- if (rObj.Data == null || !rObj.Data.Success)
- {
- Logger.LogError("数据提交省统一平台失败,原因:{0}", rObj.Message);
- onFails(string.Format("数据提交省统一平台失败,原因:{0}", rObj.Message));
- return false;
- }
- return true;
- }
- /// <summary>
- /// 查询信件详细信息
- /// </summary>
- /// <param name="queryCode">查询码</param>
- /// <param name="onFails">失败回调</param>
- /// <returns></returns>
- public async Task<Bundle> GetBundleByQueryCode(string queryCode, OnFails onFails)
- {
- XFApiResult rObj = await HttpPostAsync<XFApiResult>("http://<服务器IP>/query/letterDetail;", "query_code="+ queryCode, onFails);
- if (rObj == null)
- return null;
- if (rObj.Data == null || !rObj.Data.Success)
- {
- Logger.LogError("数据提交省统一平台失败,原因:{0}", rObj.Message);
- onFails(string.Format("数据提交省统一平台失败,原因:{0}", rObj.Message));
- return null;
- }
- Bundle bundle = new Bundle();
- return bundle;
- }
- /// <summary>
- /// 是否可评价
- /// </summary>
- /// <param name="letter_id"></param>
- /// <param name="onFails"></param>
- /// <returns></returns>
- public async Task<bool> IsEvaluate(string letter_id, OnFails onFails)
- {
- XFApiIsEvaluateResult rObj = await HttpPostAsync<XFApiIsEvaluateResult>("http://<服务器IP>/query/letterDetail;", "letter_id=" + letter_id, onFails);
- if (rObj == null)
- return false;
- if (rObj.Data == null)
- {
- Logger.LogError("数据提交省统一平台失败,原因:{0}", rObj.Message);
- onFails(string.Format("数据提交省统一平台失败,原因:{0}", rObj.Message));
- return false;
- }
- return rObj.Data.SFKPJ;
- }
- /// <summary>
- /// 评价
- /// </summary>
- /// <param name="e"></param>
- /// <param name="onFails"></param>
- /// <returns></returns>
- //http://<服务器IP>/query/submitEvaluate
- public async Task<bool> SubmitEvaluate(EvaluateModel e, OnFails onFails)
- {
- //Dictionary<string, string> d = e.ToDictionary();
- //XFApiResult rObj = await HttpPostAsync<XFApiResult>("http://<服务器IP>/query/letterDetail", d, onFails);
- //if (rObj == null)
- // return false;
- //if (rObj.Data == null || !rObj.Data.Success)
- //{
- // Logger.LogError("数据提交省统一平台失败,原因:{0}", rObj.Message);
- // onFails(string.Format("数据提交省统一平台失败,原因:{0}", rObj.Message));
- // return false;
- //}
- return true;
- }
- /// <summary>
- /// POST 异步
- /// </summary>
- /// <param name="url"></param>
- /// <param name="postStream"></param>
- /// <param name="encoding"></param>
- /// <param name="timeOut"></param>
- /// <returns></returns>
- async Task<T> HttpPostAsync<T>(string url, string formData, OnFails onFails)
- {
- HttpClientHandler handler = new HttpClientHandler();
- HttpClient client = new HttpClient(handler);
- MemoryStream ms = new MemoryStream();
- HttpContent hc = new StreamContent(ms);
- hc.Headers.Add("APIKey", "MUA5NmU3OTIxOEPSOFTDQ1YTMzMDExMg");
- var r = await client.PostAsync(url + WebUtility.UrlEncode(formData), hc);
- if (r.StatusCode != HttpStatusCode.OK)
- {
- Logger.LogError("省统一平台异常反馈:状态“{0}”", r.StatusCode);
- onFails(string.Format("省统一平台异常反馈:状态“{0}”", r.StatusCode));
- return default(T);
- }
- byte[] tmp = await r.Content.ReadAsByteArrayAsync();
- string rStr = Encoding.UTF8.GetString(tmp);
- T rObj = JsonConvert.DeserializeObject<T>(rStr);
- if (rObj == null)
- {
- Logger.LogError("数据提交省统一平台失败,原因:{0}", "数据为空");
- onFails(string.Format("数据提交省统一平台失败,原因:{0}", "数据为空"));
- return default(T);
- }
- return rObj;
- }
- /// <summary>
- /// POST 同步
- /// </summary>
- /// <param name="url"></param>
- /// <param name="postStream"></param>
- /// <param name="encoding"></param>
- /// <param name="timeOut"></param>
- /// <returns></returns>
- string HttpPost(string url, Dictionary<string, string> formData = null, Encoding encoding = null, int timeOut = 10000)
- {
- HttpClientHandler handler = new HttpClientHandler();
- HttpClient client = new HttpClient(handler);
- MemoryStream ms = new MemoryStream();
- FillFormDataStream(formData, ms);//填充formData
- HttpContent hc = new StreamContent(ms);
- //client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html"));
- //client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xhtml+xml"));
- //client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml", 0.9));
- //client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("image/webp"));
- //client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("*/*", 0.8));
- //hc.Headers.Add("UserAgent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36");
- //hc.Headers.Add("Timeout", timeOut.ToString());
- //hc.Headers.Add("KeepAlive", "true");
- var t = client.PostAsync(url, hc);
- t.Wait();
- var t2 = t.Result.Content.ReadAsByteArrayAsync();
- return encoding.GetString(t2.Result);
- }
- /// <summary>
- /// 组装QueryString的方法
- /// 参数之间用&连接,首位没有符号,如:a=1&b=2&c=3
- /// </summary>
- /// <param name="formData"></param>
- /// <returns></returns>
- string GetQueryString(Dictionary<string, string> formData)
- {
- if (formData == null || formData.Count == 0)
- {
- return "";
- }
- StringBuilder sb = new StringBuilder();
- var i = 0;
- foreach (var kv in formData)
- {
- i++;
- sb.AppendFormat("{0}={1}", kv.Key, kv.Value);
- if (i < formData.Count)
- {
- sb.Append("&");
- }
- }
- return sb.ToString();
- }
- /// <summary>
- /// 填充表单信息的Stream
- /// </summary>
- /// <param name="formData"></param>
- /// <param name="stream"></param>
- void FillFormDataStream(Dictionary<string, string> formData, Stream stream)
- {
- string dataString = GetQueryString(formData);
- var formDataBytes = formData == null ? new byte[0] : Encoding.UTF8.GetBytes(dataString);
- stream.Write(formDataBytes, 0, formDataBytes.Length);
- stream.Seek(0, SeekOrigin.Begin);//设置指针读取位置
- }
- }
- }
|