Exemplo n.º 1
0
        /// <summary>
        /// 处理
        /// </summary>
        /// <returns></returns>
        public override PaylineEntity Process()
        {
            var  sPara    = GetResponse();
            bool isVerify = VerifyProcess(sPara);
            var  number   = sPara.ContainsKey("out_trade_no") ? sPara["out_trade_no"] : "";
            var  info     = GetPayline(number);

            if (info == null || info.Amount != sPara["total_amount"].Convert <decimal>())
            {
                return(null);
            }
            info.OutNumber = sPara["trade_no"];
            info.Status    = isVerify ? PaylineStatusType.Success : PaylineStatusType.Failure;
            info.SetProperty(it => it.OutNumber);
            info.SetProperty(it => it.Status);
            info.SaveType = SaveType.Modify;
            LogHelper.AddEcho(new EchoEntity
            {
                Method   = "Beeant.Repository.Services.Finance.AliPaylineRepository.Process",
                Request  = "",
                Response = sPara.SerializeJson(),
                Remark   = "",
                Url      = HttpContext.Current.Request.Url.ToString(),
                Key      = number,
                SaveType = SaveType.Add
            });
            return(info);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public override bool Create(PaylineEntity info)
        {
            var resParams = CreateWechatOrder(info);

            if (resParams == null || !resParams.ContainsKey("appid") || !resParams.ContainsKey("prepay_id") ||
                string.IsNullOrEmpty(resParams["appid"]) || string.IsNullOrEmpty(resParams["prepay_id"]))
            {
                return(false);
            }
            var paraTemp = new SortedDictionary <string, string>
            {
                { "appId", resParams["appid"] },
                { "timeStamp", (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds.Convert <long>().ToString() },
                { "nonceStr", Guid.NewGuid().ToString().Replace("-", "") },
                { "package", string.Format("prepay_id={0}", resParams["prepay_id"]) },
                { "signType", "MD5" }
            };

            paraTemp.Add("paySign", MakeSign(paraTemp, MchKey));
            info.Forms     = paraTemp;
            info.OutNumber = resParams["prepay_id"];
            info.Status    = PaylineStatusType.Waiting;
            info.Request   = GetRequest(info, resParams);
            LogHelper.AddEcho(new EchoEntity
            {
                Method   = "Beeant.Repository.Services.Finance.WechatPaylineRepository.Create",
                Request  = info.Request,
                Response = "",
                Remark   = "",
                Url      = HttpContext.Current.Request.Url.ToString(),
                Key      = info.Number,
                SaveType = SaveType.Add
            });
            return(true);
        }
Exemplo n.º 3
0
        public override bool Refund(PaylineEntity info)
        {
            var builder = new StringBuilder("{");

            //订单支付时传入的商户订单号,不能和 trade_no同时为空。
            builder.AppendFormat("\"out_trade_no\":\"{0}\",", info.Number);
            //支付宝交易号,和商户订单号不能同时为空  2017开头
            builder.AppendFormat("\"trade_no\":\"{0}\",", info.OutNumber);
            //需要退款的金额,该金额不能大于订单金额,单位为元,支持两位小数
            builder.AppendFormat("\"refund_amount\":\"{0}\",", 0 - info.Amount);
            //	退款的原因说明
            builder.AppendFormat("\"refund_reason\":\"{0}\",", "测试退款");
            //	标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传。
            builder.AppendFormat("\"out_request_no\":\"{0}\"", info.Number);
            ////商户的操作员编号
            //builder.AppendFormat("\"operator_id\":\"{0}\"", "FAST_INSTANT_TRADE_PAY");
            ////	商户的门店编号
            //builder.AppendFormat("\"store_id\":\"{0}\"", "FAST_INSTANT_TRADE_PAY");
            ////商户的终端编号
            //builder.AppendFormat("\"terminal_id\":\"{0}\"", "FAST_INSTANT_TRADE_PAY");
            builder.Append("}");

            AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();

            request.BizContent = builder.ToString();

            AlipayTradeRefundResponse response = AopClient.Execute(request);

            info.Request = response.Body;
            LogHelper.AddEcho(new EchoEntity
            {
                Method   = "Beeant.Repository.Services.Finance.AliPaylineRepository.Refund",
                Request  = request.BizContent,
                Response = response.Body,
                Remark   = "",
                Url      = HttpContext.Current.Request.Url.ToString(),
                Key      = info.Number,
                SaveType = SaveType.Add
            });
            if (response.Msg == "Success")
            {
                info.OutNumber = response.TradeNo;
                info.Status    = PaylineStatusType.Success;
                return(true);
            }

            return(false);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 处理
        /// </summary>
        /// <returns></returns>
        public override PaylineEntity Process()
        {
            var sPara  = GetResponse();
            var number = sPara.ContainsKey("number")
                       ? sPara["number"]
                       : sPara.ContainsKey("out_trade_no") ? sPara["out_trade_no"] : "";

            if (string.IsNullOrWhiteSpace(number))
            {
                return(null);
            }
            var result = GetProcessResult(sPara, number);

            if (result == null || !result.ContainsKey("trade_state") || result["trade_state"] != "SUCCESS")
            {
                return(null);
            }
            var info = GetPayline(sPara["number"]);

            if (info == null || info.Status != PaylineStatusType.Waiting)
            {
                return(info);
            }
            info.Status    = result["trade_state"] == "SUCCESS" ? PaylineStatusType.Success : PaylineStatusType.Failure;
            info.OutNumber = result.ContainsKey("transaction_id") ? result["transaction_id"] : "";
            info.SetProperty(it => it.Status);
            info.SetProperty(it => it.OutNumber);
            info.SaveType = SaveType.Modify;
            LogHelper.AddEcho(new EchoEntity
            {
                Method   = "Beeant.Repository.Services.Finance.WechatPaylineRepository.Process",
                Request  = "",
                Response = sPara.SerializeJson(),
                Remark   = "",
                Url      = HttpContext.Current.Request.Url.ToString(),
                Key      = info.Number,
                SaveType = SaveType.Add
            });
            return(info);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public override bool Create(PaylineEntity info)
        {
            var rev = false;

            switch (info.ChannelType)
            {
            case Domain.Entities.ChannelType.Mobile:
                rev = CreateByWap(info); break;

            case Domain.Entities.ChannelType.Website:
                rev = CreateByPage(info); break;
            }
            LogHelper.AddEcho(new EchoEntity
            {
                Method   = "Beeant.Repository.Services.Finance.AliPaylineRepository.Create",
                Request  = info.Request,
                Response = "",
                Remark   = "",
                Url      = HttpContext.Current.Request.Url.ToString(),
                Key      = info.Number,
                SaveType = SaveType.Add
            });
            return(rev);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 退款
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public override bool Refund(PaylineEntity info)
        {
            string url           = "https://api.mch.weixin.qq.com/secapi/pay/refund";
            var    requsetParams = new SortedDictionary <string, string>();

            requsetParams.Add("total_fee", Math.Abs(info.Amount * 100).Convert <int>().ToString());
            requsetParams.Add("refund_fee", Math.Abs(info.Amount * 100).Convert <int>().ToString());
            requsetParams.Add("out_refund_no", info.Number);
            requsetParams.Add("transaction_id", info.OutNumber);
            requsetParams.Add("appid", AppId);
            requsetParams.Add("mch_id", MchId);
            requsetParams.Add("nonce_str", Guid.NewGuid().ToString().Replace("-", ""));//随机字符串
            requsetParams.Add("sign", MakeSign(requsetParams, MchKey));
            string xml        = ToRequestXml(requsetParams);
            var    webRequest = (HttpWebRequest)WebRequestHelper.CreateWebRequestWithCertificate(url, CertPath, MchId);
            string response   = WebRequestHelper.SendPostRequest(webRequest, Encoding.UTF8, xml);
            var    result     = FromResponseXml(response);

            LogHelper.AddEcho(new EchoEntity
            {
                Method   = "Beeant.Repository.Services.Finance.WechatPaylineRepository.Refund",
                Request  = xml,
                Response = result.SerializeJson(),
                Remark   = "",
                Url      = HttpContext.Current.Request.Url.ToString(),
                Key      = info.Number,
                SaveType = SaveType.Add
            });
            if (result == null || !result.ContainsKey("return_code") || result["return_code"] != "SUCCESS")
            {
                return(false);
            }
            info.Status    = PaylineStatusType.Success;
            info.OutNumber = result.ContainsKey("refund_id") ? result["refund_id"] : "";
            return(true);
        }