Example #1
0
        public ActionResult WXPayOrder(string orderId, string openid)
        {
            WXPayModel models = new WXPayModel();

            models.openid  = openid;
            models.OrderId = orderId;
            return(View(models));
        }
Example #2
0
        /// <summary>
        /// 创建语音口令红包
        /// </summary>
        /// <param name="uniacid"></param>
        /// <param name="accountID"></param>
        /// <param name="packetsModel"></param>
        /// <returns></returns>
        internal async Task <string> CreateVoicePackets(string uniacid, ObjectId accountID, VoicePacketsModel packetsModel)
        {
            CheckPeopleNum(packetsModel);
            CheckText(packetsModel.TextCmd);

            packetsModel.uniacid    = uniacid;
            packetsModel.CreateTime = DateTime.Now;
            return(await Task.Run(() =>
            {
                var account = GetModelByIDAndUniacID(accountID, uniacid);
                if (account == null)
                {
                    var e = new ExceptionModel()
                    {
                        MethodFullName = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName,
                        Content = $"用户为空:accountID={accountID.ToString()},uniacid={uniacid}",
                        ExceptionDate = DateTime.Now
                    };
                    e.Save();
                    throw e;
                }

                var serviceMoney = GetServiceMoney(uniacid, packetsModel.Amount);
                var balance = account.Balances - (packetsModel.Amount + serviceMoney);

                packetsModel.PacketsID = ObjectId.GenerateNewId();
                packetsModel.CreatePeople = new Participant
                {
                    AccountID = account.AccountID,
                    AccountAvatar = account.AccountAvatar,
                    AccountName = account.AccountName,
                    CreateTime = DateTime.Now
                };
                if (balance < 0)
                {
                    WeChatOrder weChatOrder;
                    WXPayModel wXPayModel = GetCreatePacketsPayParams(-balance, packetsModel, uniacid, account, out weChatOrder);
                    return new BaseResponseModel3 <bool, string, WXPayModel>()
                    {
                        StatusCode = ActionParams.code_ok, JsonData = false, JsonData1 = packetsModel.PacketsID.ToString(), JsonData2 = wXPayModel
                    }.ToJson();
                }
                CreateVoicePackets(account, packetsModel, serviceMoney, balance);
                return new BaseResponseModel2 <bool, string>()
                {
                    StatusCode = ActionParams.code_ok, JsonData = true, JsonData1 = packetsModel.PacketsID.ToString()
                }.ToJson();
            }));
        }
Example #3
0
 /// <summary>
 /// 充值
 /// </summary>
 /// <param name="uniacid"></param>
 /// <param name="accountID"></param>
 /// <param name="money"></param>
 /// <returns></returns>
 public string PushBalance(string uniacid, string accountID, decimal money)
 {
     try
     {
         WXPayModel wpm = thisData.PushBalance(uniacid, new ObjectId(accountID), money);
         return(new BaseResponseModel <WXPayModel>()
         {
             StatusCode = ActionParams.code_ok, JsonData = wpm
         }.ToJson());
     }
     catch (Exception e)
     {
         e.Save();
         return(JsonResponseModel.ErrorJson);
     }
 }
Example #4
0
        public ActionResult Index(string orderId)
        {
            string openid = "";

            WXPayModel models = new WXPayModel();

            //检测是否给当前页面传递了相关参数
            if (Session["openid"] != null)
            {
                openid = Session["openid"].ToString();
            }
            else
            {
                return(Content("<script>alert('数据错误!请重新支付');history.back();</script>"));
            }
            models.openid  = openid;
            models.OrderId = orderId;
            return(View(models));
        }
Example #5
0
        /// <summary>
        /// 申请邮寄
        /// </summary>
        /// <param name="uniacid">商户ID</param>
        /// <param name="accountID">用户ID</param>
        /// <returns></returns>
        public IActionResult CreateOrder(string uniacid, string accountID)
        {
            try
            {
                string json  = new StreamReader(Request.Body).ReadToEnd();
                Order  order = JsonConvert.DeserializeObject <Order>(json);
                order.OrderID = ObjectId.GenerateNewId();
                WXPayModel wpm = thisData.CreateOrder(uniacid, new ObjectId(accountID), order);
                return(new JsonResponse2 <string, WXPayModel>()
                {
                    JsonData = order.OrderID.ToString(), JsonData1 = wpm
                }.ToJsonResult(this));
            }
            catch (Exception e)
            {
                e.Save();

                return(this.JsonErrorStatus());
            }
        }
