} //支付成功跳转的地址 protected void Page_Load(object sender, EventArgs e) { string openid = DTRequest.GetQueryString("openid"); string order_no = DTRequest.GetQueryString("order_no"); decimal order_amount = 9.28M; //订单金额 string subject1 = "在线支付"; //订单备注1 string subject2 = "在线支付"; //订单备注2 //检查参数是否正确 if (string.IsNullOrEmpty(openid) || string.IsNullOrEmpty(order_no)) { Response.Redirect(new Web.UI.BasePage().linkurl("error", "?msg=" + Utils.UrlEncode("对不起,获取OPENID参数有误!"))); return; } //JSAPI支付预处理 try { //统一下单 string sendUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder"; JsApiConfig jsApiConfig = new JsApiConfig(); WxPayData data = new WxPayData(); data.SetValue("body", subject1); //商品描述 data.SetValue("detail", subject2); //商品详情 data.SetValue("out_trade_no", order_no); //商户订单号 data.SetValue("total_fee", (Convert.ToDouble(order_amount) * 100).ToString()); //订单总金额,以分为单位 data.SetValue("trade_type", "JSAPI"); //交易类型 data.SetValue("openid", openid); //公众账号ID data.SetValue("appid", jsApiConfig.AppId); //公众账号ID data.SetValue("mch_id", jsApiConfig.Partner); //商户号 data.SetValue("nonce_str", JsApiPay.GenerateNonceStr()); //随机字符串 data.SetValue("notify_url", jsApiConfig.Notify_url); //异步通知url data.SetValue("spbill_create_ip", DTRequest.GetIP()); //终端IP data.SetValue("sign", data.MakeSign(jsApiConfig.Key)); //签名 string xml = data.ToXml(); //转换成XML var startTime = DateTime.Now; //开始时间 string response = HttpService.Post(xml, sendUrl, false, 6); //发送请求 var endTime = DateTime.Now; //结束时间 int timeCost = (int)((endTime - startTime).TotalMilliseconds); //计算所用时间 WxPayData result = new WxPayData(); result.FromXml(response, jsApiConfig.Key); JsApiPay.ReportCostTime(sendUrl, timeCost, result);//测速上报 LogHelper.WriteDebugLog("[pay]:" + result.ToString()); //获取H5调起JS API参数 WxPayData jsApiParam = new WxPayData(); jsApiParam.SetValue("appId", result.GetValue("appid")); jsApiParam.SetValue("timeStamp", JsApiPay.GenerateTimeStamp()); jsApiParam.SetValue("nonceStr", JsApiPay.GenerateNonceStr()); jsApiParam.SetValue("package", "prepay_id=" + result.GetValue("prepay_id")); jsApiParam.SetValue("signType", "MD5"); jsApiParam.SetValue("paySign", jsApiParam.MakeSign(jsApiConfig.Key)); wxJsApiParam = jsApiParam.ToJson(); LogHelper.WriteDebugLog("[ApiParam]:" + jsApiParam.ToJson()); //支付成功后跳转的URL returnUrl = new Web.UI.BasePage().linkurl("payment", "?action=succeed&order_no=" + order_no); //Response.Redirect(returnUrl); } catch (Exception ex) { Response.Redirect(new Web.UI.BasePage().linkurl("error", "?msg=" + Utils.UrlEncode(ex.Message))); return; } }
/// <summary> /// 微信的异步支付返回 /// </summary> /// <returns></returns> public ActionResult WetChatNotify() { try { //需验证支付结果 WxPayData notifyData = GetNotifyData(); PayLog notity2 = new PayLog(); notity2.ID = FCake.Core.Common.DataHelper.GetSystemID(); notity2.LogTime = DateTime.Now; notity2.Message = "notity2接收到的数据:" + notifyData.ToJson().ToString(); log.Add(notity2); WxPayData res = new WxPayData(); //检查支付结果中transaction_id是否存在 if (!notifyData.IsSet("transaction_id")) { //若transaction_id不存在,则立即返回结果给微信支付后台 res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "支付结果中微信订单号不存在"); PayLog notity3 = new PayLog(); notity3.ID = FCake.Core.Common.DataHelper.GetSystemID(); notity3.LogTime = DateTime.Now; notity3.Message = "notity3接收到的数据:没有transaction_id"; log.Add(notity3); } string transaction_id = notifyData.GetValue("transaction_id").ToString(); //查询订单,判断订单真实性 if (!QueryOrder(transaction_id)) { //若订单查询失败,则立即返回结果给微信支付后台 res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "订单查询失败"); } //查询订单成功 else { res.SetValue("return_code", "SUCCESS"); res.SetValue("return_msg", "OK"); var orderId = notifyData.GetValue("out_trade_no").ToString(); PayLog notity4 = new PayLog(); notity4.ID = FCake.Core.Common.DataHelper.GetSystemID(); notity4.LogTime = DateTime.Now; notity4.Message = "notity4接收到的out_trade_no数据:" + orderId; log.Add(notity4); var preInfo = new PrePayInfoService().GetPrePayByPrePayNo(orderId); var order = psv.GetOrderByOrderNo(preInfo.OrderNo);//获取订单信息 if (order.Status == OrderStatus.NotPay) { PayLog notity5 = new PayLog(); notity5.ID = FCake.Core.Common.DataHelper.GetSystemID(); notity5.LogTime = DateTime.Now; notity5.Message = "notity5开始修改" + order.No + "订单状态:"; log.Add(notity5); psv.FinishOrder(order.No, transaction_id, FeeType.WXPay); } } return(Content(res.ToString())); } catch (Exception e) { #region 回调异常日志 PayLog notity99 = new PayLog(); notity99.ID = FCake.Core.Common.DataHelper.GetSystemID(); notity99.LogTime = DateTime.Now; notity99.Message = "回调发生异常" + e.Message; log.Add(notity99); return(Content("error")); #endregion } }