Exemple #1
0
        }                                            //支付成功跳转的地址
        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;
            }
        }
Exemple #2
0
        /// <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
            }
        }