taobaoHelper.cs 52 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967
  1. using BizCom;
  2. using Newtonsoft.Json;
  3. using Newtonsoft.Json.Linq;
  4. using SiteCore.Redis;
  5. using SiteCore.taoObj;
  6. using SQLData;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Data;
  10. using System.Linq;
  11. using System.Security.Cryptography;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. using System.Web;
  15. using System.Web.Script.Serialization;
  16. using System.Web.Security;
  17. using SiteCore;
  18. using static SiteCore.taoObj.Refunds_receive_get_response_Obj;
  19. using SiteCore.nuonuo;
  20. using ErpServer.Redis;
  21. namespace ErpServer
  22. {
  23. public class taobaoHelper
  24. {
  25. //6201c178b49904f922503da5egia6dc45827b1d9613aefb2201404768885
  26. //session: 6100309b522c174d816e5218e193dd3ac90a91c452f96bc2201404768885
  27. //refresh_token: 6101909f794ed6ad8101c03b701a197e0aca9d14cf95acf2201404768885
  28. static string appid = "21407504";
  29. static string session_key = "";
  30. static string api_url = "http://xy.ifireant.com/taobaoapi";//http://api.taoesoft.com/Api.aspx
  31. static string yun_api_url = "http://xy.ifireant.com/taobaoapi";
  32. //static string api_url = "http://api.taoesoft.com/Api.aspx?action=executeTopApi&methodName={0}&requestObjectJson={1}&SessionKey={2}&sign={3}";
  33. static string auth_url = "https://oauth.taobao.com/authorize?response_type=code&client_id="+appid+"&redirect_uri=http://api.taoesoft.com/TaobaoTitle_Callback.aspx&view=web&state={1}";
  34. static string tmc_url = "http://api.taoesoft.com/api.aspx?action=openTmc&appkey={0}&SessionKey={1}&nick={2}&groupName=lingtao&topics={3}&sign={4}";
  35. static string tmc_topics = "taobao_trade_TradeCreate,taobao_trade_TradeLogisticsAddressChanged,taobao_trade_TradeMemoModified,taobao_trade_TradeRated,taobao_trade_TradeBuyerPay,taobao_trade_TradeSuccess,taobao_trade_TradePartlyConfirmPay,taobao_trade_TradePartlyRefund,taobao_trade_TradeDelayConfirmPay,taobao_trade_TradeSellerShip,taobao_trade_TradeClose,taobao_trade_TradeCloseAndModifyDetailOrder,taobao_trade_TradeModifyFee";
  36. static HttpHelper tb_http = new HttpHelper();
  37. #region private
  38. private static string SignTopRequest(IDictionary<string,string> parameters,string secret,string signMethod)
  39. {
  40. // 第一步:把字典按Key的字母顺序排序
  41. IDictionary<string,string> sortedParams = new SortedDictionary<string,string>(parameters,StringComparer.Ordinal);
  42. IEnumerator<KeyValuePair<string,string>> dem = sortedParams.GetEnumerator();
  43. // 第二步:把所有参数名和参数值串在一起
  44. StringBuilder query = new StringBuilder();
  45. if (signMethod == "md5")
  46. {
  47. query.Append(secret);
  48. }
  49. while (dem.MoveNext())
  50. {
  51. string key = dem.Current.Key;
  52. string value = dem.Current.Value;
  53. if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))
  54. {
  55. query.Append(key).Append(value);
  56. }
  57. }
  58. // 第三步:使用MD5/HMAC加密
  59. byte[] bytes;
  60. if (signMethod == "hmac")
  61. {
  62. HMACMD5 hmac = new HMACMD5(Encoding.UTF8.GetBytes(secret));
  63. bytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(query.ToString()));
  64. }
  65. else
  66. {
  67. query.Append(secret);
  68. MD5 md5 = MD5.Create();
  69. bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(query.ToString()));
  70. }
  71. // 第四步:把二进制转化为大写的十六进制
  72. StringBuilder result = new StringBuilder();
  73. for (int i = 0; i < bytes.Length; i++)
  74. {
  75. result.Append(bytes[i].ToString("X2"));
  76. }
  77. return result.ToString();
  78. }
  79. /// <summary>
  80. /// MD5加密
  81. /// </summary>
  82. /// <param name="s"></param>
  83. /// <returns></returns>
  84. private static string Md5(string s)
  85. {
  86. using (var md5 = MD5.Create())
  87. {
  88. var result = md5.ComputeHash(Encoding.Default.GetBytes(s));
  89. var strResult = BitConverter.ToString(result);
  90. return strResult.Replace("-","").ToUpper();
  91. }
  92. }
  93. public static string GetSign()
  94. {
  95. string code = "";
  96. int sc = DateTimeToUnixTime(DateTime.Now) / 60;
  97. code = Md5(Md5(sc+ "1b46af52a8dcaa822b98b1be9d447bb2").ToLower()).ToLower();
  98. code = System.Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(code));
  99. return code;
  100. }
  101. public static int DateTimeToUnixTime(DateTime dateTime)
  102. {
  103. return (int)(dateTime - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalSeconds;
  104. }
  105. private static void setParmsHead(string session,ref List<string> lst)
  106. {
  107. lst.Add("action=executeTopApi");
  108. lst.Add("format=1");
  109. lst.Add("SessionKey="+session);
  110. lst.Add("sign=" + GetSign());
  111. lst.Add("isItemApi=3");
  112. }
  113. private static void setParmsHead2(string session, ref List<string> lst)
  114. {
  115. lst.Add("action=executeTopApi");
  116. lst.Add("format=1");
  117. lst.Add("SessionKey=" + session);
  118. lst.Add("sign=" + GetSign());
  119. }
  120. #endregion
  121. private static readonly object shopkey_Flag = new object();
  122. private static Dictionary<string, string> _shopKeyDics = null;
  123. public static Dictionary<string, string> ShopKeyDics
  124. {
  125. get
  126. {
  127. if (_shopKeyDics == null || _shopKeyDics.Count < 1)
  128. {
  129. _shopKeyDics = erpRedis.RedisHelper.StringGet<Dictionary<string, string>>("erp_shpkey");
  130. if (_shopKeyDics == null)
  131. {
  132. lock (shopkey_Flag)
  133. {
  134. if (_shopKeyDics == null)
  135. {
  136. _shopKeyDics = new Dictionary<string,string>();
  137. string sql = "select appsecret as skey,shopname as name from ce_erpshop where taobao_user_id<>''";
  138. DataTable dt = SqlHelper.ExecuteDataset(sql).Tables[0];
  139. if (dt != null)
  140. {
  141. foreach (DataRow dr in dt.Rows)
  142. {
  143. _shopKeyDics.Add(dr["name"].ToString(), dr["skey"].ToString());
  144. }
  145. }
  146. erpRedis.RedisHelper.StringSet("erp_shpkey", _shopKeyDics,TimeSpan.FromHours(10));
  147. }
  148. }
  149. }
  150. }
  151. return _shopKeyDics;
  152. }
  153. }
  154. //appkey={0}&SessionKey={1}&nick={2}&groupName=lingtao&topics={3}&sign={4}";
  155. public static bool openTmc(string sessionKey,string nick)
  156. {
  157. string url = string.Format(tmc_url,appid,sessionKey,nick,tmc_topics, GetSign());
  158. HttpItem item = new HttpItem()
  159. {
  160. URL =url
  161. };
  162. HttpResult hResult = tb_http.GetHtml(item);
  163. string html = hResult.Html;
  164. if(html=="" || html== "True")
  165. {
  166. string sql = string.Format("update ce_erpshop set istmc=1 where appsecret='{0}' and taobao_user_nick='{1}'", sessionKey, nick);
  167. SqlHelper.ExecuteNonQuery(sql);
  168. return true;
  169. }
  170. else
  171. {
  172. return false;
  173. }
  174. }
  175. /// <summary>
  176. /// 获取单笔交易的详细信息
  177. /// </summary>
  178. /// <param name="sessionKey"></param>
  179. /// <param name="orderid"></param>
  180. /// <returns></returns>
  181. public static string TradeFullinfoGet(string sessionKey,string orderid)
  182. {
  183. //json参数
  184. var res_obj = new
  185. {
  186. fields = "seller_nick,buyer_nick,title,type,created,tid,seller_rate,buyer_flag,buyer_rate,status,payment,adjust_fee,post_fee,total_fee,pay_time,end_time,modified,consign_time,buyer_obtain_point_fee,point_fee,real_point_fee,received_payment,commission_fee,buyer_memo,seller_memo,alipay_no,alipay_id,buyer_message,pic_path,num_iid,num,price,buyer_alipay_no,receiver_name,receiver_state,receiver_city,receiver_district,receiver_address,receiver_zip,receiver_mobile,receiver_phone,seller_flag,seller_alipay_no,seller_mobile,seller_phone,seller_name,seller_email,available_confirm_fee,has_post_fee,timeout_action_time,snapshot_url,cod_fee,cod_status,shipping_type,trade_memo,is_3D,buyer_email,buyer_area,trade_from,is_lgtype,is_force_wlb,is_brand_sale,buyer_cod_fee,discount_fee,seller_cod_fee,express_agency_fee,invoice_name,service_orders,credit_cardfee,orders,trade_ext",
  187. tid = orderid
  188. };
  189. string ro_json = JsonConvert.SerializeObject(res_obj);
  190. //post参数
  191. List<string> postLst = new List<string>();
  192. setParmsHead(sessionKey, ref postLst);
  193. postLst.Add("methodName=taobao.trade.fullinfo.get");
  194. postLst.Add("requestObjectJson=" + HttpUtility.UrlEncode(ro_json));
  195. HttpItem item = new HttpItem()
  196. {
  197. URL = api_url,
  198. Method = "POST",
  199. ContentType = "application/x-www-form-urlencoded",
  200. Postdata = string.Join("&", postLst.ToArray())
  201. };
  202. HttpResult hResult = tb_http.GetHtml(item);
  203. return hResult.Html;
  204. //return html;
  205. }
  206. /// <summary>
  207. /// 查询卖家已卖出的交易数据(根据创建时间)
  208. /// </summary>
  209. /// <param name="sessionKey"></param>
  210. /// <param name="orderid"></param>
  211. /// <returns></returns>
  212. public static string TradesSoldGet(string sessionKey)
  213. {
  214. //json参数
  215. var res_obj = new
  216. {
  217. fields = "seller_nick,buyer_nick,title,type,created,tid,seller_rate,buyer_flag,buyer_rate,status,payment,adjust_fee,post_fee,total_fee,pay_time,end_time,modified,consign_time,buyer_obtain_point_fee,point_fee,real_point_fee,received_payment,commission_fee,buyer_memo,seller_memo,alipay_no,alipay_id,buyer_message,pic_path,num_iid,num,price,buyer_alipay_no,receiver_name,receiver_state,receiver_city,receiver_district,receiver_address,receiver_zip,receiver_mobile,receiver_phone,seller_flag,seller_alipay_no,seller_mobile,seller_phone,seller_name,seller_email,available_confirm_fee,has_post_fee,timeout_action_time,snapshot_url,cod_fee,cod_status,shipping_type,trade_memo,is_3D,buyer_email,buyer_area,trade_from,is_lgtype,is_force_wlb,is_brand_sale,buyer_cod_fee,discount_fee,seller_cod_fee,express_agency_fee,invoice_name,service_orders,credit_cardfee,orders,trade_ext"
  218. };
  219. string ro_json = JsonConvert.SerializeObject(res_obj);
  220. //post参数
  221. List<string> postLst = new List<string>();
  222. setParmsHead(sessionKey, ref postLst);
  223. postLst.Add("methodName=taobao.trades.sold.get");
  224. postLst.Add("requestObjectJson=" + HttpUtility.UrlEncode(ro_json));
  225. HttpItem item = new HttpItem()
  226. {
  227. URL = api_url,
  228. Method = "POST",
  229. ContentType = "application/x-www-form-urlencoded",
  230. Postdata = string.Join("&", postLst.ToArray())
  231. };
  232. HttpResult hResult = tb_http.GetHtml(item);
  233. return hResult.Html;
  234. //return html;
  235. }
  236. /// <summary>
  237. /// 查询退款列表(根据开始结束时间)
  238. /// </summary>
  239. /// <param name="sessionKey"></param>
  240. /// <param name="orderid"></param>
  241. /// <returns></returns>
  242. public static string RefundsReceiveGet(string sessionKey,DateTime stime,DateTime etime)
  243. {
  244. //json参数
  245. var res_obj = new
  246. {
  247. fields = "refund_id,tid,title,buyer_nick,seller_nick,total_fee,status,created,refund_fee,oid,good_status,company_name,sid,payment,reason,desc,has_good_return,modified,order_status,refund_phase",
  248. start_modified = stime,
  249. end_modified = etime
  250. };
  251. string ro_json = JsonConvert.SerializeObject(res_obj);
  252. //post参数
  253. List<string> postLst = new List<string>();
  254. setParmsHead(sessionKey, ref postLst);
  255. postLst.Add("methodName=taobao.refunds.receive.get");
  256. postLst.Add("requestObjectJson=" + HttpUtility.UrlEncode(ro_json));
  257. HttpItem item = new HttpItem()
  258. {
  259. URL = api_url,
  260. Method = "POST",
  261. ContentType = "application/x-www-form-urlencoded",
  262. Postdata = string.Join("&", postLst.ToArray())
  263. };
  264. HttpResult hResult = tb_http.GetHtml(item);
  265. return hResult.Html;
  266. //return html;
  267. }
  268. //处理退款列表
  269. public static void GetAndHandleRefunds()
  270. {
  271. string sql = "select * from CE_ErpShop";
  272. DataTable dt = SqlHelper.ExecuteDataset(sql).Tables[0];
  273. if (dt.Rows.Count > 0)
  274. {
  275. foreach(DataRow Dr in dt.Rows)
  276. {
  277. string shopname = Dr["ShopName"].ToString();
  278. string sessionKey = _shopKeyDics[shopname];
  279. //string sessionKey = "62011121cc9403ccc4a9ZZ0aaZZ369f224369206db001f02201404768885";
  280. if(sessionKey==null || sessionKey == "")
  281. {
  282. continue;
  283. }
  284. DateTime stime = DateTime.Parse(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd 00:00:00"));
  285. DateTime etime = DateTime.Parse(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd 23:59:59"));
  286. string res = RefundsReceiveGet(sessionKey, stime, etime);
  287. Console.WriteLine(res);
  288. Refunds_receive_get_response_Obj reObj = null;
  289. //string res = test();
  290. if (res == "") return;
  291. try
  292. {
  293. res = GetUTF8String2(Encoding.UTF8.GetBytes(res));
  294. //res = res.Replace(" ", "");
  295. reObj = JsonConvert.DeserializeObject<Refunds_receive_get_response_Obj>(res);
  296. List<Refund> reItemList = reObj.refunds_receive_get_response.refunds.refund;
  297. foreach (Refund item in reItemList)
  298. {
  299. CeErpTradeRefund refund = new CeErpTradeRefund();
  300. refund.refund_id = item.refund_id;
  301. refund.tid = item.tid;
  302. refund.oid = item.oid;
  303. refund.created = item.created;
  304. refund.modified = item.modified;
  305. refund.status = item.status;
  306. refund.order_status = item.order_status;
  307. refund.good_status = item.good_status;
  308. refund.payment = item.payment;
  309. refund.refund_fee = item.refund_fee;
  310. refund.refund_phase = item.refund_phase;
  311. refund.reason = item.reason;
  312. refund.describe = item.desc;
  313. refund.buyer_nick = item.buyer_nick;
  314. refund.seller_nick = item.seller_nick;
  315. refund.total_fee = item.total_fee;
  316. refund.has_good_return = item.has_good_return;
  317. refund.RefundState = 1;//1待审核2待确认
  318. refund.Create();
  319. }
  320. }
  321. catch (Exception ex)
  322. {
  323. }
  324. }
  325. }
  326. }
  327. public static string GetUTF8String2(byte[] buffer)
  328. {
  329. if (buffer == null)
  330. return null;
  331. if (buffer.Length <= 3)
  332. {
  333. return Encoding.UTF8.GetString(buffer);
  334. }
  335. byte[] bomBuffer = new byte[] { 0xef, 0xbb, 0xbf };
  336. if (buffer[0] == bomBuffer[0] && buffer[1] == bomBuffer[1] && buffer[2] == bomBuffer[2])
  337. {
  338. return new UTF8Encoding(false).GetString(buffer, 3, buffer.Length - 3);
  339. }
  340. return Encoding.UTF8.GetString(buffer);
  341. }
  342. private string GetUTF8String(byte[] vs)
  343. {
  344. throw new NotImplementedException();
  345. }
  346. /// <summary>
  347. /// 物流公司信息
  348. /// </summary>
  349. /// <param name="sessionKey"></param>
  350. /// <param name="orderid"></param>
  351. /// <returns></returns>
  352. public static string LogisticsCompaniesGet()
  353. {
  354. string sessionKey = "6100309b522c174d816e5218e193dd3ac90a91c452f96bc2201404768885";
  355. //json参数
  356. var res_obj = new
  357. {
  358. fields = "id,code,name,reg_mail_no"
  359. };
  360. string ro_json = JsonConvert.SerializeObject(res_obj);
  361. //post参数
  362. List<string> postLst = new List<string>();
  363. setParmsHead(sessionKey, ref postLst);
  364. postLst.Add("methodName=taobao.logistics.companies.get");
  365. postLst.Add("requestObjectJson=" + HttpUtility.UrlEncode(ro_json));
  366. HttpItem item = new HttpItem()
  367. {
  368. URL = api_url,
  369. Method = "POST",
  370. ContentType = "application/x-www-form-urlencoded",
  371. Postdata = string.Join("&", postLst.ToArray())
  372. };
  373. HttpResult hResult = tb_http.GetHtml(item);
  374. return hResult.Html;
  375. //return html;
  376. }
  377. /// <summary>
  378. /// 查询面单订购服务
  379. /// </summary>
  380. /// <param name="sessionKey"></param>
  381. /// <param name="orderid"></param>
  382. /// <returns></returns>
  383. public static string TaobaoWlbWaybillISearch()
  384. {
  385. string sessionKey = ShopKeyDics["芳儒旗舰店"];
  386. //json参数
  387. var res_obj = new
  388. {
  389. };
  390. string ro_json = JsonConvert.SerializeObject(res_obj);
  391. //ro_json = "{\"WaybillApplyRequest\":" + ro_json + "}";
  392. ro_json = "{\"WaybillApplyRequest\":\"" + ro_json.Replace("\"", "\\\"") + "\"}";
  393. //post参数
  394. List<string> postLst = new List<string>();
  395. setParmsHead(sessionKey, ref postLst);
  396. postLst.Add("methodName=taobao.wlb.waybill.i.search");
  397. //postLst.Add("requestObjectJson=eyJQYXJhbVdheWJpbGxDbG91ZFByaW50QXBwbHlOZXdSZXF1ZXN0Ijoie1wiY3BfY29kZVwiOlwiWlRPXCIsXCJzZW5kZXJcIjp7XCJhZGRyZXNzXCI6e1wiY2l0eVwiOlwiXFx1NTM1N1xcdTkwMWFcXHU1ZTAyXCIsXCJkZXRhaWxcIjpcIlxcdTUzY2NcXHU2ODY1XFx1OTZjNVxcdTU5MWFcXHU4ZGVmXCIsXCJkaXN0cmljdFwiOlwiXFx1OTAxYVxcdTVkZGVcXHU1ZTAyXCIsXCJwcm92aW5jZVwiOlwiXFx1NmM1ZlxcdTgyY2ZcXHU3NzAxXCJ9LFwicGhvbmVcIjpcIjEzMjY1MDI1NTA5XCIsXCJuYW1lXCI6XCJcXHU1NTEwXFx1NzUxZlwifSxcInRyYWRlX29yZGVyX2luZm9fZHRvc1wiOlt7XCJvYmplY3RfaWRcIjpcIjU4MjY5OVwiLFwib3JkZXJfaW5mb1wiOntcIm9yZGVyX2NoYW5uZWxzX3R5cGVcIjpcIk9USEVSU1wiLFwidHJhZGVfb3JkZXJfbGlzdFwiOlwiMTIwNjA3NzAwNTEzNDcwMTMzXCJ9LFwicGFja2FnZV9pbmZvXCI6e1wiaXRlbXNcIjpbe1wiY291bnRcIjpcIjFcIixcIm5hbWVcIjpcIjIwMTlcXHU1MzE3XFx1NmIyN1xcdTUzNjFcXHU5MDFhXFx1NTkyN1xcdTcyNDhcXHU2NTcwXFx1NzgwMVxcdTUxYjBcXHU0ZTFkXFx1NWUyZFxcdTUxYzlcXHU1ZTJkXFx1NTk1N1xcdTRlZjYgIFxcdTVmZWJcXHU0ZTUwXFx1NjA1MFxcdTlmOTkgMS41bVxcdWZmMDg1XFx1ODJmMVxcdTVjM2FcXHVmZjA5XFx1NWU4YVwifV0sXCJpZFwiOlwiMjAxOTA0MDQxNTE1MDkxNjVcIn0sXCJyZWNpcGllbnRcIjp7XCJhZGRyZXNzXCI6e1wiY2l0eVwiOlwiXFx1OTBkMVxcdTVkZGVcIixcImRldGFpbFwiOlwiXFx1NmNiM1xcdTUzNTdcXHU3NzAxIFxcdTkwZDFcXHU1ZGRlXFx1NWUwMiBcXHU3YmExXFx1NTdjZVxcdTU2ZGVcXHU2NWNmXFx1NTMzYVxcdTAwYTBcXHU1NmRlXFx1NjVjZlxcdTUzM2FcXHU3ZDJiXFx1ODM0NlxcdTVjNzFcXHU1MzU3XFx1OGRlZlxcdTg4NTdcXHU5MDUzXFx1OGQ2M1xcdTZjNWZcXHU4ZGVmXFx1OTBkMVxcdTVkZGVcXHU1MzQxXFx1OTY2MlxcdTUzNTdcXHU5NWU4XFx1NTQxMVxcdTRlMWM1MDBcXHU3YzczXFx1OGRlZlxcdTUzMTdcXHU0ZTJkXFx1NWVmYVxcdTRlMDBcXHU1YzQwXFx1OTQ2YlxcdTgyZDFcXHU1N2NlXFx1NGU5NFxcdTUzZjdcXHU5NjYyXFx1OTg3OVxcdTc2ZWVcXHU5MGU4XCIsXCJkaXN0cmljdFwiOlwiXFx1N2JhMVxcdTU3Y2VcIixcInByb3ZpbmNlXCI6XCJcXHU2Y2IzXFx1NTM1N1wifSxcInBob25lXCI6XCIxODgzODUwNTMzNVwiLFwibmFtZVwiOlwiXFx1NzM4YlxcdTVjYWRcXHU1NzY0XCJ9LFwidGVtcGxhdGVfdXJsXCI6XCJodHRwOlxcXC9cXFwvY2xvdWRwcmludC5jYWluaWFvLmNvbVxcXC90ZW1wbGF0ZVxcXC9zdGFuZGFyZFxcXC8zMDFcXFwvMjAwXCIsXCJ1c2VyX2lkXCI6MjUzNDQ4ODB9XX0ifQ==&sign=OWE5MjA1MGJkM2I3ZTU5MDY3ZDk1ZTY2OTUzNzRhZTI=");//System.Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(
  398. postLst.Add("requestObjectJson=" + System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(ro_json)));//
  399. postLst.Add("base64=1");
  400. HttpItem item = new HttpItem()
  401. {
  402. URL = api_url,
  403. Method = "POST",
  404. ContentType = "application/x-www-form-urlencoded",
  405. Postdata = string.Join("&", postLst.ToArray())
  406. };
  407. HttpResult hResult = tb_http.GetHtml(item);
  408. return hResult.Html;
  409. }
  410. /// <summary>
  411. /// 获取面单模板
  412. /// </summary>
  413. /// <param name="sessionKey"></param>
  414. /// <param name="orderid"></param>
  415. /// <returns></returns>
  416. public static string CainiaoCloudprintStdtemplatesGet(string sellerNick)
  417. {
  418. string sessionKey = ShopKeyDics[sellerNick];
  419. //json参数
  420. var res_obj = new
  421. {
  422. };
  423. string ro_json = JsonConvert.SerializeObject(res_obj);
  424. //post参数
  425. List<string> postLst = new List<string>();
  426. setParmsHead(sessionKey, ref postLst);
  427. postLst.Add("methodName=cainiao.cloudprint.stdtemplates.get");
  428. //postLst.Add("requestObjectJson=eyJQYXJhbVdheWJpbGxDbG91ZFByaW50QXBwbHlOZXdSZXF1ZXN0Ijoie1wiY3BfY29kZVwiOlwiWlRPXCIsXCJzZW5kZXJcIjp7XCJhZGRyZXNzXCI6e1wiY2l0eVwiOlwiXFx1NTM1N1xcdTkwMWFcXHU1ZTAyXCIsXCJkZXRhaWxcIjpcIlxcdTUzY2NcXHU2ODY1XFx1OTZjNVxcdTU5MWFcXHU4ZGVmXCIsXCJkaXN0cmljdFwiOlwiXFx1OTAxYVxcdTVkZGVcXHU1ZTAyXCIsXCJwcm92aW5jZVwiOlwiXFx1NmM1ZlxcdTgyY2ZcXHU3NzAxXCJ9LFwicGhvbmVcIjpcIjEzMjY1MDI1NTA5XCIsXCJuYW1lXCI6XCJcXHU1NTEwXFx1NzUxZlwifSxcInRyYWRlX29yZGVyX2luZm9fZHRvc1wiOlt7XCJvYmplY3RfaWRcIjpcIjU4MjY5OVwiLFwib3JkZXJfaW5mb1wiOntcIm9yZGVyX2NoYW5uZWxzX3R5cGVcIjpcIk9USEVSU1wiLFwidHJhZGVfb3JkZXJfbGlzdFwiOlwiMTIwNjA3NzAwNTEzNDcwMTMzXCJ9LFwicGFja2FnZV9pbmZvXCI6e1wiaXRlbXNcIjpbe1wiY291bnRcIjpcIjFcIixcIm5hbWVcIjpcIjIwMTlcXHU1MzE3XFx1NmIyN1xcdTUzNjFcXHU5MDFhXFx1NTkyN1xcdTcyNDhcXHU2NTcwXFx1NzgwMVxcdTUxYjBcXHU0ZTFkXFx1NWUyZFxcdTUxYzlcXHU1ZTJkXFx1NTk1N1xcdTRlZjYgIFxcdTVmZWJcXHU0ZTUwXFx1NjA1MFxcdTlmOTkgMS41bVxcdWZmMDg1XFx1ODJmMVxcdTVjM2FcXHVmZjA5XFx1NWU4YVwifV0sXCJpZFwiOlwiMjAxOTA0MDQxNTE1MDkxNjVcIn0sXCJyZWNpcGllbnRcIjp7XCJhZGRyZXNzXCI6e1wiY2l0eVwiOlwiXFx1OTBkMVxcdTVkZGVcIixcImRldGFpbFwiOlwiXFx1NmNiM1xcdTUzNTdcXHU3NzAxIFxcdTkwZDFcXHU1ZGRlXFx1NWUwMiBcXHU3YmExXFx1NTdjZVxcdTU2ZGVcXHU2NWNmXFx1NTMzYVxcdTAwYTBcXHU1NmRlXFx1NjVjZlxcdTUzM2FcXHU3ZDJiXFx1ODM0NlxcdTVjNzFcXHU1MzU3XFx1OGRlZlxcdTg4NTdcXHU5MDUzXFx1OGQ2M1xcdTZjNWZcXHU4ZGVmXFx1OTBkMVxcdTVkZGVcXHU1MzQxXFx1OTY2MlxcdTUzNTdcXHU5NWU4XFx1NTQxMVxcdTRlMWM1MDBcXHU3YzczXFx1OGRlZlxcdTUzMTdcXHU0ZTJkXFx1NWVmYVxcdTRlMDBcXHU1YzQwXFx1OTQ2YlxcdTgyZDFcXHU1N2NlXFx1NGU5NFxcdTUzZjdcXHU5NjYyXFx1OTg3OVxcdTc2ZWVcXHU5MGU4XCIsXCJkaXN0cmljdFwiOlwiXFx1N2JhMVxcdTU3Y2VcIixcInByb3ZpbmNlXCI6XCJcXHU2Y2IzXFx1NTM1N1wifSxcInBob25lXCI6XCIxODgzODUwNTMzNVwiLFwibmFtZVwiOlwiXFx1NzM4YlxcdTVjYWRcXHU1NzY0XCJ9LFwidGVtcGxhdGVfdXJsXCI6XCJodHRwOlxcXC9cXFwvY2xvdWRwcmludC5jYWluaWFvLmNvbVxcXC90ZW1wbGF0ZVxcXC9zdGFuZGFyZFxcXC8zMDFcXFwvMjAwXCIsXCJ1c2VyX2lkXCI6MjUzNDQ4ODB9XX0ifQ==&sign=OWE5MjA1MGJkM2I3ZTU5MDY3ZDk1ZTY2OTUzNzRhZTI=");//System.Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(
  429. postLst.Add("requestObjectJson=" + System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(ro_json)));//
  430. postLst.Add("base64=1");
  431. HttpItem item = new HttpItem()
  432. {
  433. URL = api_url,
  434. Method = "POST",
  435. ContentType = "application/x-www-form-urlencoded",
  436. Postdata = string.Join("&", postLst.ToArray())
  437. };
  438. HttpResult hResult = tb_http.GetHtml(item);
  439. return hResult.Html;
  440. }
  441. /// <summary>
  442. /// 获取快递面单号
  443. /// </summary>
  444. /// <param name="sessionKey"></param>
  445. /// <param name="orderid"></param>
  446. /// <returns></returns>
  447. public static string CainiaoWaybillIiGet(string cpcode,string tempUrl,string ctid)
  448. {
  449. string sql = "select * from view_erptradecell where ctid='" + ctid + "'";
  450. DataTable dt = SqlHelper.ExecuteDataset(sql).Tables[0];
  451. if (dt != null && dt.Rows.Count > 0)
  452. {
  453. DataRow dr = dt.Rows[0];
  454. string sessionKey = ShopKeyDics[dr["seller_nick"].ToString()];
  455. //json参数
  456. var res_obj = new
  457. {
  458. //param_waybill_cloud_print_apply_new_request
  459. cp_code = cpcode,
  460. sender = new
  461. {
  462. name = "黄先生",
  463. mobile = "18610588822",
  464. address = new
  465. {
  466. province = "福建省",
  467. city = "龙岩市",
  468. detail = "新罗区东肖开发区"
  469. }
  470. },
  471. trade_order_info_dtos = new
  472. {
  473. object_id = dr["tid"].ToString(),
  474. template_url = tempUrl,
  475. user_id = 2201404768885,
  476. order_info = new
  477. {
  478. order_channels_type = "TB",
  479. trade_order_list = dr["tid"].ToString()
  480. },
  481. package_info = new
  482. {
  483. items = new
  484. {
  485. count = 1,
  486. name = "印刷品"
  487. }
  488. },
  489. recipient = new
  490. {
  491. name = dr["receiver_name"].ToString(),
  492. mobile = dr["receiver_mobile"].ToString(),
  493. address = new
  494. {
  495. province = dr["receiver_state"].ToString(),
  496. city = dr["receiver_city"].ToString(),
  497. detail = dr["receiver_address"].ToString()
  498. }
  499. }
  500. }
  501. };
  502. string ro_json = JsonConvert.SerializeObject(res_obj);
  503. ro_json = "{\"ParamWaybillCloudPrintApplyNewRequest\":\"" + ro_json.Replace("\"","\\\"") + "\"}";
  504. //return "";
  505. //ro_json= "{"ParamWaybillCloudPrintApplyNewRequest":"{\"cp_code\":\"ZTO\",\"sender\":{\"address\":{\"city\":\"\\u5357\\u901a\\u5e02\",\"detail\":\"\\u53cc\\u6865\\u96c5\\u591a\\u8def\",\"district\":\"\\u901a\\u5dde\\u5e02\",\"province\":\"\\u6c5f\\u82cf\\u7701\"},\"phone\":\"13265025509\",\"name\":\"\\u5510\\u751f\"},\"trade_order_info_dtos\":[{\"object_id\":\"582699\",\"order_info\":{\"order_channels_type\":\"OTHERS\",\"trade_order_list\":\"120607700513470133\"},\"package_info\":{\"items\":[{\"count\":\"1\",\"name\":\"2019\\u5317\\u6b27\\u5361\\u901a\\u5927\\u7248\\u6570\\u7801\\u51b0\\u4e1d\\u5e2d\\u51c9\\u5e2d\\u5957\\u4ef6 \\u5feb\\u4e50\\u6050\\u9f99 1.5m\\uff085\\u82f1\\u5c3a\\uff09\\u5e8a\"}],\"id\":\"20190404151509165\"},\"recipient\":{\"address\":{\"city\":\"\\u90d1\\u5dde\",\"detail\":\"\\u6cb3\\u5357\\u7701 \\u90d1\\u5dde\\u5e02 \\u7ba1\\u57ce\\u56de\\u65cf\\u533a\\u00a0\\u56de\\u65cf\\u533a\\u7d2b\\u8346\\u5c71\\u5357\\u8def\\u8857\\u9053\\u8d63\\u6c5f\\u8def\\u90d1\\u5dde\\u5341\\u9662\\u5357\\u95e8\\u5411\\u4e1c500\\u7c73\\u8def\\u5317\\u4e2d\\u5efa\\u4e00\\u5c40\\u946b\\u82d1\\u57ce\\u4e94\\u53f7\\u9662\\u9879\\u76ee\\u90e8\",\"district\":\"\\u7ba1\\u57ce\",\"province\":\"\\u6cb3\\u5357\"},\"phone\":\"18838505335\",\"name\":\"\\u738b\\u5cad\\u5764\"},\"template_url\":\"http:\\\/\\\/cloudprint.cainiao.com\\\/template\\\/standard\\\/301\\\/200\",\"user_id\":25344880}]}"}"
  506. //post参数
  507. List<string> postLst = new List<string>();
  508. setParmsHead(sessionKey, ref postLst);
  509. postLst.Add("methodName=cainiao.waybill.ii.get");
  510. //postLst.Add("requestObjectJson=eyJQYXJhbVdheWJpbGxDbG91ZFByaW50QXBwbHlOZXdSZXF1ZXN0Ijoie1wiY3BfY29kZVwiOlwiWlRPXCIsXCJzZW5kZXJcIjp7XCJhZGRyZXNzXCI6e1wiY2l0eVwiOlwiXFx1NTM1N1xcdTkwMWFcXHU1ZTAyXCIsXCJkZXRhaWxcIjpcIlxcdTUzY2NcXHU2ODY1XFx1OTZjNVxcdTU5MWFcXHU4ZGVmXCIsXCJkaXN0cmljdFwiOlwiXFx1OTAxYVxcdTVkZGVcXHU1ZTAyXCIsXCJwcm92aW5jZVwiOlwiXFx1NmM1ZlxcdTgyY2ZcXHU3NzAxXCJ9LFwicGhvbmVcIjpcIjEzMjY1MDI1NTA5XCIsXCJuYW1lXCI6XCJcXHU1NTEwXFx1NzUxZlwifSxcInRyYWRlX29yZGVyX2luZm9fZHRvc1wiOlt7XCJvYmplY3RfaWRcIjpcIjU4MjY5OVwiLFwib3JkZXJfaW5mb1wiOntcIm9yZGVyX2NoYW5uZWxzX3R5cGVcIjpcIk9USEVSU1wiLFwidHJhZGVfb3JkZXJfbGlzdFwiOlwiMTIwNjA3NzAwNTEzNDcwMTMzXCJ9LFwicGFja2FnZV9pbmZvXCI6e1wiaXRlbXNcIjpbe1wiY291bnRcIjpcIjFcIixcIm5hbWVcIjpcIjIwMTlcXHU1MzE3XFx1NmIyN1xcdTUzNjFcXHU5MDFhXFx1NTkyN1xcdTcyNDhcXHU2NTcwXFx1NzgwMVxcdTUxYjBcXHU0ZTFkXFx1NWUyZFxcdTUxYzlcXHU1ZTJkXFx1NTk1N1xcdTRlZjYgIFxcdTVmZWJcXHU0ZTUwXFx1NjA1MFxcdTlmOTkgMS41bVxcdWZmMDg1XFx1ODJmMVxcdTVjM2FcXHVmZjA5XFx1NWU4YVwifV0sXCJpZFwiOlwiMjAxOTA0MDQxNTE1MDkxNjVcIn0sXCJyZWNpcGllbnRcIjp7XCJhZGRyZXNzXCI6e1wiY2l0eVwiOlwiXFx1OTBkMVxcdTVkZGVcIixcImRldGFpbFwiOlwiXFx1NmNiM1xcdTUzNTdcXHU3NzAxIFxcdTkwZDFcXHU1ZGRlXFx1NWUwMiBcXHU3YmExXFx1NTdjZVxcdTU2ZGVcXHU2NWNmXFx1NTMzYVxcdTAwYTBcXHU1NmRlXFx1NjVjZlxcdTUzM2FcXHU3ZDJiXFx1ODM0NlxcdTVjNzFcXHU1MzU3XFx1OGRlZlxcdTg4NTdcXHU5MDUzXFx1OGQ2M1xcdTZjNWZcXHU4ZGVmXFx1OTBkMVxcdTVkZGVcXHU1MzQxXFx1OTY2MlxcdTUzNTdcXHU5NWU4XFx1NTQxMVxcdTRlMWM1MDBcXHU3YzczXFx1OGRlZlxcdTUzMTdcXHU0ZTJkXFx1NWVmYVxcdTRlMDBcXHU1YzQwXFx1OTQ2YlxcdTgyZDFcXHU1N2NlXFx1NGU5NFxcdTUzZjdcXHU5NjYyXFx1OTg3OVxcdTc2ZWVcXHU5MGU4XCIsXCJkaXN0cmljdFwiOlwiXFx1N2JhMVxcdTU3Y2VcIixcInByb3ZpbmNlXCI6XCJcXHU2Y2IzXFx1NTM1N1wifSxcInBob25lXCI6XCIxODgzODUwNTMzNVwiLFwibmFtZVwiOlwiXFx1NzM4YlxcdTVjYWRcXHU1NzY0XCJ9LFwidGVtcGxhdGVfdXJsXCI6XCJodHRwOlxcXC9cXFwvY2xvdWRwcmludC5jYWluaWFvLmNvbVxcXC90ZW1wbGF0ZVxcXC9zdGFuZGFyZFxcXC8zMDFcXFwvMjAwXCIsXCJ1c2VyX2lkXCI6MjUzNDQ4ODB9XX0ifQ==&sign=OWE5MjA1MGJkM2I3ZTU5MDY3ZDk1ZTY2OTUzNzRhZTI=");//System.Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(
  511. postLst.Add("requestObjectJson="+ System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(ro_json)));//
  512. postLst.Add("base64=1");
  513. HttpItem item = new HttpItem()
  514. {
  515. URL = api_url,
  516. Method = "POST",
  517. ContentType = "application/x-www-form-urlencoded",
  518. Postdata = string.Join("&", postLst.ToArray())
  519. };
  520. HttpResult hResult = tb_http.GetHtml(item);
  521. return hResult.Html;
  522. }
  523. return "";
  524. }
  525. //发货接口
  526. public static string LogisticsOnlineSend(string sessionKey, string orderid,string comCode,string outSid)
  527. {
  528. //json参数
  529. var res_obj = new
  530. {
  531. tid = orderid,
  532. company_code = comCode,
  533. out_sid = outSid
  534. };
  535. string ro_json = JsonConvert.SerializeObject(res_obj);
  536. //post参数
  537. List<string> postLst = new List<string>();
  538. setParmsHead(sessionKey, ref postLst);
  539. postLst.Add("methodName=taobao.logistics.online.send");
  540. postLst.Add("requestObjectJson=" + HttpUtility.UrlEncode(ro_json));
  541. HttpItem item = new HttpItem()
  542. {
  543. URL = api_url,
  544. Method = "POST",
  545. ContentType = "application/x-www-form-urlencoded",
  546. Postdata = string.Join("&", postLst.ToArray())
  547. };
  548. HttpResult hResult = tb_http.GetHtml(item);
  549. return hResult.Html;
  550. }
  551. //修改备注到淘宝(修改旗帜 zi色旗)
  552. public static string TradeMemoUpdate(string atid,string sellerNick, int aflag,string amemo)
  553. {
  554. string en_memo = HttpUtility.UrlEncode(amemo);
  555. string skey = ShopKeyDics[sellerNick];
  556. //json参数
  557. object res_obj = null;
  558. if (amemo.Length > 0)
  559. {
  560. var obj = new
  561. {
  562. tid = atid,
  563. flag = aflag,
  564. memo = en_memo
  565. };
  566. res_obj = obj;
  567. }
  568. else
  569. {
  570. var obj = new
  571. {
  572. tid = atid,
  573. flag = aflag
  574. };
  575. res_obj = obj;
  576. }
  577. string ro_json = JsonConvert.SerializeObject(res_obj);
  578. //post参数
  579. List<string> postLst = new List<string>();
  580. setParmsHead(skey, ref postLst);
  581. postLst.Add("methodName=taobao.trade.memo.update");
  582. postLst.Add("requestObjectJson=" + HttpUtility.UrlEncode(ro_json));
  583. HttpItem item = new HttpItem()
  584. {
  585. URL = api_url,
  586. Method = "POST",
  587. ContentType = "application/x-www-form-urlencoded",
  588. Postdata = string.Join("&", postLst.ToArray())
  589. };
  590. item.PostEncoding = Encoding.UTF8;
  591. HttpResult hResult = tb_http.GetHtml(item);
  592. return hResult.Html;
  593. }
  594. //开具发票
  595. public static string invoicing(int id,int comid,string clerkname,int detailValue,string billOrderId)
  596. {
  597. string sql = "select * from view_ErpBill where id="+id;
  598. DataTable dt = SqlHelper.ExecuteDataset(sql).Tables[0];
  599. if (dt.Rows.Count <= 0)
  600. {
  601. return "error";
  602. }
  603. DataRow bill = dt.Rows[0];
  604. string sql2 = "select * from CE_ErpInvoicingInfo where id="+comid;
  605. DataTable dt2 = SqlHelper.ExecuteDataset(sql2).Tables[0];
  606. if (dt2.Rows.Count <= 0)
  607. {
  608. return "error";
  609. }
  610. DataRow com = dt2.Rows[0];
  611. string btype = "p";
  612. if (bill["type"].ToString() == "普通发票" && bill["sendType"].ToString()=="电子发票")
  613. {
  614. btype = "p";
  615. }
  616. else if (bill["type"].ToString() == "普通发票" && bill["sendType"].ToString() == "纸质发票")
  617. {
  618. btype = "c";
  619. }
  620. else if (bill["type"].ToString() == "专用发票" && bill["sendType"].ToString() == "电子发票")
  621. {
  622. btype = "b";
  623. }
  624. else if (bill["type"].ToString() == "专用发票" && bill["sendType"].ToString() == "纸质发票")
  625. {
  626. btype = "s";
  627. }
  628. string goodsname = bill["ProductName"].ToString();
  629. if (goodsname == "不干胶")
  630. {
  631. goodsname = "不干胶贴纸";
  632. }
  633. decimal totalPrice = Convert.ToDecimal(bill["price"]);
  634. string order = "";
  635. string shId = "106020199";
  636. if (detailValue == 1)
  637. {
  638. goodsname = "设计费";
  639. shId = "304030199";
  640. }
  641. string b_phone = bill["phone"].ToString()=="0"?"": bill["phone"].ToString();
  642. string b_address = bill["address"].ToString() == "0" ? "" : bill["address"].ToString();
  643. string b_bankac = bill["bankac"].ToString() == "0" ? "" : bill["bankac"].ToString();
  644. int gnum = Convert.ToInt32(bill["num"]);
  645. if (gnum > 0)
  646. {
  647. decimal taxPer = Convert.ToDecimal(com["taxrate"]);
  648. decimal oPrice = totalPrice / (1 + taxPer) / gnum;
  649. int jj = Convert.ToInt32(oPrice * 100);
  650. decimal onePrice = (decimal)(jj * 1.0) / 100;
  651. order = "{\"identity\":\"" + com["BillKey"].ToString() + "\",\"order\":{\"buyername\":\"" + bill["title"].ToString() + "\"," +
  652. "\"taxnum\":\"" + bill["tax"].ToString() + "\",\"phone\":\"" + b_phone + "\",\"address\":\"" + b_address + "\",\"account\":\"" + b_bankac +
  653. "\",\"telephone\":\"" + b_phone + "\",\"orderno\":\"" + billOrderId + "\"," +
  654. "\"invoicedate\":\"" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\",\"clerk\":\"" + clerkname +
  655. "\",\"saleaccount\":\"" + com["Bank"].ToString() + com["BankAcc"].ToString() + "\",\"salephone\":\"" + com["Phone"].ToString() + "\"," +
  656. "\"saleaddress\":\"" + com["Address"].ToString() + "\",\"saletaxnum\":\"" + com["Tax"].ToString() + "\",\"kptype\":\"1\",\"message\":\"\",\"payee\":\"" + com["legal"].ToString() + "\",\"checker\":\"张丽君\"," +
  657. "\"tsfs\":\"2\",\"email\":\"" + bill["email"].ToString() + "\",\"dkbz\":\"0\",\"invoiceLine\":\"" + btype + "\"," +
  658. "\"detail\":[{\"goodsname\":\"" + goodsname + "\",\"hsbz\":\"1\"," +
  659. "\"taxrate\":\"" + com["taxrate"].ToString() + "\",\"num\":\"" + gnum + "\",\"price\":\"" + onePrice + "\",\"spec\":\"\",\"spbm\":\""+ shId + "\"," +
  660. "\"zxbm\":\"\",\"fphxz\":\"0\",\"yhzcbs\":\"0\",\"zzstsgl\":\"\",\"lslbs\":\"\",\"kce\":\"\"}]}}";
  661. }
  662. else
  663. {
  664. decimal taxPer = Convert.ToDecimal(com["taxrate"]);
  665. decimal t_taxPrice = totalPrice * taxPer / (1 + taxPer);
  666. int jj = Convert.ToInt32(t_taxPrice * 100);
  667. decimal taxprice = (decimal)(jj * 1.0) / 100;
  668. decimal freeprice = totalPrice - taxprice;
  669. order = "{\"identity\":\"" + com["BillKey"].ToString() + "\",\"order\":{\"buyername\":\"" + bill["title"].ToString() + "\"," +
  670. "\"taxnum\":\"" + bill["tax"].ToString() + "\",\"phone\":\"" + bill["phone"].ToString() + "\",\"address\":\"" + bill["address"].ToString() + "\",\"account\":\"" + bill["bankac"].ToString() +
  671. "\",\"telephone\":\"" + bill["phone"].ToString() + "\",\"orderno\":\"" + billOrderId + "\"," +
  672. "\"invoicedate\":\"" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\",\"clerk\":\"" + clerkname +
  673. "\",\"saleaccount\":\"" + com["Bank"].ToString() + com["BankAcc"].ToString() + "\",\"salephone\":\"" + com["Phone"].ToString() + "\"," +
  674. "\"saleaddress\":\"" + com["Address"].ToString() + "\",\"saletaxnum\":\"" + com["Tax"].ToString() + "\",\"kptype\":\"1\",\"message\":\"\",\"payee\":\"" + com["legal"].ToString() + "\",\"checker\":\"张丽君\"," +
  675. "\"tsfs\":\"2\",\"email\":\"" + bill["email"].ToString() + "\",\"dkbz\":\"0\",\"invoiceLine\":\"" + btype + "\"," +
  676. "\"detail\":[{\"goodsname\":\"" + goodsname + "\",\"hsbz\":\"1\"," +
  677. "\"taxrate\":\"" + com["taxrate"].ToString() + "\",\"taxamt\":\"" + totalPrice + "\",\"taxfreeamt\":\"" + freeprice + "\",\"tax\":\"" + taxprice + "\",\"spec\":\"\",\"spbm\":\"106020199\"," +
  678. "\"zxbm\":\"\",\"fphxz\":\"0\",\"yhzcbs\":\"0\",\"zzstsgl\":\"\",\"lslbs\":\"\",\"kce\":\"\"}]}}";
  679. }
  680. //post参数
  681. order = DESDZFP.Encrypt(order);
  682. //post参数
  683. List<string> postLst = new List<string>();
  684. postLst.Add("order=" + order);
  685. HttpItem item = new HttpItem()
  686. {
  687. URL = "https://nnfp.jss.com.cn/shop/buyer/allow/cxfKp/cxfServerKpOrderSync.action",
  688. Method = "POST",
  689. ContentType = "application/x-www-form-urlencoded",
  690. Postdata = string.Join("&", postLst.ToArray())
  691. };
  692. HttpResult hResult = tb_http.GetHtml(item);
  693. return hResult.Html;
  694. }
  695. //查询电子发票
  696. public static string get_invoicing(string tid)
  697. {
  698. string sql = "select * from view_ErpBill where tid=" + tid;
  699. DataTable dt = SqlHelper.ExecuteDataset(sql).Tables[0];
  700. if (dt.Rows.Count <= 0)
  701. {
  702. return "error";
  703. }
  704. DataRow bill = dt.Rows[0];
  705. string order = "{\"identity\":\"" + bill["BillKey"].ToString()+ "\",\"orderno\":[\"" + bill["billOrderId"].ToString()+ "\"]}";
  706. order = DESDZFP.Encrypt(order);
  707. //post参数
  708. List<string> postLst = new List<string>();
  709. postLst.Add("order=" + order);
  710. HttpItem item = new HttpItem()
  711. {
  712. URL = "https://nnfp.jss.com.cn/shop/buyer/allow/ecOd/queryElectricKp.action",
  713. Method = "POST",
  714. ContentType = "application/x-www-form-urlencoded",
  715. Postdata = string.Join("&", postLst.ToArray())
  716. };
  717. HttpResult hResult = tb_http.GetHtml(item);
  718. return hResult.Html;
  719. }
  720. //作废发票
  721. public static string cancel_invoicing(int id)
  722. {
  723. string sql = "select * from view_ErpBill where id=" + id;
  724. DataTable dt = SqlHelper.ExecuteDataset(sql).Tables[0];
  725. if (dt.Rows.Count <= 0)
  726. {
  727. return "error";
  728. }
  729. DataRow bill = dt.Rows[0];
  730. string order = "{\"identity\":\""+ bill["BillKey"].ToString() + "\",\"order\": {\"fpdm\":\""+bill["fpdm"].ToString()+"\"," +
  731. "\"fphm\":\""+bill["fphm"].ToString()+"\",\"fpqqlsh\":\""+bill["fplsh"].ToString()+"\"}} "; ;
  732. order = DESDZFP.Encrypt(order);
  733. //post参数
  734. List<string> postLst = new List<string>();
  735. postLst.Add("order=" + order);
  736. HttpItem item = new HttpItem()
  737. {
  738. URL = "https://nnfp.jss.com.cn/shop/buyer/allow/cxfKp/invalidInvoice.action",
  739. Method = "POST",
  740. ContentType = "application/x-www-form-urlencoded",
  741. Postdata = string.Join("&", postLst.ToArray())
  742. };
  743. HttpResult hResult = tb_http.GetHtml(item);
  744. return hResult.Html;
  745. }
  746. //发票红冲 红字发票
  747. public static string invoicing_red(int id,string clerkname , int detailValue)
  748. {
  749. string sql = "select * from view_ErpBill where id=" + id;
  750. DataTable dt = SqlHelper.ExecuteDataset(sql).Tables[0];
  751. if (dt.Rows.Count <= 0)
  752. {
  753. return "error";
  754. }
  755. DataRow bill = dt.Rows[0];
  756. string sql2 = "select * from CE_ErpInvoicingInfo where id=" + Convert.ToInt32(bill["comId"]);
  757. DataTable dt2 = SqlHelper.ExecuteDataset(sql2).Tables[0];
  758. if (dt2.Rows.Count <= 0)
  759. {
  760. return "error";
  761. }
  762. DataRow com = dt2.Rows[0];
  763. string goodsname = bill["ProductName"].ToString();
  764. if (goodsname == "不干胶")
  765. {
  766. goodsname = "不干胶贴纸";
  767. }
  768. decimal totalPrice = Convert.ToDecimal(bill["price"]);
  769. string shId = "106020199";
  770. if (detailValue == 1)
  771. {
  772. goodsname = "设计费";
  773. shId = "304030199";
  774. }
  775. //decimal fprice = totalPrice - (totalPrice * Convert.ToDecimal(com["taxrate"]));
  776. //int j = Convert.ToInt32(fprice * 100);
  777. //decimal freeprice = (decimal)(j*1.0)/100;
  778. //decimal tprice = totalPrice - freeprice;
  779. //int jj = Convert.ToInt32(tprice * 100);
  780. //decimal taxprice = (decimal)(jj*1.0)/100;
  781. string msg = "对应正数发票代码:" + bill["fpdm"].ToString() + "号码:" + bill["fphm"].ToString() ;
  782. string btype = "p";
  783. if (bill["type"].ToString() == "普通发票" && bill["sendType"].ToString() == "电子发票")
  784. {
  785. btype = "p";
  786. }
  787. else if (bill["type"].ToString() == "普通发票" && bill["sendType"].ToString() == "纸质发票")
  788. {
  789. btype = "c";
  790. }
  791. else if (bill["type"].ToString() == "专用发票" && bill["sendType"].ToString() == "电子发票")
  792. {
  793. btype = "b";
  794. }
  795. else if (bill["type"].ToString() == "专用发票" && bill["sendType"].ToString() == "纸质发票")
  796. {
  797. btype = "s";
  798. }
  799. string order = "";
  800. int gnum = Convert.ToInt32(bill["num"]);
  801. string b_phone = bill["phone"].ToString() == "0" ? "" : bill["phone"].ToString();
  802. string b_address = bill["address"].ToString() == "0" ? "" : bill["address"].ToString();
  803. string b_bankac = bill["bankac"].ToString() == "0" ? "" : bill["bankac"].ToString();
  804. if (gnum > 0)
  805. {
  806. decimal taxPer = Convert.ToDecimal(com["taxrate"]);
  807. decimal oPrice = totalPrice / (1+taxPer) / gnum;
  808. int jj = Convert.ToInt32(oPrice * 100);
  809. decimal onePrice = (decimal)(jj * 1.0) / 100;
  810. order = "{\"identity\":\"" + com["BillKey"].ToString() + "\",\"order\":{\"buyername\":\"" + bill["title"].ToString() + "\"," +
  811. "\"taxnum\":\"" + bill["tax"].ToString() + "\",\"phone\":\"" + b_phone + "\",\"address\":\"" + b_address + "\",\"account\":\"" + b_bankac +
  812. "\",\"telephone\":\"" + b_phone + "\",\"orderno\":\"" + bill["billOrderId"].ToString() + "\"," +
  813. "\"invoicedate\":\"" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\",\"clerk\":\"" + clerkname +
  814. "\",\"saleaccount\":\"" + com["Bank"].ToString() + com["BankAcc"].ToString() + "\",\"salephone\":\"" + com["Phone"].ToString() + "\"," +
  815. "\"saleaddress\":\"" + com["Address"].ToString() + "\",\"saletaxnum\":\"" + com["Tax"].ToString() + "\",\"kptype\":\"2\",\"message\":\"" + msg + "\",\"fphm\":\"" + bill["fphm"].ToString() + "\" ,\"fpdm\":\"" + bill["fpdm"].ToString() + "\" ," +
  816. "\"payee\":\"" + com["legal"].ToString() + "\",\"checker\":\"张丽君\"," +
  817. "\"tsfs\":\"2\",\"email\":\"" + bill["email"].ToString() + "\",\"dkbz\":\"0\",\"invoiceLine\":\"" + btype + "\"," +
  818. "\"detail\":[{\"goodsname\":\"" + goodsname + "\",\"hsbz\":\"1\"," +
  819. "\"taxrate\":\"" + com["taxrate"].ToString() + "\",\"num\":\"" + (gnum*-1) + "\",\"price\":\"" + onePrice + "\",\"spec\":\"\",\"unit\":\"个\",\"spbm\":\""+ shId + "\"," +
  820. "\"zxbm\":\"\",\"fphxz\":\"0\",\"yhzcbs\":\"0\",\"zzstsgl\":\"\",\"lslbs\":\"\",\"kce\":\"\"}]}}";
  821. }
  822. else
  823. {
  824. decimal taxPer = Convert.ToDecimal(com["taxrate"]);
  825. decimal t_taxPrice = totalPrice * taxPer / (1 + taxPer);
  826. int jj = Convert.ToInt32(t_taxPrice * 100);
  827. decimal taxprice = (decimal)(jj * 1.0) / 100;
  828. decimal freeprice = totalPrice - taxprice;
  829. order = "{\"identity\":\"" + com["BillKey"].ToString() + "\",\"order\":{\"buyername\":\"" + bill["title"].ToString() + "\"," +
  830. "\"taxnum\":\"" + bill["tax"].ToString() + "\",\"phone\":\"" + bill["phone"].ToString() + "\",\"address\":\"" + bill["address"].ToString() + "\",\"account\":\"" + bill["bankac"].ToString() +
  831. "\",\"telephone\":\"" + bill["phone"].ToString() + "\",\"orderno\":\"" + bill["billOrderId"].ToString() + "\"," +
  832. "\"invoicedate\":\"" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\",\"clerk\":\"" + clerkname +
  833. "\",\"saleaccount\":\"" + com["Bank"].ToString() + com["BankAcc"].ToString() + "\",\"salephone\":\"" + com["Phone"].ToString() + "\"," +
  834. "\"saleaddress\":\"" + com["Address"].ToString() + "\",\"saletaxnum\":\"" + com["Tax"].ToString() + "\",\"kptype\":\"2\",\"message\":\"" + msg + "\",\"fphm\":\"" + bill["fphm"].ToString() + "\" ,\"fpdm\":\"" + bill["fpdm"].ToString() + "\" ," +
  835. "\"payee\":\"" + com["legal"].ToString() + "\",\"checker\":\"张丽君\"," +
  836. "\"tsfs\":\"2\",\"email\":\"" + bill["email"].ToString() + "\",\"dkbz\":\"0\",\"invoiceLine\":\"" + btype + "\"," +
  837. "\"detail\":[{\"goodsname\":\"" + goodsname + "\",\"hsbz\":\"1\"," +
  838. "\"taxrate\":\"" + com["taxrate"].ToString() + "\",\"taxamt\":\"" + (totalPrice * -1) + "\",\"taxfreeamt\":\"" + (freeprice * -1) + "\",\"tax\":\"" + (taxprice * -1) + "\",\"spec\":\"\",\"unit\":\"个\",\"spbm\":\"106020199\"," +
  839. "\"zxbm\":\"\",\"fphxz\":\"0\",\"yhzcbs\":\"0\",\"zzstsgl\":\"\",\"lslbs\":\"\",\"kce\":\"\"}]}}";
  840. }
  841. //post参数
  842. order = DESDZFP.Encrypt(order);
  843. //post参数
  844. List<string> postLst = new List<string>();
  845. postLst.Add("order=" + order);
  846. HttpItem item = new HttpItem()
  847. {
  848. URL = "https://nnfp.jss.com.cn/shop/buyer/allow/cxfKp/cxfServerKpOrderSync.action",
  849. Method = "POST",
  850. ContentType = "application/x-www-form-urlencoded",
  851. Postdata = string.Join("&", postLst.ToArray())
  852. };
  853. HttpResult hResult = tb_http.GetHtml(item);
  854. return hResult.Html;
  855. }
  856. public static string cainiao_test(string sessionKey)
  857. {
  858. //json参数
  859. /*var res_obj = new
  860. {
  861. tid = orderid,
  862. company_code = comCode,
  863. out_sid = outSid
  864. };
  865. string ro_json = JsonConvert.SerializeObject(res_obj);
  866. */
  867. //post参数
  868. List<string> postLst = new List<string>();
  869. setParmsHead(sessionKey, ref postLst);
  870. postLst.Add("methodName=cainiao.cloudprint.stdtemplates.get");
  871. //postLst.Add("base64=1");
  872. postLst.Add("requestObjectJson={}");
  873. HttpItem item = new HttpItem()
  874. {
  875. URL = api_url,
  876. Method = "POST",
  877. ContentType = "application/x-www-form-urlencoded",
  878. Postdata = string.Join("&", postLst.ToArray())
  879. };
  880. HttpResult hResult = tb_http.GetHtml(item);
  881. return hResult.Html;
  882. }
  883. public static string test()
  884. {
  885. HttpItem item = new HttpItem()
  886. {
  887. URL = "http://localhost:911/data/demo_print.txt",
  888. Encoding=Encoding.UTF8,
  889. ContentType= "application/json"
  890. };
  891. HttpResult hResult = tb_http.GetHtml(item);
  892. return hResult.Html.Replace("\r\n","").Replace("\t","");
  893. }
  894. }
  895. }