Example #6
0
        /// <summary>
        /// 获取微信支付签名信息
        /// 调用前请先配置wxPayV3Info属性,否则会支付失败,如果paySign = "ERROR",请查看package内容信息
        /// 目前提供最基本的签名字段,有时间的话可以增加基础以外字段的动态增加,一般情况下,基础的字段也能满足支付需求了
        /// 微信支付步骤:</summary>
        /// 1.$.post调用GetWXPayInfo()获取WXPayModel数据,其中包含签名数据
        /// 2.wxpay.js调用 WeixinJSBridge.invoke('getBrandWCPayRequest')发起微信支付
        /// 3.处理回调,成功后返回success
        /// <param name="payorder"></param>
        /// <param name="openid"></param>
        /// <param name="tfee">支付的金额</param>
        /// <param name="body">备注</param>
        /// <param name="pid">产品信息</param>
        /// <param name="sp_billno">订单号码</param>
        /// <returns>返回签名数据,Response给JS呼出微信支付控件,返回WXPayModel.paySign=ERROR时报错</returns>
        public static WXPayModel GetWXPayInfo(PayOrder payorder, string openid, string tfee, string body, string pid, string sp_billno)
        {
            try
            {
                string timeStamp = "";
                string nonceStr = "";
                string package = "";
                string paySign = "";

                //创建支付应答对象
                RequestHandler packageReqHandler = new RequestHandler(null);
                //初始化
                packageReqHandler.Init();

                //调起微信支付签名
                timeStamp = TenPayV3Util.GetTimestamp();
                nonceStr = TenPayV3Util.GetNoncestr();

                //设置package订单参数
                packageReqHandler.SetParameter("appid", wxPayV3Info.AppId);		  //公众账号ID
                packageReqHandler.SetParameter("mch_id", wxPayV3Info.MchId);		  //商户号
                packageReqHandler.SetParameter("nonce_str", nonceStr);                    //随机字符串
                packageReqHandler.SetParameter("body", body);
                packageReqHandler.SetParameter("out_trade_no", sp_billno);		//商家订单号
                packageReqHandler.SetParameter("spbill_create_ip", HttpContext.Current.Request.UserHostAddress);
                packageReqHandler.SetParameter("total_fee", tfee);
                packageReqHandler.SetParameter("notify_url", wxPayV3Info.TenPayV3Notify);		    //接收财付通通知的URL
                packageReqHandler.SetParameter("trade_type", TenPayV3Type.JSAPI.ToString());	 //交易类型
                packageReqHandler.SetParameter("openid", openid);//OPENID

                //获取package包
                string sign = packageReqHandler.CreateMd5Sign("key", wxPayV3Info.Key);
                packageReqHandler.SetParameter("sign", sign);
                string data = packageReqHandler.ParseXML();
                var result = TenPayV3.Unifiedorder(data);
                var res = XDocument.Parse(result);
                if (res.Element("xml").Element("prepay_id") == null)
                {
                    string err_code = res.Element("xml").Element("return_msg").Value;
                    return new WXPayModel() { paySign = "ERROR", package = err_code };
                }
                string prepayId = res.Element("xml").Element("prepay_id").Value;
                package = string.Format("prepay_id={0}", prepayId);
                //设置支付参数
                RequestHandler paySignReqHandler = new RequestHandler(null);
                paySignReqHandler.SetParameter("appId", wxPayV3Info.AppId);
                paySignReqHandler.SetParameter("timeStamp", timeStamp);
                paySignReqHandler.SetParameter("nonceStr", nonceStr);
                paySignReqHandler.SetParameter("package", package);
                paySignReqHandler.SetParameter("signType", "MD5");
                paySign = paySignReqHandler.CreateMd5Sign("key", wxPayV3Info.Key);
                WXPayModel wm = new WXPayModel()
                {
                    appId = wxPayV3Info.AppId,
                    nonceStr = nonceStr,
                    package = package,
                    payNo = sp_billno,
                    paySign = paySign,
                    timeStamp = timeStamp
                };
                //payorder(wm, openid, tfee, body, pid, param, sp_billno);
                payorder(wm);
                return wm;

            }
            catch (Exception ex)
            {
                return new WXPayModel() { paySign = "ERROR", package = "抛出异常:" + ex.ToString() };
            }
        }
