Exemple #1
0
        public void NowPayNotify()
        {
            string errorMessage = "fail";

            try
            {
                string appKey = NowPayConfig.AppKey;

                SortedDictionary <string, string> sPara = GetRequestPost();
                if (sPara.Count > 0)
                {
                    if (string.Compare(GetSign(appKey, sPara), sPara["signature"], true) == 0)
                    {
                        string  mhtOrderNo  = sPara["mhtOrderNo"];
                        decimal mhtOrderAmt = StringHelper.ToDecimal(sPara["mhtOrderAmt"]);
                        string  tradeStatus = sPara["tradeStatus"];
                        if (string.Compare(tradeStatus, "A001", true) == 0)
                        {
                            int          result = 0;
                            RechargeInfo model  = new RechargeInfo();
                            model.OrderId   = mhtOrderNo;
                            model.FOrderId  = "";
                            model.Cash      = mhtOrderAmt;
                            model.PayMobile = "";
                            _rechargeService.Completed(model, out result);     //1:成功 0:失败
                            if (result == (int)ErrorMessage.成功)
                            {
                                errorMessage = "success";
                            }
                        }
                    }
                }
            }
            catch { }

            Response.Write(errorMessage);
        }
Exemple #2
0
        public override void ProcessNotify(out WxPayData data)
        {
            if (GetNotifyData(out data))
            {
                //检查支付结果中transaction_id是否存在
                if (!data.IsSet("transaction_id"))
                {
                    //若transaction_id不存在,则立即返回结果给微信支付后台
                    data = new WxPayData();
                    data.SetValue("return_code", "FAIL");
                    data.SetValue("return_msg", "支付结果中微信订单号不存在");

                    Log.Error(this.GetType().ToString(), "The Pay result is error : " + data.ToXml());

                    return;
                }

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

                //查询订单,判断订单真实性
                if (!QueryOrder(transaction_id))
                {
                    //若订单查询失败,则立即返回结果给微信支付后台
                    data = new WxPayData();
                    data.SetValue("return_code", "FAIL");
                    data.SetValue("return_msg", "订单查询失败");

                    Log.Error(this.GetType().ToString(), "Order query failure : " + data.ToXml());
                }
                //查询订单成功
                else
                {
                    string  mhtOrderNo = data.GetValue("out_trade_no").ToString();
                    decimal total_fee  = StringHelper.ToDecimal(data.GetValue("total_fee"));
                    if (!string.IsNullOrEmpty(mhtOrderNo))
                    {
                        int          result = 0;
                        RechargeInfo model  = new RechargeInfo();
                        model.OrderId   = mhtOrderNo;
                        model.FOrderId  = "";
                        model.Cash      = total_fee;
                        model.PayMobile = "";
                        _rechargeService.Completed(model, out result);     //1:成功 0:失败
                        if (result != (int)ErrorMessage.成功)
                        {
                            //失败
                            data = new WxPayData();
                            data.SetValue("return_code", "FAIL");
                            data.SetValue("return_msg", "订单查询失败");

                            Log.Error(this.GetType().ToString(), "Order query failure : " + data.ToXml());

                            return;
                        }
                    }

                    //成功
                    data.SetValue("return_code", "SUCCESS");
                    data.SetValue("return_msg", "OK");

                    Log.Info(this.GetType().ToString(), "order query success : " + data.ToXml());
                }
            }
        }
