コード例 #1
0
        public Dictionary <string, object> GetPrepaySign(wy_wx_pay payModel)
        {
            //1.wy_wx_pay生成payModel
            Dictionary <string, object> pay = ToWeChatPayModel(payModel);
            //2.排序去重,并将其生成字符串sign
            string XmlPay = this._Xml.DicToXmlStr(pay);

            //3.获取PrepayId
            _log.LogInformation("支付订单创建:" + XmlPay);
            string ResponseInfo = HttpHelper.PostHttpResponse(CommonFiled.payUrl, XmlPay);
            string ReprepayId   = GetPrepayId(ResponseInfo);

            if (!string.IsNullOrEmpty(ReprepayId))
            {
                payModel.PREPAYID = ReprepayId;
                //4.根据prepayId生成JSAPI请求数据
                var MchSec = CommonFiled.MchSecret(payModel.FEE_TYPES);
                return(GetParamStrByPrePayId(payModel.APP_ID, ReprepayId, MchSec, payModel.ORDER_ID, payModel.ID));
            }
            if (CheckPay(ResponseInfo) > 0)
            {
                var dic = new Dictionary <string, object>();
                dic.Add("OrderErr", payModel.ORDER_ID);
                dic.Add("OrderErrId", payModel.ID);
                return(dic);
            }
            return(null);
        }
コード例 #2
0
ファイル: OrdersController.cs プロジェクト: HkSuen/House
 private bool WXPaidAfter(wy_wx_pay Order)
 { //根据订单ID
     try
     {
         _log.LogInformation($"支付成功,更新类型:{CommonFiled.FeeTypeName(Order.FEE_TYPES)}");
         //更新缴费记录表,如果为自主缴费记录,支付成功后,重新生成新数据
         //如果类型为物业费 // recoreId 不为空,证明为提醒订单,需要修改record表中的数据
         if (Order != null && (!string.IsNullOrEmpty(Order.RECORD_ID)) && Order.RECORD_ID != SelfPayOrder)
         {
             return(PropertyCost(Order));
         }
         //如果类型为水费,
         if (CommonFiled.EnumFeeTypes(Order.FEE_TYPES) == FeeTypes.Water)
         {
             return(WaterCost(Order));
         }
         //如果类型为电费
         if (CommonFiled.EnumFeeTypes(Order.FEE_TYPES) == FeeTypes.Electricity)
         {
             return(ElectricityCost(Order));
         }
         return(true);
     }
     catch (Exception ex)
     {
         _log.LogError(ex, "微信支付成功后逻辑处理错误:[OrderID]:" + Order.ORDER_ID);
         return(false);
     }
 }
コード例 #3
0
        public bool CheckWxSign(Dictionary <string, object> Dic)
        {
            if (!Dic.ContainsKey("mch_id"))
            {
                return(false);
            }
            string MchId = CommonFiled.MchSecret(Dic["mch_id"].ToString());

            return(this._Sign.CheckSign(Dic, MchId));
        }
コード例 #4
0
        public Dictionary <string, object> FindOrder(string appId, string orderId, string mchId)
        {
            Dictionary <string, object> orders = new Dictionary <string, object>();

            orders.Add("appid", appId);
            orders.Add("mch_id", mchId);
            orders.Add("out_trade_no", orderId);
            orders.Add("nonce_str", CommonFiled.guid);
            orders.Add("sign_type", "MD5");
            orders.Add("sign", this._Sign.WePaySign(orders, CommonFiled.MchSecret(mchId)));
            return(orders);
        }
コード例 #5
0
ファイル: OrdersController.cs プロジェクト: HkSuen/House
        //[Authorize(Roles ="Admin")]
        public ActionResult OrderDetail(string id)
        {
            if (string.IsNullOrEmpty(id))
            {
                Exception("没有查询到单据信息");
            }
            wy_wx_pay Model = this._order.GetWxOrderDetail(id);

            ViewBag.Type     = CommonFiled.FeeTypeName(Model.FEE_TYPES);
            ViewBag.MoneyNum = Convert.ToDouble((Model.TOTAL_FEE / 100.00));
            return(View(Model));
        }