Example #7
0
        public BaseResult WXPay(WXPayModel wxModel)
        {
            BaseResult br = new BaseResult();

            try
            {
                var paramters = new Dictionary <string, string>();
                paramters.Add("sub_mch_id", wxModel.sub_mch_id);
                paramters.Add("body", wxModel.body);
                paramters.Add("out_trade_no", wxModel.out_trade_no);
                paramters.Add("total_fee", wxModel.total_fee.ToString());
                paramters.Add("auth_code", wxModel.auth_code);
                string mySign = CYUtils.SignRequestNew(paramters, PublicSign.localKey);
                paramters.Add("sign", mySign);
                var result = new WebUtils().DoPost(PublicSign.wxPayUrl, paramters, 200000);

                WXPayResultModel reqMicropay = XmlUtil.Deserialize(typeof(WXPayResultModel), result.Replace("</xml>", "</WXPayResultModel>").Replace("<xml>", "<WXPayResultModel>")) as WXPayResultModel;
                if (reqMicropay.result_code == "SUCCESS" && reqMicropay.return_code == "SUCCESS")
                {
                    br.Success = true;
                    br.Data    = reqMicropay;
                    return(br);
                }
                else
                {
                    if (reqMicropay.err_code == "BANKERROR" || reqMicropay.err_code == "SYSTEMERROR")
                    {
                        br.Success = false;
                        br.Message.Add(string.Format("支付结果未知 需要查询结果 描述:" + reqMicropay.err_code_des));
                        br.Level = ErrorLevel.Warning;
                        return(br);
                    }
                    else if (reqMicropay.err_code == "USERPAYING")
                    {
                        br.Success = false;
                        br.Message.Add(string.Format("用户支付中,需要输入密码 描述:" + reqMicropay.err_code_des));
                        br.Level = ErrorLevel.Warning;
                        return(br);
                    }
                    else if (reqMicropay.err_code == "ORDERPAID")
                    {
                        br.Success = true;
                        br.Message.Add(string.Format("订单已被支付 描述:" + reqMicropay.err_code_des));
                        br.Data = reqMicropay;
                        return(br);
                    }
                    else
                    {
                        br.Success = false;
                        br.Message.Add(string.Format("微信返回失败 描述:" + reqMicropay.err_code_des));
                        return(br);
                    }
                }
            }
            catch (Exception ex)
            {
                br.Success = false;
                br.Message.Add(string.Format("微信支付时发生异常 单号:" + wxModel.out_trade_no + "  请查询确定结果 以免带来损失!"));
                return(br);
            }
        }
