/// <summary> /// 通过剑客编号批量查询物流 /// </summary> /// <param name="JKOrderId"></param> /// <param name="jkLogisticsList"></param> /// <returns></returns> public bool multi_QueryLogistics(string[] JKOrderId, out string jkLogisticsList) { Dictionary <string, string> kvs = new Dictionary <string, string>(); kvs.Add("method", "jianke.logistics.get"); kvs.Add("cid", _tscid); kvs.Add("signMethod", "md5"); kvs.Add("randomStr", Ass.Data.Utils.GetRandomString(8)); var str = Newtonsoft.Json.JsonConvert.SerializeObject(JKOrderId).Replace("\"", ""); kvs.Add("orderNo", str); var json = JKSign(kvs, "orderNo"); var netJK = new NETDrugStore(); string codeJson = netJK.HttpsPostDrugOrderInfo(json, _url); Newtonsoft.Json.Linq.JObject jobj = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(codeJson); var rtnCode = jobj.GetValueString("returnCode", "code"); if (rtnCode == "SUCCESS") { jkLogisticsList = jobj.GetValue("mapList")[0].GetValueString("orderNo"); return(true); } else { throw new Exception("三方返回错误信息:[" + rtnCode + "]" + jobj.GetValueString("returnMsg", "message")); } }
/// <summary> /// 虚拟库存查询 /// </summary> /// <param name="ThreePartDrugId"></param> /// <param name="qyt"></param> /// <returns></returns> public bool CheckDrugIsAvaliableReal(string ThreePartDrugId /*, out int qyt*/) { var warehouse = new string[2]; //todo 验证健客的药品是否可用 Dictionary <string, string> kvs = new Dictionary <string, string>(); kvs.Add("method", "jianke.stock.getReal"); kvs.Add("signMethod", "md5"); kvs.Add("cid", _tscid); kvs.Add("randomStr", Ass.Data.Utils.GetRandomString(8)); //仓库 warehouse[0] = "1"; warehouse[1] = "4"; var warehouseCode = Newtonsoft.Json.JsonConvert.SerializeObject(warehouse).Replace("\"", ""); kvs.Add("warehouseCode", warehouseCode); var productIdStr = new string[1]; productIdStr[0] = ThreePartDrugId; var str = Newtonsoft.Json.JsonConvert.SerializeObject(productIdStr).Replace("\"", ""); kvs.Add("productCode", str); var json = JKSign(kvs, "productCode", "warehouseCode"); if (json == "") { throw new Exception("没有数据可查询!"); } //药品list集合productCode var netJK = new NETDrugStore(); string codeJson = netJK.HttpsPostDrugOrderInfo(json, _url); Newtonsoft.Json.Linq.JObject jobj = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(codeJson); var rtnCode = jobj.GetValueString("returnCode", "code"); if (rtnCode == "SUCCESS") { var numStr = jobj.GetValueString("quantity"); int num = Convert.ToInt32(numStr); //qyt = num; if (num <= 0) { throw new Exception("该药品没有库存"); } if (num <= 6) { throw new Exception("库存紧张"); } return(true); } else { throw new Exception("三方返回错误信息:[" + rtnCode + "]" + jobj.GetValueString("returnMsg", "message")); } }
/// <summary> /// 获取药品的基本信息 /// </summary> /// <param name="threePartDrugId">第三方药品的Id</param> public CHIS.Models.DataModels.DrugInfo QueryDrugInfo(int threePartDrugId) { Dictionary <string, string> kvs = new Dictionary <string, string>(); kvs.Add("method", "jianke.product.get"); kvs.Add("signMethod", "md5"); kvs.Add("cid", _tscid); kvs.Add("randomStr", Ass.Data.Utils.GetRandomString(8)); //string[] productIdStr = new string[1]; //productIdStr[0] = threePartDrugId.ToString(); //var str = Newtonsoft.Json.JsonConvert.SerializeObject(productIdStr).Replace("\"", ""); //kvs.Add("productCode", str); kvs.Add("productCode", threePartDrugId.ToString()); var json = JKSign(kvs, "productCode"); if (json == "") { throw new Exception("没有数据可查询!"); } //药品list集合productCode var netJK = new NETDrugStore(); string codeJson = netJK.HttpsPostDrugOrderInfo(json, _url); Newtonsoft.Json.Linq.JObject jobj = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(codeJson); var rtnCode = jobj.GetValueString("returnCode", "code"); if (rtnCode == "SUCCESS") { var item = jobj.GetValue("productList")[0]; return(new CHIS.Models.DataModels.DrugInfo { productCode = item.GetValueString("productCode"), productName = item.GetValueString("productName"), mainProductCode = item.GetValueString("mainProductCode"), productStatusType = Ass.P.PIntV(item.GetValueString("productStatusType"), 0), marketPrice = Ass.P.PIntV(item.GetValueString("marketPrice"), 9999), ourPrice = Ass.P.PIntV(item.GetValueString("ourPrice"), 9999), manufacturer = item.GetValueString("manufacturer"), prescriptionType = item.GetValueString("prescriptionType"), productInventory = Ass.P.PIntV(item.GetValueString("productInventory"), 0), productAttribute = item.GetValueString("productAttribute"), thumbnailUrl = item.GetValueString("thumbnailUrl"), introduction = item.GetValueString("introduction"), packing = item.GetValueString("packing") }); } else { throw new Exception("三方返回错误信息:[" + rtnCode + "]" + jobj.GetValueString("returnMsg", "message")); } }
/// <summary> /// 处理健客返回值 /// </summary> /// <param name="codeJson"></param> /// <returns></returns> public Object Json_HandleResult(string codeJson) { Newtonsoft.Json.Linq.JObject jobj = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(codeJson); var rtnCode = jobj.GetValueString("returnCode", "code"); if (rtnCode == "SUCCESS") { return(jobj); } else { throw new Exception("三方返回错误信息:[" + rtnCode + "]" + jobj.GetValueString("returnMsg", "message")); } }
/// <summary> /// 检查药品是否正常可用 否则抛出错误(单个药品的库存查询,如果大于10个就可以发货)正式库存查询 /// </summary> /// <param name="threePartDrugId">健客药品Id</param> /// <returns>true 表示可用</returns> public bool CheckDrugIsAvaliable(int threePartDrugId) { //todo 验证健客的药品是否可用 Dictionary <string, string> kvs = new Dictionary <string, string>(); kvs.Add("method", "jianke.product.get"); kvs.Add("signMethod", "md5"); kvs.Add("cid", _tscid); kvs.Add("randomStr", Ass.Data.Utils.GetRandomString(8)); kvs.Add("productCode", threePartDrugId.ToString()); var json = JKSign(kvs, "productCode"); if (json == "") { throw new Exception("没有数据可查询!"); } //药品list集合productCode var netJK = new NETDrugStore(); string codeJson = netJK.HttpsPostDrugOrderInfo(json, _url); Newtonsoft.Json.Linq.JObject jobj = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(codeJson); var rtnCode = jobj.GetValueString("returnCode", "code"); if (rtnCode == "SUCCESS") { string numStr = jobj.GetValue("productList")[0].GetValueString("productInventory"); if (string.IsNullOrEmpty(numStr)) { throw new Exception("暂无该药品"); } else { int num = Convert.ToInt32(numStr); if (num <= 0) { throw new Exception("该药品没有库存"); } if (num <= 6) { throw new Exception("库存紧张"); } return(true); } } else { throw new Exception("三方返回错误信息:[" + rtnCode + "]" + jobj.GetValueString("returnMsg", "message")); } }
//确认用户的公众号支付是否成功 、 其他状态 /// <summary> /// /// </summary> /// <param name="prePayId">微信的支付Id</param> /// <param name="payOrderId">项目的支付Id</param> /// <returns></returns> public async Task <IActionResult> CheckWXPubPayStatusByWX(string payOrderId) { try { if (payOrderId.IsEmpty()) { throw new Exception("没有输入系统支付订单号"); } //调用微信接口,确认订单真正支付成功 var wxp = Codes.Utility.WXParams.LoadWXParams("jk813"); var wx = new Codes.Utility.WXPay(wxp); var r = await wx.QueryPubPayStatus(payOrderId);//获取数据 if (r.rlt == false) { throw new Exception(r.msg); //错误则抛出错误 } //调用HIS接口,刷新后面数据库的支付数据状态 string lk = string.Format(Global.Config.GetSection("Webfig:WX_PayedCheckApiUrl").Value, payOrderId); var jn = await Ass.Net.WebHelper.WebPost(lk); Newtonsoft.Json.Linq.JObject jobj = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(jn); if (jobj.GetValueString("rlt") == "false") { return(Content(jn, "application/json")); //直接json传回 } return(TryCatchFunc((dd) => { return null; })); } catch (Exception ex) { return(TryCatchFunc(() => { throw ex; })); } }
/// <summary> /// 批量产品库存查询 /// </summary> /// <param name="ThreePartDrugId"></param> /// <returns></returns> public bool CheckDrugIsAvaliables(string[] ThreePartDrugIds) { //todo 验证健客的药品是否可用 Dictionary <string, string> kvs = new Dictionary <string, string>(); kvs.Add("method", "jianke.stock.get"); kvs.Add("signMethod", "md5"); kvs.Add("cid", _tscid); kvs.Add("randomStr", Ass.Data.Utils.GetRandomString(8)); var strs = Newtonsoft.Json.JsonConvert.SerializeObject(ThreePartDrugIds).Replace("\"", ""); kvs.Add("productCode", strs); var json = JKSign(kvs, "productCode"); if (json == "") { throw new Exception("没有数据可查询!"); } //药品list集合productCode var netJK = new NETDrugStore(); string codeJson = netJK.HttpsPostDrugOrderInfo(json, _url); Newtonsoft.Json.Linq.JObject jobj = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(codeJson); var rtnCode = jobj.GetValueString("returnCode", "code"); if (rtnCode == "SUCCESS") { var numStr = jobj.GetValueString("quantity"); int num = Convert.ToInt32(numStr); if (num <= 10) { throw new Exception("库存紧张"); } return(true); } else { throw new Exception("三方返回错误信息:[" + rtnCode + "]" + jobj.GetValueString("returnMsg", "message")); } }
/// <summary> /// 获取Cookie里面的基本用户信息 /// </summary> public ah.Models.ViewModel.CUSTOMER_INFO GetCookieCustomerInfo() { string s = Request.Cookies["CUSTOMER_INFO"]; //解密 if (string.IsNullOrWhiteSpace(s)) return new Models.ViewModel.CUSTOMER_INFO(); string c = Ass.Data.Secret.Decript(s, "tsjk@2018"); Newtonsoft.Json.Linq.JObject jobj = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(c); return new Models.ViewModel.CUSTOMER_INFO { CustomerId = Ass.P.PIntV(jobj.GetValueString("CustomerId"), 0), CustomerMobile = jobj.GetValueString("CustomerMobile"), CustomerName = jobj.GetValueString("CustomerName"), Gender = Ass.P.PIntN(jobj.GetValueString("Gender")), Birthday = Ass.P.PDateTimeV(jobj.GetValueString("Birthday")), CustomerEmail = jobj.GetValueString("CustomerEmail"), MariageStatusId = Ass.P.PIntN(jobj.GetValueString("MariageStatusId")), MariageStatusName = jobj.GetValueString("MariageStatusName") }; }
protected Models.ViewModel.WechatBindingModel GetWXCookie(string jscookie = null, bool bThrowExp = false) { try { if (jscookie.IsEmpty()) jscookie = Request.Cookies["WXInfo"]; Newtonsoft.Json.Linq.JObject jobj = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(jscookie); var errcode = Ass.P.PIntV(jobj.GetValueString("errcode"), 0); if (errcode > 0) throw new MyException(errcode, jobj.GetValueString("errmsg")); var gender = jobj.GetValueString("sex"); return new Models.ViewModel.WechatBindingModel { openid = jobj.GetValueString("openid"), NickName = jobj.GetValueString("nickname"), Gender = gender == "2" ? 0 : (gender == "1" ? 1 : 2), WxPicUrl = jobj.GetValueString("headimgurl") }; } catch (Exception ex) { if (bThrowExp) throw ex; else return null; } }
/// <summary> /// 生成公众号付款的预支付订单信息,并返回给前端json /// </summary> /// <param name="treatId">接诊号</param> /// <param name="totalAmount">校验用价格</param> public async Task <IActionResult> CreateWXPubPay(long treatId, decimal totalAmount) { /* * "appId":"wx2421b1c4370ec43b", //公众号名称,由商户传入 * "timeStamp":"1395712654", //时间戳,自1970年以来的秒数 * "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串 * "package":"prepay_id=u802345jgfjsdfgsdg888", * "signType":"MD5", //微信签名方式: * "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 */ try { var wxcookie = GetWXCookie(Request.Cookies["WXInfo"]); var openid = wxcookie.openid; if (openid.IsEmpty()) { throw new Exception("openid无值!"); } var treat = MainDbContext.vwCHIS_DoctorTreat.AsNoTracking().FirstOrDefault(m => m.TreatId == treatId); //获取调用CHIS系统的地址 string lk = string.Format(Global.Config.GetSection("Webfig:WX_PayApiUrl").Value, treatId, totalAmount); //获取返回的Json信息 var jn = await Ass.Net.WebHelper.WebPost(lk); Newtonsoft.Json.Linq.JObject jobj = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(jn); if (jobj.GetValueString("rlt") == "false") { return(Content(jn, "application/json")); //直接json传回 } //整理数据 var md = new Models.CHIS_Charge_PayPre(); Newtonsoft.Json.Linq.JToken item = jobj.GetValue("result").GetValue("item"); string nonce_str = Guid.NewGuid().ToString("N"); string notify_url = UrlRoot + "/home/WXPubPaySuccessCallBack"; //返回url string out_trade_no = item.GetValueString("payOrderId"); //订单号 string bill_ip = base.GetClientEnvi().ClientIP; //客户请求IP int total = (int)(Ass.P.PDecimal(item.GetValueString("TotalAmount")) * 100); string body = $"微信公众号支付[{treat.CustomerId}|{treat.CustomerName}|{treatId}]"; var wxp = Codes.Utility.WXParams.LoadWXParams("jk813"); var wx = new Codes.Utility.WXPay(wxp); var rlt = await wx.CreateWXPayPubAsync(body, nonce_str, notify_url, openid, out_trade_no, total, bill_ip); if (rlt.rlt == false) { throw new Exception(rlt.msg); } return(TryCatchFunc((dd) => { dd.appId = rlt.appid; dd.timeStamp = rlt.timeStamp; dd.nonceStr = rlt.nonce_str; dd.prepay_id = rlt.prepay_id; dd.package = $"prepay_id={rlt.prepay_id}"; dd.signType = "MD5"; dd.sign = rlt.sign; dd.paySign = rlt.paySign; dd.out_trade_no = out_trade_no; //支付订单Id // dd.mweb_url = rlt.mweb_url; return null; })); } catch (Exception ex) { return(TryCatchFunc(() => { throw ex; })); } }
List <OrderNoList> orderList = null;//订单编号 /// <summary> /// 创建剑客订单 /// </summary> /// <param name="url">请求的URL</param> /// <param name="parameters">随同请求POST的参数名称及参数值字典</param> /// <param name="timeout">请求的超时时间</param> /// <param methods="post">post</param> /// <returns></returns> public bool SendJKWebNetOrder(decimal totalamount, string orderId, long selectedAddressId, string sendRmk, out string FromJKSavedOrderNo) { if (_env.IsDevelopment()) { sendRmk += "[测试]"; } //汇总健康发送数据 //通过订单编号查询网络发药信息视图表 var netInf = _db.vwCHIS_Shipping_NetOrder.AsNoTracking().Where(m => m.SendOrderId == orderId).Select(m => new { orderTime = m.CreatTime, netOrderId = m.NetOrderId, telephone = m.Mobile, consignee = m.ContactName, transportCosts = m.ContainTransFee, address = m.AddressDetail, }).FirstOrDefault(); var addrInf = _db.vwCHIS_Code_Customer_AddressInfos.AsNoTracking().FirstOrDefault(m => m.AddressId == selectedAddressId); Dictionary <string, string> kvs = new Dictionary <string, string>(); kvs.Add("method", "jianke.order.externalcreate"); kvs.Add("signMethod", "md5"); kvs.Add("cid", _tscid); kvs.Add("randomStr", Ass.Data.Utils.GetRandomString(8));// Ass.Data.Utils.GetRandomString(8)); kvs.Add("externalOrderNo", orderId); kvs.Add("accountId", "00000000-0000-0000-0000-000000000000"); kvs.Add("invoice", "null"); kvs.Add("status", "2"); kvs.Add("deliveryZipCode", addrInf.ZipCode.ToString()); kvs.Add("money", Ass.P.PInt(totalamount * 100).ToString()); kvs.Add("orderTime", netInf.orderTime.ToString("yyyy-M-d H:m:s")); kvs.Add("paymentType", "2"); //默认微信支付 kvs.Add("consignee", netInf.consignee + sendRmk.ToRoundStr('[')); //发货人的姓名 kvs.Add("telephone", netInf.telephone); kvs.Add("mobilephone", netInf.telephone); kvs.Add("province", ComTools.GetAreaName(addrInf.MergerName, 0)); kvs.Add("city", ComTools.GetAreaName(addrInf.MergerName, 1)); kvs.Add("district", ComTools.GetAreaName(addrInf.MergerName, 2)); kvs.Add("town", ""); kvs.Add("address", netInf.address); kvs.Add("transportCosts", Ass.P.PInt((netInf.transportCosts ?? 0) * 100).ToString());//物流费 var drugList = _db.vwCHIS_Shipping_NetOrder_Formed_Detail.Where(m => m.NetOrderId == netInf.netOrderId).AsNoTracking().ToList().Select(m => new OrderProduct { productCode = m.ThreePartDrugId.ToString().Replace(" ", ""), productName = m.DrugName.ToString().Replace(" ", ""), amount = Ass.P.PInt(m.Qty), actualPrice = Ass.P.PInt(m.Price * 100), packing = m.DrugModel } ).ToList(); var json = JKSign(kvs, drugList); var netJK = new NETDrugStore(); string codeJson = netJK.HttpsPostDrugOrderInfo(json, _url); Newtonsoft.Json.Linq.JObject jobj = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(codeJson); var rtnCode = jobj.GetValueString("returnCode", "code"); if (rtnCode == "SUCCESS") { FromJKSavedOrderNo = jobj.GetValueString("orderNo"); return(true); } else { throw new Exception("三方返回错误信息:[" + rtnCode + "]" + jobj.GetValueString("returnMsg", "message")); } }
public async Task <IActionResult> WechatEntry_GetOpenId(string code, string state, string returnUrl = null) { try { if (code.IsEmpty()) { throw new Exception("没有获取到获取码!"); } var appid = Global.Config.GetSection("Webfig:WX_appid").Value; var secret = Global.Config.GetSection("Webfig:WX_secret").Value; var lk = $"https://api.weixin.qq.com/sns/oauth2/access_token?appid={appid}&secret={secret}&code={code}&grant_type=authorization_code "; /* * * { "access_token" : "ACCESS_TOKEN", * "expires_in" : 7200, * "refresh_token" : "REFRESH_TOKEN" , * "openid" : "OPENID", * "scope" : "SCOPE" } */ //服务器端执行接口 string rlt = Ass.P.PStr(await Ass.Net.WebHelper.WebPost(lk)).Trim(); if (!rlt.StartsWith("{")) { throw new Exception("返回的不是json格式"); } Newtonsoft.Json.Linq.JObject jobj = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(rlt); string openid = jobj.GetValueString("openid"); if (openid.IsEmpty()) { throw new Exception("获取openid失败:" + rlt); } string accessToken = jobj.GetValueString("access_token"); string refreshToken = jobj.GetValueString("refresh_token"); //搜索openid var find = MainDbContext.CHIS_Code_Customer.FirstOrDefault(m => m.WXOpenId == openid); if (find == null) //绑定 { if (state == "debug") { var url = $"http://localhost:61448/Customer/Home/WechatBinding?openid={openid}&accessToken={accessToken}&state={state}&returnUrl={returnUrl}"; Response.Redirect(url); return(Redirect(url)); } else { return(await WechatBinding(openid, accessToken, state)); } } else //检测是否更新,如果不用,则直接转入首页 { if (state == "debug") { string redirectUrl = $"http://localhost:61448/Customer/Home/LoadMobileFrontPage?openid={openid}&state={state}&accessToken={accessToken}&returnUrl={returnUrl}"; Response.Redirect(redirectUrl); return(Redirect(redirectUrl)); } else { return(await LoadMobileFrontPage(openid, state, accessToken, returnUrl)); } } } catch (Exception ex) { ViewBag.IsShowBack = false; return(View("Error", ex)); } }