Exemple #3
0
        public override void ProcessNotify(out WxPayData data)
        {
            if (GetNotifyData(out data))
            {
                //Log.Info(this.GetType().ToString(), "ProcessNotify() out_trade_no = " + data.GetValue("out_trade_no").ToString());
                //Log.Info(this.GetType().ToString(), "ProcessNotify() isset openid = " + data.IsSet("openid"));
                //Log.Info(this.GetType().ToString(), "ProcessNotify() openid = " + data.GetValue("openid").ToString());
                //Log.Info(this.GetType().ToString(), "ProcessNotify() isset product_id = " + data.IsSet("product_id"));
                //Log.Info(this.GetType().ToString(), "ProcessNotify() product_id = " + data.GetValue("product_id").ToString());

                //检查openid和product_id是否返回
                if (!data.IsSet("openid") || !data.IsSet("product_id"))
                {
                    data = new WxPayData();
                    data.SetValue("return_code", "FAIL");
                    data.SetValue("return_msg", "回调数据异常");

                    Log.Info(this.GetType().ToString(), "The data WeChat post is error : " + data.ToXml());

                    return;
                }

                //调统一下单接口,获得下单结果
                string    openid             = data.GetValue("openid").ToString();
                string    product_id         = data.GetValue("product_id").ToString();
                WxPayData unifiedOrderResult = new WxPayData();
                try
                {
                    unifiedOrderResult = UnifiedOrder(openid, product_id);
                }
                catch   //若在调统一下单接口时抛异常,立即返回结果给微信支付后台
                {
                    data = new WxPayData();
                    data.SetValue("return_code", "FAIL");
                    data.SetValue("return_msg", "统一下单失败");

                    Log.Error(this.GetType().ToString(), "UnifiedOrder failure : " + data.ToXml());

                    return;
                }

                //若下单失败,则立即返回结果给微信支付后台
                if (!unifiedOrderResult.IsSet("appid") || !unifiedOrderResult.IsSet("mch_id") || !unifiedOrderResult.IsSet("prepay_id"))
                {
                    data = new WxPayData();
                    data.SetValue("return_code", "FAIL");
                    data.SetValue("return_msg", "统一下单失败");

                    Log.Error(this.GetType().ToString(), "UnifiedOrder failure : " + data.ToXml());

                    return;
                }

                #region

                string  mhtOrderNo = data.GetValue("out_trade_no").ToString();
                decimal total_fee  = StringHelper.ToDecimal(data.GetValue("total_fee"));
                if (!string.IsNullOrEmpty(mhtOrderNo))
                {
                    int          result = 0;
                    RechargeInfo model  = new RechargeInfo();
                    model.OrderId   = mhtOrderNo;
                    model.FOrderId  = "";
                    model.Cash      = total_fee;
                    model.PayMobile = "";
                    _rechargeService.Completed(model, out result);     //1:成功 0:失败
                    if (result != (int)ErrorMessage.成功)
                    {
                        data = new WxPayData();
                        data.SetValue("return_code", "FAIL");
                        data.SetValue("return_msg", "统一下单失败");

                        Log.Error(this.GetType().ToString(), "UnifiedOrder failure : " + data.ToXml());

                        return;
                    }
                }

                #endregion

                //统一下单成功,则返回成功结果给微信支付后台
                data = new WxPayData();
                data.SetValue("return_code", "SUCCESS");
                data.SetValue("return_msg", "OK");
                data.SetValue("appid", WxPayConfig.APPID);
                data.SetValue("mch_id", WxPayConfig.MCHID);
                data.SetValue("nonce_str", WxPayApi.GenerateNonceStr());
                data.SetValue("prepay_id", unifiedOrderResult.GetValue("prepay_id"));
                data.SetValue("result_code", "SUCCESS");
                data.SetValue("err_code_des", "OK");
                data.SetValue("sign", data.MakeSign());

                Log.Info(this.GetType().ToString(), "UnifiedOrder success , send data to WeChat : " + data.ToXml());
            }
        }
Exemple #4
0
        public void Notify()
        {
            string errorMessage = "fail";

            Dictionary <string, string> sPara = GetParamPost();

            if (sPara.Count > 0)//判断是否有带返回参数
            {
                Com.Alipay.Notify aliNotify = new Com.Alipay.Notify();
                bool verifyResult           = aliNotify.VerifyNotify(sPara, Request.Form["sign"]);

                if (verifyResult)//验证成功
                {
                    //解密(如果是RSA签名需要解密,如果是MD5签名则下面一行清注释掉)
                    sPara = aliNotify.Decrypt(sPara);

                    //XML解析notify_data数据
                    try
                    {
                        XmlHelper xmlHelper = new XmlHelper(sPara["notify_data"]);
                        if (xmlHelper != null)
                        {
                            //商户订单号
                            string out_trade_no = xmlHelper.GetNodeString("/notify/out_trade_no");
                            //支付宝交易号
                            string trade_no = xmlHelper.GetNodeString("/notify/trade_no");
                            //交易状态
                            string trade_status = xmlHelper.GetNodeString("/notify/trade_status");

                            string buyer_email = xmlHelper.GetNodeString("/notify/buyer_email");

                            string seller_id = xmlHelper.GetNodeString("/notify/seller_id");

                            decimal total_fee = xmlHelper.GetNodeDecimal("/notify/total_fee");

                            if (string.Compare(Com.Alipay.Config.Partner, seller_id, true) == 0 && (string.Compare(trade_status, "TRADE_FINISHED", true) == 0 || string.Compare(trade_status, "TRADE_SUCCESS", true) == 0))
                            {
                                int          result = 0;
                                RechargeInfo model  = new RechargeInfo();
                                model.OrderId   = out_trade_no;
                                model.FOrderId  = trade_no;
                                model.Cash      = total_fee * 100;
                                model.PayMobile = "";
                                _rechargeService.Completed(model, out result);     //1:成功 0:失败
                                if (result == (int)ErrorMessage.成功)
                                {
                                    errorMessage = "success";
                                }
                            }
                            else
                            {
                                errorMessage = trade_status;
                            }
                        }
                    }
                    catch
                    {
                    }
                }
            }
            else
            {
                errorMessage = "无通知参数";
            }

            this.Response.Write(errorMessage);
        }