Example #8
0
        public BaseResult OutOrderPay(Hashtable param)
        {
            #region 定义参数
            BaseResult br         = new BaseResult();
            Hashtable  ht         = new Hashtable();
            string     dh_ec      = "";
            string     ec_tradeno = "";
            decimal    add_je     = 0;
            decimal    add_je_zs  = 0;
            decimal    je_qm      = 0;
            decimal    je_qm_zs   = 0;
            #endregion

            #region 验证参数
            if (param == null ||
                param["id_shop"] == null || string.IsNullOrEmpty(param["id_shop"].ToString()) ||
                param["id_masteruser"] == null || string.IsNullOrEmpty(param["id_masteruser"].ToString()) ||
                param["json_param"] == null || string.IsNullOrEmpty(param["json_param"].ToString()) ||
                param["dh"] == null || string.IsNullOrEmpty(param["dh"].ToString()) ||
                param["payList"] == null ||
                param["sign"] == null || string.IsNullOrEmpty(param["sign"].ToString())
                )
            {
                br.Success = false;
                br.Message.Add("必要参数不可以为空.");
                return(br);
            }

            var payList = (List <Money_OrderPayList>)param["payList"];

            if (payList.Count() != 1)
            {
                br.Success = false;
                br.Message.Add("支付参数不符合要求.");
                return(br);
            }

            if (payList.Where(d => d.type != "wx" && d.type != "zfb" && d.type != "hy").Count() > 0)
            {
                br.Success = false;
                br.Message.Add("支付类型错误 目前只支持微信/支付宝/储值卡支付.");
                return(br);
            }

            if (payList.Sum(d => d.money) <= 0)
            {
                br.Success = false;
                br.Message.Add("金额出现错误.");
                return(br);
            }

            #endregion

            #region 获取支付配置信息
            int i = 1;
            ht.Clear();
            ht.Add("id_masteruser", param["id_masteruser"].ToString());
            ht.Add("id_shop", param["id_shop"].ToString());
            var payConfigList = DAL.QueryList <Tb_Pay_Config>(typeof(Tb_Pay_Config), ht);
            #endregion

            #region 调用接口处理
            //遍历执行支付
            foreach (var item in payList)
            {
                if (item.money == 0)
                {
                    continue;
                }
                switch (item.type)
                {
                case "hy":    //会员支付
                    #region 会员支付
                    HY_OrderPayModel hyCostModel = new HY_OrderPayModel();
                    try
                    {
                        hyCostModel = Utility.JSON.Deserialize <HY_OrderPayModel>(item.data);

                        if (string.IsNullOrEmpty(hyCostModel.id_hy))
                        {
                            br.Success = false;
                            br.Message.Add(string.Format("会员支付数据 data 的 id_hy 不符合."));
                            return(br);
                        }
                    }
                    catch (Exception ex)
                    {
                        br.Success = false;
                        br.Message.Add(string.Format("会员支付数据 data 不符合."));
                        br.Level = ErrorLevel.Alert;
                        throw new CySoftException(br);
                    }

                    ht.Clear();
                    ht.Add("id_shop", param["id_shop"].ToString());
                    ht.Add("id_masteruser", param["id_masteruser"].ToString());
                    ht.Add("id_hy", hyCostModel.id_hy);
                    ht.Add("id_bill", hyCostModel.id_bill);
                    ht.Add("bm_djlx", hyCostModel.bm_djlx);
                    ht.Add("rq", DateTime.Now);
                    ht.Add("je", item.money);
                    ht.Add("bz", hyCostModel.bz);
                    ht.Add("password", hyCostModel.password);
                    ht.Add("Type", "XF");
                    br = Tz_Hy_JeBLL.Active(ht);
                    if (!br.Success)
                    {
                        br.Level = ErrorLevel.Alert;
                        if (br.Message.Count() > 0 && br.Message[0].ToString().Contains("密码不正确"))
                        {
                            br.Level = ErrorLevel.Question;
                        }
                        throw new CySoftException(br);
                    }

                    decimal.TryParse(br.Data.GetType().GetProperty("add_je").GetValue(br.Data).ToString(), out add_je);
                    decimal.TryParse(br.Data.GetType().GetProperty("add_je_zs").GetValue(br.Data).ToString(), out add_je_zs);
                    decimal.TryParse(br.Data.GetType().GetProperty("je_qm").GetValue(br.Data).ToString(), out je_qm);
                    decimal.TryParse(br.Data.GetType().GetProperty("je_qm_zs").GetValue(br.Data).ToString(), out je_qm_zs);
                    #endregion
                    break;

                case "zfb":    //支付宝
                    #region 检查有没有设置支付类型
                    if (payConfigList == null || payConfigList.Where(d => d.flag_type == 4).Count() <= 0)
                    {
                        br.Success = false;
                        br.Message.Add(string.Format("没有设置支付宝支付类型,不能支付."));
                        return(br);
                    }

                    if (payConfigList.Where(d => d.flag_type == 4 && d.parmcode == "pay_alipay_is_use" && d.parmvalue == "1").Count() <= 0)
                    {
                        br.Success = false;
                        br.Message.Add(string.Format("没有启用支付宝支付,不能支付."));
                        return(br);
                    }
                    #endregion

                    #region 序列化Model
                    AliPayModel aliModel = new AliPayModel();
                    try
                    {
                        aliModel = Utility.JSON.Deserialize <AliPayModel>(item.data);
                    }
                    catch (Exception ex)
                    {
                        br.Success = false;
                        br.Message.Add(string.Format("支付宝支付数据 data 不符合."));
                        throw new CySoftException(br);
                    }
                    #endregion

                    #region 旧的支付----已注释
                    //#region 获取私钥和APP_ID信息

                    //if (payConfigList == null || payConfigList.Count() <= 0
                    //    || payConfigList.Where(d => d.flag_type == 4 && d.parmcode == "pay_alipay_rsakey1" && d.parmvalue != "").Count() <= 0
                    //    || payConfigList.Where(d => d.flag_type == 4 && d.parmcode == "pay_alipay_rsakey2" && d.parmvalue != "").Count() <= 0
                    //    || payConfigList.Where(d => d.flag_type == 4 && d.parmcode == "pay_alipay_rsakey3" && d.parmvalue != "").Count() <= 0
                    //    || payConfigList.Where(d => d.flag_type == 4 && d.parmcode == "pay_alipay_rsakey4" && d.parmvalue != "").Count() <= 0
                    //    )
                    //{
                    //    br.Success = false;
                    //    br.Message.Add(string.Format("设置的支付宝私钥错误,不能支付."));
                    //    return br;
                    //}

                    //if (payConfigList == null || payConfigList.Count() <= 0 || payConfigList.Where(d => d.flag_type == 4 && d.parmcode == "pay_alipay_partner" && d.parmvalue != "").Count() <= 0)
                    //{
                    //    br.Success = false;
                    //    br.Message.Add(string.Format("没有设置支付宝开发帐号,不能支付."));
                    //    return br;
                    //}


                    //string privateKey = payConfigList.Where(d => d.flag_type == 4 && d.parmcode == "pay_alipay_rsakey1").FirstOrDefault().parmvalue
                    //    + payConfigList.Where(d => d.flag_type == 4 && d.parmcode == "pay_alipay_rsakey2").FirstOrDefault().parmvalue
                    //    + payConfigList.Where(d => d.flag_type == 4 && d.parmcode == "pay_alipay_rsakey3").FirstOrDefault().parmvalue
                    //    + payConfigList.Where(d => d.flag_type == 4 && d.parmcode == "pay_alipay_rsakey4").FirstOrDefault().parmvalue;


                    //#endregion

                    //#region 调接口处理
                    ////开发者帐号
                    //aliModel.app_id = payConfigList.Where(d => d.flag_type == 4 && d.parmcode == "pay_alipay_partner").FirstOrDefault().parmvalue;
                    //aliModel.method = "alipay.trade.pay";
                    //aliModel.charset = "utf-8";
                    //aliModel.sign_type = "RSA";
                    //aliModel.timestamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                    //aliModel.version = "1.0";
                    //aliModel.sign = privateKey;

                    //aliModel.out_trade_no = param["dh"].ToString();
                    //aliModel.scene = "bar_code";

                    //aliModel.total_amount = (decimal)Frame.Common.OperationHelper.Digit(item.money, 2);//总金额
                    //aliModel.discountable_amount = 0;//优惠金额
                    //aliModel.undiscountable_amount = aliModel.total_amount;//不参与优惠计算的金额

                    //br = this.AliPay(aliModel);
                    //if (br.Success == false)
                    //{
                    //    throw new CySoftException(br);
                    //}
                    //AliPayResultModel aliPayResultModel = (AliPayResultModel)br.Data;
                    //dh_ec = aliModel.out_trade_no;
                    //ec_tradeno = aliPayResultModel.trade_no;
                    //br.Data = new { dh = param["dh"].ToString(), dh_ec = aliModel.out_trade_no, ec_tradeno = aliPayResultModel.trade_no };
                    //#endregion
                    #endregion

                    #region 获取私钥和APP_ID信息

                    if (payConfigList == null || payConfigList.Count() <= 0 || payConfigList.Where(d => d.flag_type == 4 && d.parmcode == "pay_alipay_partner" && d.parmvalue != "").Count() <= 0)
                    {
                        br.Success = false;
                        br.Message.Add(string.Format("没有设置支付宝商户身份ID,不能支付."));
                        return(br);
                    }

                    if (payConfigList == null || payConfigList.Count() <= 0 || payConfigList.Where(d => d.flag_type == 4 && d.parmcode == "pay_alipay_store_id" && d.parmvalue != "").Count() <= 0)
                    {
                        br.Success = false;
                        br.Message.Add(string.Format("没有设置支付宝商户门店编号,不能支付."));
                        return(br);
                    }

                    if (string.IsNullOrEmpty(aliModel.auth_code))
                    {
                        br.Success = false;
                        br.Message.Add(string.Format("没有支付授权码,不能支付."));
                        return(br);
                    }

                    if (string.IsNullOrEmpty(aliModel.subject))
                    {
                        br.Success = false;
                        br.Message.Add(string.Format("没有订单标题,不能支付."));
                        return(br);
                    }

                    #endregion

                    #region 调接口处理
                    //开发者帐号
                    aliModel.m_code       = payConfigList.Where(d => d.flag_type == 4 && d.parmcode == "pay_alipay_partner").FirstOrDefault().parmvalue;
                    aliModel.scene        = "bar_code";
                    aliModel.total_amount = (decimal)Frame.Common.OperationHelper.Digit(item.money, 2);    //总金额
                    aliModel.store_id     = payConfigList.Where(d => d.flag_type == 4 && d.parmcode == "pay_alipay_store_id").FirstOrDefault().parmvalue;
                    aliModel.out_trade_no = param["dh"].ToString();

                    //terminal_id
                    //auth_code
                    //operator_id
                    //body
                    //subject

                    br = this.AliPayNew(aliModel);
                    if (br.Success == false)
                    {
                        throw new CySoftException(br);
                    }
                    AliPayResultModel aliPayResultModel = (AliPayResultModel)br.Data;
                    dh_ec      = aliModel.out_trade_no;
                    ec_tradeno = aliPayResultModel.trade_no;
                    br.Data    = new { dh = param["dh"].ToString(), dh_ec = aliModel.out_trade_no, ec_tradeno = aliPayResultModel.trade_no };
                    #endregion



                    break;

                case "wx":    //微信
                    #region 检查有没有设置支付类型
                    if (payConfigList == null || payConfigList.Where(d => d.flag_type == 5).Count() <= 0)
                    {
                        br.Success = false;
                        br.Message.Add(string.Format("没有设置微信支付类型,不能支付."));
                        return(br);
                    }

                    if (payConfigList.Where(d => d.flag_type == 5 && d.parmcode == "pay_wx_is_use" && d.parmvalue == "1").Count() <= 0)
                    {
                        br.Success = false;
                        br.Message.Add(string.Format("没有启用微信支付,不能支付."));
                        return(br);
                    }

                    #endregion

                    #region 序列化Model
                    WXPayModel wxModel = new WXPayModel();
                    try
                    {
                        wxModel = Utility.JSON.Deserialize <WXPayModel>(item.data);
                        wxModel.out_trade_no = param["dh"].ToString();
                        wxModel.total_fee    = (int)((decimal)(item.money * 100));
                        wxModel.body         = "Pos";
                    }
                    catch (Exception ex)
                    {
                        br.Success = false;
                        br.Message.Add(string.Format("微信类型支付数据不符合"));
                        throw new CySoftException(br);
                    }
                    #endregion

                    #region 获取子商户号信息
                    if (payConfigList == null || payConfigList.Count() <= 0 || payConfigList.Where(d => d.flag_type == 5 && d.parmcode == "pay_wx_mch_id_child" && d.parmvalue != "").Count() <= 0)
                    {
                        br.Success = false;
                        br.Message.Add(string.Format("没有设置微信支付子商户号,不能支付."));
                        return(br);
                    }
                    #endregion

                    #region 调接口处理
                    wxModel.sub_mch_id   = payConfigList.Where(d => d.flag_type == 5 && d.parmcode == "pay_wx_mch_id_child").FirstOrDefault().parmvalue;
                    wxModel.out_trade_no = param["dh"].ToString();

                    br = this.WXPay(wxModel);
                    if (br.Success == false)
                    {
                        throw new CySoftException(br);
                    }
                    WXPayResultModel wxPayResultModel = (WXPayResultModel)br.Data;

                    dh_ec      = wxPayResultModel.out_trade_no;
                    ec_tradeno = wxPayResultModel.transaction_id;

                    br.Data = new { dh = param["dh"].ToString(), dh_ec = wxPayResultModel.out_trade_no, ec_tradeno = wxPayResultModel.transaction_id };
                    #endregion

                    break;

                default:
                    br.Success = false;
                    br.Message.Add(string.Format("含有未知的支付类型 不予处理!"));
                    return(br);
                }
                i++;
            }
            #endregion

            br.Success = true;
            br.Data    = new { dh = param["dh"].ToString(), dh_ec = dh_ec, ec_tradeno = ec_tradeno, msg = "", add_je = add_je, add_je_zs = add_je_zs, je_qm = je_qm, je_qm_zs = je_qm_zs };
            return(br);
        }
