Пример #1
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());
                }
            }
        }
Пример #2
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());
            }
        }