//查询订单 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); } }
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") }; } } }
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(); } }
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("出错了!"); }