コード例 #6
0
ファイル: OrdersController.cs プロジェクト: HkSuen/House
        /// <summary>
        /// 新单据界面
        /// </summary>
        /// <returns></returns>
        public ActionResult Receipt(string id)
        {
            if (string.IsNullOrEmpty(id))
            {
                Exception("没有查询到单据信息");
            }
            wy_wx_pay Model = this._order.GetWxOrderDetail(id);

            ViewBag.Type     = CommonFiled.FeeTypeName(Model.FEE_TYPES);
            ViewBag.MoneyNum = Convert.ToDouble((Model.TOTAL_FEE / 100.00)).ToString("0.00");
            ViewBag.PayTime  = Model.PAY_TIME.HasValue ? Model.PAY_TIME.Value.ToString("yyyy/MM/dd") : "xxxx/xx/xx";
            //ViewBag.EffectiveTime = Model.
            ViewBag.Payee = CommonFiled.MchName(Model.FEE_TYPES);
            return(View(Model));
        }
コード例 #7
0
        public Dictionary <string, object> CheckOrder(Dictionary <string, object> orderParams)
        {
            string XmlPay       = this._Xml.DicToXmlStr(orderParams);
            var    ResponseInfo = HttpHelper.PostHttpResponse(CommonFiled.findOrdersUrl, XmlPay);
            Dictionary <string, object> resParams = this._Xml.XmlStrToDic(ResponseInfo);

            if (resParams.ContainsKey("mch_id"))
            {
                bool CheckResult = this._Sign.CheckSign(resParams, CommonFiled.MchSecret(resParams["mch_id"].ToString()));
                if (CheckResult)
                {
                    return(resParams);
                }
            }
            return(null);
        }
コード例 #8
0
        //1.wy_wx_pay生成payModel
        private Dictionary <string, object> ToWeChatPayModel(wy_wx_pay wxpay)
        {
            //<sign> 0CB01533B8C1EF103065174F50BCA001 </sign>
            Dictionary <string, object> Paramters = new Dictionary <string, object>();

            Paramters.Add("appid", CommonFiled.appID);
            Paramters.Add("body", wxpay.REMARK);
            Paramters.Add("mch_id", CommonFiled.MchId(wxpay.FEE_TYPES));
            Paramters.Add("nonce_str", wxpay.ID);
            Paramters.Add("notify_url", CommonFiled.payCallBack);
            Paramters.Add("openid", wxpay.OPEN_ID);
            Paramters.Add("out_trade_no", wxpay.ORDER_ID);
            Paramters.Add("spbill_create_ip", wxpay.USER_IP);
            Paramters.Add("total_fee", wxpay.TOTAL_FEE);
            Paramters.Add("trade_type", "JSAPI");
            var MchSec = CommonFiled.MchSecret(wxpay.FEE_TYPES);

            Paramters.Add("sign", this._Sign.WePaySign(Paramters, MchSec));
            return(Paramters);
        }
コード例 #9
0
ファイル: OrdersController.cs プロジェクト: HkSuen/House
        public ActionResult Order(string r, string f, string u)
        {
            if (string.IsNullOrEmpty(r) || string.IsNullOrEmpty(f) || string.IsNullOrEmpty(u))
            {
                return(Error("请求参数错误!"));
            }
            dynamic DetailInfo = this._order.GetPayDetails(u, f, r).FirstOrDefault();

            if (null == DetailInfo)
            {
                return(Error("未找到订单信息!"));
            }
            int type = Convert.ToInt32(DetailInfo.JFLX);

            if (PropertyCosts() && CommonFiled.EnumFeeTypes(type) != FeeTypes.Property)
            {
                return(Redirect("../MyShop/Payment?back=0"));
            }
            DetailInfo.JFLXName = Fee.GetKey(Convert.ToInt32(DetailInfo.JFLX));
            ViewBag.Payee       = CommonFiled.MchName(Convert.ToInt32(DetailInfo.JFLX));
            return(View(DetailInfo));
        }
