Ejemplo n.º 1
0
        protected void btnSumit_Click(object sender, EventArgs e)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(@"
           select * from Finance where id= @ID
            ");
            SqlParam[] param = new SqlParam[] {
                new SqlParam("@ID", hdId.Value)
            };
            DataTable dt = DataFactory.SqlDataBase().GetDataTableBySQL(sb, param);

            if (dt != null && dt.Rows.Count > 0)
            {
                string adminHotelid = dt.Rows[0]["AdminHotelid"].ToString();
                int    hotelid      = CommonHelper.GetInt(dt.Rows[0]["HotelId"].ToString());

                string orderNum = dt.Rows[0]["Number"].ToString();
                string name     = dt.Rows[0]["Name"].ToString();
                string phone    = dt.Rows[0]["Phone"].ToString();
                string memberId = dt.Rows[0]["MemberId"].ToString();
                string openid   = dt.Rows[0]["openid"].ToString();


                int money = CommonHelper.GetInt(dt.Rows[0]["Monery"].ToString());//订单金额


                double cancel_money = CommonHelper.GetDouble(txtMoney.Text);//取消金额


                if (cancel_money > money)
                {
                    ShowMsgHelper.Alert_Error("操作失败,退回金额不能大于订单支付金额!");
                    return;
                }
                if (cancel_money > 0)//退回金额
                {
                    switch (hdPayType.Value)
                    {
                    case "1":    //到店支付

                        break;

                    case "2":    //积分兑换

                        break;

                    case "3":    //会员卡支付

                        break;

                    case "4":    //微信支付
                        #region ******** 微信原路退回 ********
                        try
                        {
                            string transaction_id = dt.Rows[0]["wxddh"].ToString();
                            if (transaction_id == "")
                            {
                                ShowMsgHelper.Alert_Error("操作失败,未找到微信支付单号!");
                                return;
                            }
                            string ssl_path = WxPayConfig.SSLCERT_PATH(adminHotelid, hotelid);
                            if (ssl_path == "")
                            {
                                ShowMsgHelper.Alert_Error("操作失败,请联系开发人员配置API证书!");
                                return;
                            }
                            //判断文件的存在
                            if (System.IO.File.Exists(HttpContext.Current.Server.MapPath("~" + ssl_path)))
                            {
                                //存在文件
                            }
                            else
                            {
                                ShowMsgHelper.Alert_Error("操作失败,API证书不存在!");
                                return;
                            }
                            string total_fee  = (money * 100).ToString();
                            string refund_fee = (cancel_money * 100).ToString();

                            string    result = Refund.Run(transaction_id, orderNum, total_fee, refund_fee, adminHotelid, hotelid);
                            WxPayData data   = new WxPayData();
                            data.FromXml(result);    //把XML转换成对象
                            string GetReturnCode = data.GetValue("return_code").ToString();
                            if (GetReturnCode == "SUCCESS")
                            {
                                string GetResultCode = data.GetValue("result_code").ToString();
                                if (GetResultCode == "SUCCESS")
                                {
                                    string refund_id = data.GetValue("refund_id").ToString();
                                    Dictionary <string, object> datas = new Dictionary <string, object>();
                                    datas.Add("transaction_id", data.GetValue("transaction_id")); //微信订单号
                                    datas.Add("out_trade_no", data.GetValue("out_trade_no"));     //商户订单号
                                    datas.Add("out_refund_no", data.GetValue("out_refund_no"));   //商户退款单号
                                    datas.Add("refund_id", data.GetValue("refund_id"));           //微信退款单号

                                    //财务记录
                                    int iVal = CommonClass.InsertFinance(orderNum, name, phone, cancel_money, 41, "充值退款", memberId, transaction_id, adminHotelid, hotelid, refund_id, openid);
                                    if (iVal > 0)
                                    {
                                        try
                                        {
                                            Hashtable hs = new Hashtable();
                                            hs["vipkh"]  = dt.Rows[0]["Phone"];
                                            hs["bmcode"] = "99";
                                            hs["yddh"]   = orderNum;
                                            hs["je"]     = CommonHelper.GetDouble(cancel_money);
                                            //hs["fhcs"] = "T";
                                            hs["OUT_fhcs"] = null;
                                            Hashtable rs = new Hashtable();
                                            DataFactory.SqlDataBase(adminHotelid).ExecuteByProcReturn("PROC_WXCZKK", hs, ref rs);
                                        }
                                        catch (Exception ex)
                                        {
                                        }
                                        CommonMethod.Base_Log("充值退款", "Reservation", "ID:" + hdId.Value, "退款金额:" + cancel_money + "," + txtReason.Text, "订单编号:" + orderNum);
                                    }
                                }
                                else
                                {
                                    //https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_4
                                    if (GetResultCode == "NOTENOUGH")    //余额不足
                                    {
                                        ShowMsgHelper.ShowScript("cancelTips()");
                                        return;
                                    }
                                    ShowMsgHelper.Alert_Error("操作失败," + data.GetValue("err_code_des") + "!");
                                    return;
                                }
                            }
                            else
                            {
                                ShowMsgHelper.Alert_Error("签名验证失败!");
                                return;
                            }
                        }
                        catch (Exception ex)
                        {
                            ShowMsgHelper.Alert_Error("操作错误,签名验证失败");
                            return;
                        }
                        #endregion
                        break;

                    default:
                        ShowMsgHelper.Alert_Error("操作失败!");
                        return;

                        break;
                    }
                }

                Hashtable ht = new Hashtable();
                //ht["CancelNumber"] = cancel_night;
                ht["CancelTime"] = DateTime.Now;
                //string qxtxt = cancel_night + "间夜";

                CommonMethod.Base_Log("充值退款", "Finance", "ID:" + hdId.Value, "退款原因:" + txtReason.Text, "订单编号:" + orderNum);
                //int val = DataFactory.SqlDataBase().UpdateByHashtable("Reservation", "id", hdId.Value, ht);
                //if (val > 0)
                //{
                ShowMsgHelper.OpenClose("退款成功!");
                //}
            }
        }