Пример #1
0
        //确认用户的公众号支付是否成功 、  其他状态
        /// <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; })); }
        }
Пример #2
0
        /// <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; })); }
        }