コード例 #10
0
ファイル: OrderSvc.cs プロジェクト: HkSuen/House
        public wy_wx_pay GetWxPay(OrderDto oder)
        {
            v_pay_record record = oder.Record;
            var          pay    = new wy_wx_pay();

            pay.ID                    = CommonFiled.guid;
            pay.APP_ID                = CommonFiled.appID;
            pay.ORDER_ID              = CommonFiled.ABC + CommonFiled.orderId;
            pay.RECORD_ID             = record.RECORD_ID;
            pay.HOUSE_ID              = oder.Houseinfo.FWID;
            pay.USER_ID               = oder.Shopinfo.CZ_SHID; //用户ID
            pay.OPEN_ID               = record.OPEN_ID;
            pay.FEE_TYPES             = Convert.ToInt32(record.JFLX);
            pay.TOTAL_FEE             = record.JFJE.HasValue ? Convert.ToInt32(record.JFJE.Value * 100) : 0;
            pay.REMARK                = $"自助缴费_{Fee.Types.SingleOrDefault(c => c.Value == Convert.ToInt32(record.JFLX)).Key}";
            pay.STATUS                = 0;
            pay.CREATE_TIME           = DateTime.Now;
            pay.MECH_ID               = CommonFiled.MchId(record.JFLX);
            pay.NONCE_STR             = CommonFiled.guid;
            pay.PREPAY_TIME           = DateTime.Now;
            pay.PREPAY_ENDTIME        = DateTime.Now.AddHours(2);
            pay.TRADE_TYPE            = CommonFiled.JSAPI;
            pay.HOUSE_NAME            = oder.Houseinfo.FWMC;
            pay.HOUSE_ADDRESS         = oder.Houseinfo.ZLWZ;
            pay.HOUSE_AREA            = oder.Houseinfo.JZMJ;
            pay.HOUSE_SERVICEEFFCTIVE = pay.FEE_TYPES != 0 ? "" :
                                        $"{toDate(oder.Record.YXQS,"yyyy/MM/dd")}-{toDate(oder.Record.YXQZ,"yyyy/MM/dd")}";
            //物业费单价
            pay.HOUSE_SERVICE_UNITPRICE = Convert.ToDecimal(oder.Costs.WYDJ);
            pay.USER_NAME         = oder.Shopinfo.ZHXM;
            pay.SHOP_NAME         = oder.Shopinfo.SHOP_NAME;
            pay.TOTAL_FEE_CH      = CommonFiled.CmycurD(Convert.ToDecimal((pay.TOTAL_FEE / 100.00)));
            pay.MECH_NAME         = CommonFiled.MchName(pay.FEE_TYPES);
            pay.TYPES_ID          = pay.FEE_TYPES == 0 ? "" : (pay.FEE_TYPES == 1 ? oder.Houseinfo.WATER_NUMBER : oder.Houseinfo.ELE_NUMBER);
            pay.TYPES_ID_ELE_COLL = oder.Houseinfo.CID;
            return(pay);
        }
コード例 #11
0
        private Dictionary <string, object> PayReModel(string xmlStr, out bool State)
        {
            //1.解析xml为class
            Dictionary <string, object> wxPay = this._Xml.XmlStrToDic(xmlStr);

            State = false;
            //2.校验Sign
            if (wxPay["return_code"].ToString() == SUCCESS)
            {
                if (wxPay["result_code"].ToString() == SUCCESS)
                {
                    string Sign = wxPay["sign"].ToString();
                    wxPay.Remove("sign");
                    var Secret = CommonFiled.MchSecret(wxPay["mch_id"].ToString());
                    if (Sign == this._Sign.WePaySign(wxPay, Secret))
                    {
                        State = true;
                        return(wxPay);
                    }
                    ;
                }
            }
            return(wxPay);
        }
コード例 #12
0
ファイル: OrdersController.cs プロジェクト: HkSuen/House
        private bool PropertyCost(wy_wx_pay Order)
        {
            _log.LogInformation($"【wy_pay_record】准备更新:{Order.RECORD_ID}");
            FeeTypes type = CommonFiled.EnumFeeTypes(Order.FEE_TYPES);
            var      Res  = this._order.UpdateRecoredJFZT(new wy_pay_record()
            {
                RECORD_ID = Order.RECORD_ID,
                JFZT      = 1,
                JFRQ      = Order.PAY_TIME,
                PAY_WAY   = 1,
                JFJE      = (Order.TOTAL_FEE / 100.00)
            });

            if (Res > 0)
            {
                _log.LogInformation($"【wy_pay_record】更新成功:{Order.RECORD_ID}");
            }
            else
            {
                _log.LogError($"【wy_pay_record】更新失败:{Order.RECORD_ID},订单:{Order.ID}");
                return(false);
            }
            return(true);
        }
