Esempio n. 1
0
 //查询订单
 private bool QueryOrder(string transaction_id)
 {
     WxPayAPIHelp.WxPayData req = new WxPayAPIHelp.WxPayData();
     req.SetValue("transaction_id", transaction_id);
     WxPayAPIHelp.WxPayData res = WxPayAPIHelp.WxPayApi.OrderQuery(req);
     if (res.GetValue("return_code").ToString() == "SUCCESS" &&
         res.GetValue("result_code").ToString() == "SUCCESS")
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
Esempio n. 2
0
        public JsonResult WxPay()
        //public HttpResponseMessage WxPay()
        {
            if (WebHelper.IsGet())
            {
                var result = new
                {
                    return_code = "erro",
                    return_msg  = "请求错误",
                };
                return(Json(result));
                //return new HttpResponseMessage { Content = new StringContent(result.ToString(), System.Text.Encoding.UTF8, "application/json") };
            }
            else
            {
                var          form     = Request.Form;
                var          sPara    = GetRequestPost(form);
                WeiXinConfig wxconfig = BMAConfig.WeiXinConfig;
                if (sPara.Count <= 0)
                {
                    throw new ArgumentNullException();
                }
                //LogWriter.Default.WriteInfo(form.ToString());//记录请求关键信息到日志中去
                BMALog.Instance.Write(form.ToString());
                var out_trade_no     = BrnMall.Core.Common.Utils.GenerateOutTradeNo() + "_" + sPara["paytype"]; //Guid.NewGuid().ToString();
                var domain           = wxconfig.Domain;
                var body             = sPara["body"];
                var detail           = sPara["detail"];
                var attach           = sPara["attach"];
                var fee_type         = "CNY";
                var total_fee        = int.Parse(sPara["total_fee"]) * 100;
                var trade_type       = sPara["trade_type"];
                var spbill_create_ip = (trade_type == "APP" || trade_type == "NATIVE") ? Request.UserHostName : wxconfig.Spbill_create_ip;
                var time_start       = DateTime.Now.ToString("yyyyMMddHHmmss");
                var time_expire      = DateTime.Now.AddHours(1).ToString("yyyyMMddHHmmss"); //默认1个小时订单过期,开发者可自定义其他超时机制,原则上微信订单超时时间不超过2小时
                var goods_tag        = sPara["goods_tag"];
                var notify_url       = wxconfig.NOTIFY_URL;                                 //string.Format("{0}/mob/WXPay/Notify", domain);//与下面的Notify对应,开发者可自定义其他url地址
                var product_id       = sPara["product_id"];
                var openid           = sPara["openid"];
                var partnerKey       = wxconfig.PartnerKey;
                var content          = WxPayAPI.UnifiedOrder(
                    wxconfig.AppID, wxconfig.Mch_id, wxconfig.Device_info, Util.CreateNonce_str(),
                    body, detail, attach, out_trade_no, fee_type, total_fee, spbill_create_ip, time_start, time_expire,
                    goods_tag, notify_url, trade_type, product_id, openid, partnerKey);
                BMALog.Instance.Write("url:" + notify_url + "|||con:" + content);
                if (content.return_code.Value == "SUCCESS" && content.result_code.Value == "SUCCESS")
                {
                    WxPayAPIHelp.WxPayData jsApiParam = new WxPayAPIHelp.WxPayData();
                    string payTimeSamp = DateTime.Now.Ticks.ToString().Substring(0, 10);
                    jsApiParam.SetValue("appId", wxconfig.AppID);
                    jsApiParam.SetValue("timeStamp", payTimeSamp);
                    jsApiParam.SetValue("nonceStr", content.nonce_str.Value);
                    jsApiParam.SetValue("package", "prepay_id=" + content.prepay_id.Value);
                    jsApiParam.SetValue("signType", "MD5");

                    var result = new
                    {
                        prepay_id   = content.prepay_id.Value,
                        trade_type  = content.trade_type.Value,
                        sign        = content.sign.Value,
                        sign1       = jsApiParam.MakeSign(),
                        timestamp   = payTimeSamp,
                        nonce_str   = content.nonce_str.Value,
                        return_code = content.result_code.Value,
                        return_msg  = "",
                    };
                    //string result = "{\"return_code\":\"SUCCESS\",\"sc\":\"123\"}";
                    return(Json(result));
                    //return new HttpResponseMessage { Content = new StringContent(result.ToString(), System.Text.Encoding.UTF8, "application/json") };
                }
                else
                {
                    var result = new
                    {
                        return_code = content.return_code.Value,
                        return_msg  = content.return_msg.Value,
                    };
                    return(Json(result));
                    //return new HttpResponseMessage { Content = new StringContent(result.ToString(), System.Text.Encoding.UTF8, "application/json") };
                }
            }
        }
Esempio n. 3
0
        public string Notify()
        {
            WxPayAPIHelp.Notify    not        = new WxPayAPIHelp.Notify();
            WxPayAPIHelp.WxPayData notifyData = not.GetNotifyData();

            //检查支付结果中transaction_id是否存在
            if (!notifyData.IsSet("transaction_id"))
            {
                //若transaction_id不存在,则立即返回结果给微信支付后台
                WxPayAPIHelp.WxPayData res = new WxPayAPIHelp.WxPayData();
                res.SetValue("return_code", "FAIL");
                res.SetValue("return_msg", "支付结果中微信订单号不存在");
                BMALog.Instance.Write("The Pay result is error : " + res.ToXml());
                return(res.ToXml());

                Response.Write(res.ToXml());
                Response.End();
            }

            string transaction_id = notifyData.GetValue("transaction_id").ToString();

            //查询订单,判断订单真实性
            if (!QueryOrder(transaction_id))
            {
                //若订单查询失败,则立即返回结果给微信支付后台
                WxPayAPIHelp.WxPayData res = new WxPayAPIHelp.WxPayData();
                res.SetValue("return_code", "FAIL");
                res.SetValue("return_msg", "订单查询失败");
                BMALog.Instance.Write("Order query failure : " + res.ToXml());
                return(res.ToXml());

                Response.Write(res.ToXml());
                Response.End();
            }
            //查询订单成功
            else
            {
                WxPayAPIHelp.WxPayData res = new WxPayAPIHelp.WxPayData();
                res.SetValue("return_code", "SUCCESS");
                res.SetValue("return_msg", "OK");
                res.SetValue("out_trade_no", notifyData.GetValue("out_trade_no"));
                BMALog.Instance.Write("order query success : " + res.ToXml());
                try
                {
                    var out_trade_no = notifyData.GetValue("out_trade_no");

                    //TODO 商户处理订单逻辑: 1.注意交易单不要重复处理;2.注意判断返回金额
                    var cash_fee = BrnMall.Core.Common.Utils.StrToInt(notifyData.GetValue("cash_fee")) / 100;
                    //取得type
                    int      strtype = 1;
                    string[] arrtype = out_trade_no.ToString().Split('_');
                    try
                    {
                        strtype = BrnMall.Core.Common.Utils.StrToInt(arrtype[1]);
                    }
                    catch
                    {
                        BMALog.Instance.Write("获取Type出错,订单号:" + out_trade_no + " 订单金额:" + cash_fee);
                    }
                    //TODO:postData中携带该次支付的用户相关信息,这将便于商家拿到openid,以便后续提供更好的售后服务,譬如:微信公众好通知用户付款成功。如果不提供服务则可以删除此代码
                    var openid = notifyData.GetValue("openid");

                    try
                    {
                        BrnMall.Core.BLL.SpHelp.SP_CheckPayOrder(out_trade_no.ToString(), openid.ToString(), cash_fee, strtype, 1);
                    }
                    catch (Exception ex)
                    {
                        BMALog.Instance.Write(ex.ToString());
                    }

                    // }
                }
                catch (Exception ex)
                {
                    BMALog.Instance.Write("发生错误 : " + ex.ToString());
                }

                return(res.ToXml());

                Response.Write(res.ToXml());
                Response.End();
            }
        }
Esempio n. 4
0
        public ActionResult OrderPay()
        {
            //订单id列表
            string oidList = WebHelper.GetQueryString("oidList");

            string           paySystemName   = "";
            decimal          allSurplusMoney = 0M;
            List <OrderInfo> orderList       = new List <OrderInfo>();

            foreach (string oid in StringHelper.SplitString(oidList))
            {
                //订单信息
                OrderInfo orderInfo = Orders.GetOrderByOid(TypeHelper.StringToInt(oid));
                if (orderInfo != null && orderInfo.Uid == WorkContext.Uid && orderInfo.OrderState == (int)OrderState.WaitPaying && orderInfo.PayMode == 1 && (paySystemName.Length == 0 || paySystemName == orderInfo.PaySystemName))
                {
                    orderList.Add(orderInfo);
                }
                else
                {
                    return(Redirect(Url.Action("index", "home")));
                }

                paySystemName    = orderInfo.PaySystemName;
                allSurplusMoney += orderInfo.SurplusMoney;
            }

            if (orderList.Count < 1 || allSurplusMoney == 0M)
            {
                return(Redirect(Url.Action("index", "home")));
            }
            WeiXinConfig wxconfig  = BMAConfig.WeiXinConfig;
            var          appId     = wxconfig.AppID; //WeixinConfig.AppID;
            var          nonceStr  = Util.CreateNonce_str();
            var          timestamp = DateTime.Now.Ticks.ToString().Substring(0, 10);
            var          domain    = wxconfig.Domain;
            var          url       = Request.Url.ToString().Replace("#", "");// domain + Request.Url.PathAndQuery;

            var jsTickect   = WeiXinHelp.IsExistjsapi_ticket();
            var string1     = "";
            var signature   = WeiXinHelp.GetjsSDK_Signature(nonceStr, jsTickect, timestamp, url); //JSAPI.GetSignature(jsTickect, nonceStr, timestamp, url, out string1);
            var userAgent   = Request.UserAgent;
            var userVersion = userAgent.Substring(userAgent.LastIndexOf("/") + 1);

            //WeiXinConfig wxconfig = BMAConfig.WeiXinConfig;
            //Logs.Write(form.ToString());
            var out_trade_no = orderList[0].OSN; //Guid.NewGuid().ToString();
            //var domain = wxconfig.Domain;
            var body             = "购买创梦星火商城商品";
            var detail           = "购买创梦星火商城商品";
            var attach           = "购买创梦星火商城商品";
            var fee_type         = "CNY";
            var total_fee        = Decimal.ToInt32(orderList[0].SurplusMoney) * 100;// *100;
            var trade_type       = "JSAPI";
            var spbill_create_ip = (trade_type == "APP" || trade_type == "NATIVE") ? Request.UserHostName : wxconfig.Spbill_create_ip;
            var time_start       = DateTime.Now.ToString("yyyyMMddHHmmss");
            var time_expire      = DateTime.Now.AddDays(7).ToString("yyyyMMddHHmmss"); //默认1个小时订单过期,开发者可自定义其他超时机制,原则上微信订单超时时间不超过2小时
            var goods_tag        = "商品";
            var notify_url       = wxconfig.NOTIFY_URL;                                //与下面的Notify对应,开发者可自定义其他url地址
            var product_id       = orderList[0].Oid.ToString();
            var openid           = WorkContext.Openid;
            var partnerKey       = wxconfig.PartnerKey;
            var content          = WxPayAPI.UnifiedOrder(
                wxconfig.AppID, wxconfig.Mch_id, wxconfig.Device_info, Util.CreateNonce_str(),
                body, detail, attach, out_trade_no, fee_type, total_fee, spbill_create_ip, time_start, time_expire,
                goods_tag, notify_url, trade_type, product_id, openid, partnerKey);
            var prepay_id = "";
            //var trade_type = "";
            var paySign = "";
            //var timestamp = "";
            var nonce_str   = "";
            var return_code = "";

            if (content.return_code.Value == "SUCCESS" && content.result_code.Value == "SUCCESS")
            {
                WxPayAPIHelp.WxPayData jsApiParam = new WxPayAPIHelp.WxPayData();
                string payTimeSamp = DateTime.Now.Ticks.ToString().Substring(0, 10);
                jsApiParam.SetValue("appId", wxconfig.AppID);
                jsApiParam.SetValue("timeStamp", payTimeSamp);
                jsApiParam.SetValue("nonceStr", content.nonce_str.Value);
                jsApiParam.SetValue("package", "prepay_id=" + content.prepay_id.Value);
                jsApiParam.SetValue("signType", "MD5");
                //prepay_id = content.prepay_id.Value;
                prepay_id  = content.prepay_id.Value;
                trade_type = content.trade_type.Value;
                paySign    = jsApiParam.MakeSign();

                timestamp   = payTimeSamp;
                nonce_str   = content.nonce_str.Value;
                return_code = content.result_code.Value;
            }
            else
            {
                return(PromptView("错误编号:" + content.return_code.Value + "错误信息:" + content.return_msg.Value));
            }
            OrderPayModel model = new OrderPayModel();

            model.OidList         = oidList;
            model.AllSurplusMoney = allSurplusMoney;
            model.OrderList       = orderList;
            model.PayPlugin       = Plugins.GetPayPluginBySystemName(paySystemName);
            model.nonceStr        = nonceStr;
            model.jsapiTicket     = jsTickect;
            model.nonce_str       = nonce_str;
            model.paySign         = paySign;
            model.signature       = signature;
            model.timestamp       = timestamp;
            model.userAgent       = userAgent;
            model.userVersion     = userVersion;
            model.appId           = appId;
            model.prepay_id       = prepay_id;
            return(View(model));

            //return PromptView("出错了!");
        }