Example #9
0
        /// <summary>
        /// 获取微信支付签名信息
        /// 调用前请先配置wxPayV3Info属性,否则会支付失败,如果paySign = "ERROR",请查看package内容信息
        /// 目前提供最基本的签名字段,有时间的话可以增加基础以外字段的动态增加,一般情况下,基础的字段也能满足支付需求了
        /// 微信支付步骤:</summary>
        /// 1.$.post调用GetWXPayInfo()获取WXPayModel数据,其中包含签名数据
        /// 2.wxpay.js调用 WeixinJSBridge.invoke('getBrandWCPayRequest')发起微信支付
        /// 3.处理回调,成功后返回success
        /// <param name="payorder"></param>
        /// <param name="openid"></param>
        /// <param name="tfee">支付的金额</param>
        /// <param name="body">备注</param>
        /// <param name="pid">产品信息</param>
        /// <param name="sp_billno">订单号码</param>
        /// <returns>返回签名数据,Response给JS呼出微信支付控件,返回WXPayModel.paySign=ERROR时报错</returns>
        public static WXPayModel GetWXPayInfo(PayOrder payorder, string openid, string tfee, string body, string pid, string sp_billno)
        {
            try
            {
                string timeStamp = "";
                string nonceStr  = "";
                string package   = "";
                string paySign   = "";

                //创建支付应答对象
                RequestHandler packageReqHandler = new RequestHandler(null);
                //初始化
                packageReqHandler.Init();

                //调起微信支付签名
                timeStamp = TenPayV3Util.GetTimestamp();
                nonceStr  = TenPayV3Util.GetNoncestr();

                //设置package订单参数
                packageReqHandler.SetParameter("appid", wxPayV3Info.AppId);             //公众账号ID
                packageReqHandler.SetParameter("mch_id", wxPayV3Info.MchId);            //商户号
                packageReqHandler.SetParameter("nonce_str", nonceStr);                  //随机字符串
                packageReqHandler.SetParameter("body", body);
                packageReqHandler.SetParameter("out_trade_no", sp_billno);              //商家订单号
                packageReqHandler.SetParameter("spbill_create_ip", HttpContext.Current.Request.UserHostAddress);
                packageReqHandler.SetParameter("total_fee", tfee);
                packageReqHandler.SetParameter("notify_url", wxPayV3Info.TenPayV3Notify);    //接收财付通通知的URL
                packageReqHandler.SetParameter("trade_type", TenPayV3Type.JSAPI.ToString()); //交易类型
                packageReqHandler.SetParameter("openid", openid);                            //OPENID

                //获取package包
                string sign = packageReqHandler.CreateMd5Sign("key", wxPayV3Info.Key);
                packageReqHandler.SetParameter("sign", sign);
                string data   = packageReqHandler.ParseXML();
                var    result = TenPayV3.Unifiedorder(data);
                var    res    = XDocument.Parse(result);
                if (res.Element("xml").Element("prepay_id") == null)
                {
                    string err_code = res.Element("xml").Element("return_msg").Value;
                    return(new WXPayModel()
                    {
                        paySign = "ERROR", package = err_code
                    });
                }
                string prepayId = res.Element("xml").Element("prepay_id").Value;
                package = string.Format("prepay_id={0}", prepayId);
                //设置支付参数
                RequestHandler paySignReqHandler = new RequestHandler(null);
                paySignReqHandler.SetParameter("appId", wxPayV3Info.AppId);
                paySignReqHandler.SetParameter("timeStamp", timeStamp);
                paySignReqHandler.SetParameter("nonceStr", nonceStr);
                paySignReqHandler.SetParameter("package", package);
                paySignReqHandler.SetParameter("signType", "MD5");
                paySign = paySignReqHandler.CreateMd5Sign("key", wxPayV3Info.Key);
                WXPayModel wm = new WXPayModel()
                {
                    appId     = wxPayV3Info.AppId,
                    nonceStr  = nonceStr,
                    package   = package,
                    payNo     = sp_billno,
                    paySign   = paySign,
                    timeStamp = timeStamp
                };
                //payorder(wm, openid, tfee, body, pid, param, sp_billno);
                payorder(wm);
                return(wm);
            }
            catch (Exception ex)
            {
                return(new WXPayModel()
                {
                    paySign = "ERROR", package = "抛出异常:" + ex.ToString()
                });
            }
        }