コード例 #13
0
ファイル: OrdersController.cs プロジェクト: HkSuen/House
        public JsonResult CreateOrder(string recordId, string houseId, string UId, int WNum, double EPrice, string Type)
        {
            if (string.IsNullOrEmpty(houseId) || string.IsNullOrEmpty(UId))
            {
                return(Data(ResultCode.PARAMS_IS_NULL, null, ResultCode.PARAMS_IS_NULL.GetEnumDescription()));
            }
            //1.订单查询有无此数据,无数据默认创建新数据
            wy_wx_pay pay = null;

            if (!string.IsNullOrEmpty(recordId))
            {
                pay = this._order.FindSingle(recordId, houseId, UId, OpenID); //自助缴费订单,每次都是新订单
            }
            //原订单失效,异步更改状态
            bool UpdateTime = pay != null && DateTime.Now > pay.PREPAY_ENDTIME;

            if (pay == null || UpdateTime)
            {
                if (UpdateTime) //异步更新过期订单信息,并生成新的订单信息
                {
                    Task.Run(() =>
                    {
                        pay.STATUS = 1;
                        this._order.Update(pay);
                    });
                }
                //获取提醒订单信息
                OrderDto PayRecord = null;
                if (string.IsNullOrEmpty(recordId))
                {
                    PayRecord = this._order.GetWxPay(UId, houseId);
                }
                else
                {
                    PayRecord = this._order.GetWxPay(UId, recordId, houseId);
                }
                //校验是否为自助缴费订单
                if (PayRecord.Record == null || PayRecord.Record.RECORD_ID == null)
                {
                    PayRecord.Record = new v_pay_record()
                    {
                        OPEN_ID   = OpenID,
                        JFLX      = Type,
                        JFJE      = EPrice,      //默认物业费
                        RECORD_ID = SelfPayOrder //默认0为自助订单,非缴费提醒
                    };
                }
                pay         = this._order.GetWxPay(PayRecord);
                pay.USER_IP = UserIP;
                //存储水量以及电量
                if (pay.FEE_TYPES != 0) //非物业费
                {
                    //非物业默认记录电的价格
                    pay.UNIT_PRICE   = Convert.ToInt32(this._order.GetUnitPrice(CommonFiled.UnitPriceElectricSetKey) * 100);
                    pay.AMOUNT       = Convert.ToInt32(EPrice);
                    pay.TOTAL_FEE    = Convert.ToInt32(pay.UNIT_PRICE * pay.AMOUNT);
                    pay.TOTAL_FEE_CH = CommonFiled.CmycurD(Convert.ToDecimal((pay.UNIT_PRICE * pay.AMOUNT) / 100.00));
                    if (pay.FEE_TYPES == 1)
                    {
                        // 为水的时候需要记录单价
                        pay.UNIT_PRICE   = Convert.ToInt32(this._order.GetUnitPrice(CommonFiled.UnitPriceWaterKey) * 100);
                        pay.AMOUNT       = WNum;
                        pay.TOTAL_FEE    = Convert.ToInt32(pay.UNIT_PRICE * pay.AMOUNT);
                        pay.TOTAL_FEE_CH = CommonFiled.CmycurD(Convert.ToDecimal((pay.UNIT_PRICE * pay.AMOUNT) / 100.00));
                    }
                }
                if (pay.TOTAL_FEE <= 0) //如果订单生成为0元,直接视为无效订单,禁止生成。
                {
                    return(Data(ResultCode.PARAMS_IS_INVALID));
                }
                //将订单存到数据库
                if (this._order.Inert(pay) <= 0)
                {
                    return(Data(ResultCode.DATA_IS_WRONG));
                }
                ;
            }
            // 这里需要过滤订单信息
            return(Data(ResultCode.SCCUESS, new { sign = this._order.GetPayParamsByWxModel(pay) }));
        }