示例#1
0
        public override void Submit(IPayHistory order)
        {
            base.BaseSubmit(order);

            var tenpay = new RequestHandler(HttpContext.Current);

            tenpay.init();
            tenpay.setKey(key);
            tenpay.setGateUrl("https://gw.tenpay.com/gateway/pay.htm");
            tenpay.setParameter("total_fee", ((int)(order.Amount * 100)).ToString());
            //用户的公网ip,测试时填写127.0.0.1,只能支持10分以下交易
            tenpay.setParameter("spbill_create_ip", ip);
            tenpay.setParameter("return_url", return_url);
            tenpay.setParameter("partner", bargainor_id);
            tenpay.setParameter("out_trade_no", order.OrderId);
            tenpay.setParameter("notify_url", notify_url);
            tenpay.setParameter("attach", order.UserId);
            tenpay.setParameter("body", order.Desc);
            tenpay.setParameter("bank_type", order.BankType);


            //系统可选参数
            tenpay.setParameter("sign_type", "MD5");
            tenpay.setParameter("service_version", "1.0");
            tenpay.setParameter("input_charset", ChargeConfig.Charset);
            tenpay.setParameter("sign_key_index", "1");



            string url = tenpay.getRequestURL();

            HttpContext.Current.Response.Redirect(url);
        }
示例#2
0
        public override void Submit(IPayHistory order)
        {
            base.BaseSubmit(order);
            var request = new Message.Web.PayRequest();
            request.version = PartnerConfig.VERSION;
            request.oid_partner = PartnerConfig.OID_PARTNER;
            request.user_id = order.UserId;
            request.timestamp = YinTongUtil.getCurrentDateTimeStr();
            request.sign_type = PartnerConfig.SIGN_TYPE;
            request.busi_partner = PartnerConfig.BUSI_PARTNER;
            request.no_order = order.OrderId;
            request.dt_order = YinTongUtil.getCurrentDateTimeStr();
            request.name_goods = "在线充值";
            request.money_order = order.Amount.ToString();
            request.notify_url = notify_url;
            request.url_return = return_url;
            request.SetSign();
            var fields = request.GetType().GetFields();
            StringBuilder sbHtml = new StringBuilder();
            sbHtml.Append("<form id='payBillForm' action='" + request.InterFaceUrl + "' method='post'>");

            foreach (var temp in fields)
            {
                sbHtml.Append("<input type='hidden' name='" + temp.Name + "' value='" + temp.GetValue(request) + "'/>");
            }
            //submit按钮控件请不要含有name属性
            sbHtml.Append("<input type='submit' value='tijiao' style='display:none;'></form>");
            sbHtml.Append("<script>document.forms['payBillForm'].submit();</script>");
            HttpContext.Current.Response.Write(sbHtml.ToString());
        }
示例#3
0
 /// <summary>
 /// 转向页执行此方法
 /// 这里为了实现自定义转向
 /// </summary>
 /// <param name="order"></param>
 public void Redirect(IPayHistory order)
 {
     if (!string.IsNullOrEmpty(order.RedirectUrl))
     {
         HttpContext.Current.Response.Redirect(order.RedirectUrl + "?amount=" + order.Amount + "&orderId=" + order.OrderId + "&companyType=" + (int)order.CompanyType + "&ProductOrderId=" + order.ProductOrderId);
     }
 }
示例#4
0
        /// <summary>
        /// WAP认证支付
        /// 首次需传入银行卡进行绑定
        /// 再次按绑定的银行卡进行支付
        /// </summary>
        /// <param name="order"></param>
        /// <param name="id_no"></param>
        /// <param name="acct_name"></param>
        /// <param name="card_no"></param>
        /// <param name="no_agree"></param>
        /// <param name="risk_item"></param>
        public void WapAuthSubmit(IPayHistory order, string id_no, string acct_name, string card_no, string no_agree, string risk_item)
        {
            var request = new Message.WapAuth.PayRequest();

            request.version      = PartnerConfig.VERSION;
            request.oid_partner  = PartnerConfig.OID_PARTNER;
            request.user_id      = order.UserId;
            request.sign_type    = PartnerConfig.SIGN_TYPE;
            request.busi_partner = PartnerConfig.BUSI_PARTNER;
            request.no_order     = order.OrderId;
            request.dt_order     = YinTongUtil.getCurrentDateTimeStr();
            request.name_goods   = "在线充值";
            request.money_order  = order.Amount.ToString();
            request.notify_url   = CoreHelper.CustomSetting.GetConfigKey("lianlianWapAuthNotifyUrl");
            request.url_return   = CoreHelper.CustomSetting.GetConfigKey("lianlianWapAuthReturnUrl");
            request.id_type      = "0";
            request.id_no        = id_no;
            request.acct_name    = acct_name;
            request.card_no      = card_no;
            request.no_agree     = no_agree;
            request.risk_item    = risk_item;//风控参数
            request.SetSign();
            var           data   = CoreHelper.SerializeHelper.SerializerToJson(request, Encoding.UTF8);
            StringBuilder sbHtml = new StringBuilder();

            sbHtml.Append("<form id='payBillForm' action='" + request.InterFaceUrl + "' method='post'>");
            sbHtml.Append("<input name='req_data' value='" + data + "' /></form>");
            sbHtml.Append("<script>document.forms['payBillForm'].submit();</script>");
            System.Web.HttpContext.Current.Response.Write(sbHtml.ToString());
        }
示例#5
0
        public override void Submit(IPayHistory order)
        {
            base.BaseSubmit(order);
            var request = new Message.Web.PayRequest();

            request.version      = PartnerConfig.VERSION;
            request.oid_partner  = PartnerConfig.OID_PARTNER;
            request.user_id      = order.UserId;
            request.timestamp    = YinTongUtil.getCurrentDateTimeStr();
            request.sign_type    = PartnerConfig.SIGN_TYPE;
            request.busi_partner = PartnerConfig.BUSI_PARTNER;
            request.no_order     = order.OrderId;
            request.dt_order     = YinTongUtil.getCurrentDateTimeStr();
            request.name_goods   = "在线充值";
            request.money_order  = order.Amount.ToString();
            request.notify_url   = notify_url;
            request.url_return   = return_url;
            request.SetSign();
            var           fields = request.GetType().GetFields();
            StringBuilder sbHtml = new StringBuilder();

            sbHtml.Append("<form id='payBillForm' action='" + request.InterFaceUrl + "' method='post'>");

            foreach (var temp in fields)
            {
                sbHtml.Append("<input type='hidden' name='" + temp.Name + "' value='" + temp.GetValue(request) + "'/>");
            }
            //submit按钮控件请不要含有name属性
            sbHtml.Append("<input type='submit' value='tijiao' style='display:none;'></form>");
            sbHtml.Append("<script>document.forms['payBillForm'].submit();</script>");
            HttpContext.Current.Response.Write(sbHtml.ToString());
        }
示例#6
0
        /// <summary>
        /// 提交支付
        /// </summary>
        /// <param name="order"></param>
        public static void Submit(IPayHistory order)
        {
            if (order.OrderType == OrderType.支付)
            {
                if (string.IsNullOrEmpty(order.ProductOrderId))
                {
                    throw new Exception("支付类型订单必须传ProductOrderId");
                }
            }

            Company.CompanyBase company = GetCompany(order.CompanyType);
            try
            {
                company.Submit(order);
            }
            catch (Exception ero)
            {
                if (ero is System.Threading.ThreadAbortException)
                {
                    return;
                }
                CoreHelper.EventLog.Log("提交支付订单时出错:" + ero, true);
                throw ero;
            }
        }
示例#7
0
 public override void Submit(IPayHistory order)
 {
     BaseSubmit(order);
     var request = new ChargeRequest();
     request.merchantAcctId = merchantAcctId;
     request.payerName = "";
     request.payerContactType = "1";
     request.orderId = order.OrderId;
     request.orderAmount = (Convert.ToInt32(order.Amount) * 100).ToString();
     request.orderTime = DateTime.Now.ToString("yyyyMMddHHmmss");
     request.productName = "在线支付";
     request.productNum = "1";
     request.productDesc = "在线支付";
     request.payType = "00";
     request.ext1 = order.UserId;
     request.bgUrl = notify_url;
     request.MakeSign();
     var fields = request.GetType().GetProperties();
     //测试
     string html = "<form id='form1' name='form1' action='https://sandbox.99bill.com/gateway/recvMerchantInfoAction.htm' method='post'>\r\n";
     foreach (var item in fields)
     {
         html += string.Format("<input type='hidden' Name='{0}' value='{1}' />\r\n", item.Name, item.GetValue(request, null));
     }
     html += "</form>\r\n";
     html += "<script>form1.submit()</script>";
     //Log(html);
     HttpContext.Current.Response.Write(html);
 }
示例#8
0
        public override void Submit(IPayHistory order)
        {
            BaseSubmit(order);
            var request = new ChargeRequest();

            request.merchantAcctId   = merchantAcctId;
            request.payerName        = "";
            request.payerContactType = "1";
            request.orderId          = order.OrderId;
            request.orderAmount      = (Convert.ToInt32(order.Amount) * 100).ToString();
            request.orderTime        = DateTime.Now.ToString("yyyyMMddHHmmss");
            request.productName      = "在线支付";
            request.productNum       = "1";
            request.productDesc      = "在线支付";
            request.payType          = "00";
            request.ext1             = order.UserId;
            request.bgUrl            = notify_url;
            request.MakeSign();
            var fields = request.GetType().GetProperties();
            //测试
            string html = "<form id='form1' name='form1' action='https://sandbox.99bill.com/gateway/recvMerchantInfoAction.htm' method='post'>\r\n";

            foreach (var item in fields)
            {
                html += string.Format("<input type='hidden' Name='{0}' value='{1}' />\r\n", item.Name, item.GetValue(request, null));
            }
            html += "</form>\r\n";
            html += "<script>form1.submit()</script>";
            //Log(html);
            HttpContext.Current.Response.Write(html);
        }
示例#9
0
 /// <summary>
 /// 查询订单
 /// 如果订单未确认,会自动确认
 /// </summary>
 /// <param name="order"></param>
 public static bool CheckOrder(IPayHistory order,out string message)
 {
     if (order.Status == OrderStatus.已确认 || order.Status == OrderStatus.已退款)
     {
         message = "此订单状态为" + order.Status.Discription();
         return false;
     }
     Company.CompanyBase company = GetCompany(order.CompanyType);
     return company.CheckOrder(order,out message);
 }
示例#10
0
 /// <summary>
 /// 订单退款方法
 /// </summary>
 /// <param name="order"></param>
 protected internal void BaseRefundOrder(IPayHistory order)
 {
     ///未确认的订单不能退款
     if (order.Status != OrderStatus.已确认)
     {
         return;
     }
     OnlinePayBusiness.Instance.RefundOrder(order);
     Log("支付订单被退款:" + order.OrderId + " amount:" + order.Amount, true);
 }
示例#11
0
        /// <summary>
        /// 处理通知
        /// </summary>
        /// <param name="result"></param>
        /// <param name="error"></param>
        /// <returns></returns>
        public bool DealChargeNotify(Charge.Response result, out string error)
        {
            error = "";
            var         orderId = result.SrcReqId;
            IPayHistory order   = OnlinePayBusiness.Instance.GetOrder(orderId, ThisCompanyType);

            order.spBillno = result.SrcReqId;
            Confirm(order, GetType(), order.Amount);
            return(true);
        }
示例#12
0
 /// <summary>
 /// 订单取消,退款
 /// 只要提交成功就一定能成功,特殊情况除外
 /// </summary>
 /// <param name="order"></param>
 /// <param name="message"></param>
 /// <returns></returns>
 public static bool RefundOrder(IPayHistory order, out string message)
 {
     if (order.Status != OrderStatus.已确认)
     {
         message = "此订单状态为" + order.Status.Discription();
         return(false);
     }
     Company.CompanyBase company = GetCompany(order.CompanyType);
     return(company.RefundOrder(order, out message));
 }
示例#13
0
        /// <summary>
        /// 生成订单
        /// </summary>
        /// <param name="amount"></param>
        /// <param name="user"></param>
        /// <param name="companyType"></param>
        /// <returns></returns>
        public static IPayHistory CreateOrder(decimal amount, string user, CompanyType companyType)
        {
            Company.CompanyBase company = GetCompany(companyType);
            IPayHistory         order   = null;

            lock (lockObj)
            {
                order = company.CreateOrder(amount, user);
            }
            return(order);
        }
示例#14
0
        /// <summary>
        /// 提交到数据库+
        /// 对于代理,需查询OrderType为Charge的记录
        /// </summary>
        /// <param name="order"></param>
        protected void BaseSubmit(IPayHistory order)
        {
            if (ThisCompanyType == CompanyType.None)
            {
                throw new Exception("接口初始化没有指定类型,请检查");
            }
            if (string.IsNullOrEmpty(order.OrderId))
            {
                throw new Exception("没有指定OrderId");
            }
            OnlinePayBusiness.Instance.Add(order);
            string log = string.Format("提交订单 {0} {1} {2} {3}", order.UserId, order.OrderId, order.Amount, order.OrderType);

            Log(log, false);
        }
示例#15
0
        protected override string OnNotify(HttpContext context)
        {
            var    response = ChargeNotify.FromRequest(context.Request.QueryString);
            var    a        = response.CheckSign();
            int    result   = 1;
            string msg1     = "error";

            if (a && response.payResult == "10")
            {
                IPayHistory order = OnlinePayBusiness.Instance.GetOrder(response.orderId, ThisCompanyType);
                Confirm(order, GetType(), Convert.ToDecimal(response.payAmount) / 100);
                result = 1;
                msg1   = "success";
            }
            return("<result>" + result + "</result><redirecturl>" + return_url + "?msg=" + msg1 + "</redirecturl>");
        }
示例#16
0
        public override void Submit(IPayHistory order)
        {
            BaseSubmit(order);
            var request = CreateHead <Charge.Request>();

            request.UserId   = order.UserId;
            request.Amt      = (Convert.ToInt64(order.Amount) * 100).ToString();
            request.SrcReqId = order.OrderId;//更改为订单ID
            request.CurCode  = "156";
            string notifyUrl = ChargeConfig.GetConfigKey(CompanyType.银联托管, ChargeConfig.DataType.NotifyUrl);
            string returnUrl = ChargeConfig.GetConfigKey(CompanyType.银联托管, ChargeConfig.DataType.ReturnUrl);

            request.NotifyUrl = ConvertUrl(notifyUrl);
            request.ReturnUrl = ConvertUrl(returnUrl);
            Submit(request);
        }
示例#17
0
        /// <summary>
        /// 生成订单实例
        /// </summary>
        /// <param name="money"></param>
        /// <param name="user"></param>
        /// <param name="userType"></param>
        /// <returns></returns>
        public IPayHistory CreateOrder(decimal amount, string user)
        {
            if (amount <= 0)
            {
                throw new Exception("支付金额不能小于或等于0");
            }
            IPayHistory order = new IPayHistory();

            order.Amount      = amount;
            order.CompanyType = ThisCompanyType;
            order.Status      = OrderStatus.已提交;
            order.UserId      = user;
            lock (lockObj)
            {
                order.OrderId = CreateOrderId();
            }
            return(order);
        }
示例#18
0
        protected override string OnNotify(System.Web.HttpContext context)
        {
            StreamReader stream = new StreamReader(context.Request.InputStream);
            string       json   = stream.ReadToEnd();

            stream.Close();
            var response = Message.MessageBase.FromRequest <Message.Web.PayNotify>(json);
            var a        = response.CheckSign();

            if (a && response.result_pay == "SUCCESS")
            {
                IPayHistory order = OnlinePayBusiness.Instance.GetOrder(response.no_order, ThisCompanyType);
                Confirm(order, GetType(), Convert.ToDecimal(response.money_order));
                var result = new { ret_code = "0000", ret_msg = "交易成功" };
                return(CoreHelper.SerializeHelper.SerializerToJson(result));
            }
            var result2 = new { ret_code = "9999", ret_msg = "失败" };

            return(CoreHelper.SerializeHelper.SerializerToJson(result2));
        }
示例#19
0
        /// <summary>
        /// 提交支付,转向需要按具体需求重写
        /// </summary>
        /// <param name="order"></param>
        public override void Submit(IPayHistory order)
        {
            BaseSubmit(order);
            string out_trade_no = order.OrderId;
            string subject      = order.Desc;                                                                                                              //商品名称
            string body         = order.UserId;                                                                                                            //商品描述
            string price        = order.Amount.ToString();                                                                                                 //商品价格
            string bankType     = order.BankType;                                                                                                          //银行代码
            string token        = (HttpContext.Current.Session["ali_token"] != null) ? HttpContext.Current.Session["ali_token"].ToString() : string.Empty; // 支付宝来源用户的验证码

            //相关参数名称具体含义,可以在支付宝接口服务文档中查询到,
            //以上两个文件,通知正常都可以在notify data目录找到通知过来的日志
            string aliay_url = string.Empty;

            if (token == string.Empty)
            {
                //HttpContext.Current.Request.QueryString["is_company"] 判断企业网银支付渠道
                if (HttpContext.Current.Request.QueryString["is_company"] != null && HttpContext.Current.Request.QueryString["is_company"].ToString() != "")
                {
                    aliay_url = AliPay.CreatUrl(company_gateway, service, partner, sign_type, out_trade_no, subject, body, price, show_url, seller_email, key, return_url, _input_charset, notify_url, bankType);
                }
                else
                {
                    aliay_url = AliPay.CreatUrl(company_gateway, service, partner, sign_type, out_trade_no, subject, body, price, show_url, seller_email, key, return_url, _input_charset, notify_url, bankType);
                }
            }
            else
            {
                if (HttpContext.Current.Request.QueryString["is_company"] != null && HttpContext.Current.Request.QueryString["is_company"].ToString() != "")
                {
                    aliay_url = AliPay.CreatUrl(company_gateway, service, partner, sign_type, out_trade_no, subject, body, price, show_url, seller_email, key, return_url, _input_charset, notify_url, bankType, token);
                }
                else
                {
                    aliay_url = AliPay.CreatUrl(company_gateway, service, partner, sign_type, out_trade_no, subject, body, price, show_url, seller_email, key, return_url, _input_charset, notify_url, bankType, token);
                }
            }
            //HttpContext.Current.Response.Write(aliay_url);
            //HttpContext.Current.Response.End();
            HttpContext.Current.Response.Redirect(aliay_url);
        }
示例#20
0
        /// <summary>
        /// 通过参数直接提交
        /// 会产生跳转
        /// </summary>
        /// <param name="user"></param>
        /// <param name="amount"></param>
        /// <param name="bankType"></param>
        /// <param name="orderType"></param>
        /// <param name="companyType"></param>
        /// <param name="byProductOrder"></param>
        /// <param name="redirectUrl"></param>
        public static void Submit(string user, decimal amount, string bankType, OrderType orderType, CompanyType companyType, string byProductOrder, string redirectUrl)
        {
            //todo 订单需要判断没有有付过款,并存不存在
            if (amount <= 0)
            {
                throw new Exception("找不到订单,或订单金额为0");
            }

            IPayHistory order = ChargeService.CreateOrder(amount, user, companyType);

            order.RedirectUrl = redirectUrl;
            //在这里传入银行代码
            order.BankType = bankType;
            //传入商城订单编号
            order.ProductOrderId = byProductOrder;
            //在这里传入订单类型,默认为充值

            order.OrderType = orderType;

            ChargeService.Submit(order);
        }
示例#21
0
 public override void Submit(IPayHistory order)
 {
     BaseSubmit(order);
     var request = new ChargeSubmit();
     request.MerId = MerchantId;
     request.CmdId = "Buy";
     request.OrdId = order.OrderId;
     request.OrdAmt = order.Amount.ToString("f");
     request.BgRetUrl = NotifyUrl;
     request.RetUrl = ReturnUrl;
     request.ChkValue = request.MakeSign();
     var fields = request.GetType().GetFields();
     //测试
     string html = "<form id='form1' name='form1' action='https://mas.chinapnr.com/gar/RecvMerchant.do' method='post'>\r\n";
     foreach (var item in fields)
     {
         html += string.Format("<input type='hidden' Name='{0}' value='{1}' />\r\n", item.Name, item.GetValue(request));
     }
     html += "</form>\r\n";
     html += "<script>form1.submit()</script>";
     HttpContext.Current.Response.Write(html);
 }
示例#22
0
        /// <summary>
        /// 确认订单,失败会插入方法缓存,下次会自动重新执行方法
        /// </summary>
        /// <param name="orderNumber"></param>
        /// <param name="companyType"></param>
        //protected internal Order Confirm(string orderNumber, CompanyType companyType, Type fromType)
        //{
        //    Order order = OrderAction.GetOrder(orderNumber, companyType);
        //    if (order != null)
        //    {
        //        OrderAction.Confirm(order, fromType);
        //    }
        //    return order;
        //}

        /// <summary>
        /// 确认订单,并核对通知过来的金额
        /// </summary>
        /// <param name="order"></param>
        /// <param name="fromType"></param>
        /// <param name="notifyAmount">通知的订单金额,如果没有填原始订单的金额</param>
        protected internal void Confirm(IPayHistory order, Type fromType, decimal notifyAmount)
        {
            if (order.Amount != notifyAmount)
            {
                string message = order.CompanyType + "订单金额和支付金额对不上:" + order.OrderId + " 订单金额:" + order.Amount + " 通知金额:" + notifyAmount;
                Log(message, true);
                throw new Exception(message);
            }
            string key = "IPayHistory_" + order.OrderId;

            if (!CoreHelper.ConcurrentControl.Check(key, 10))
            {
                Log("过滤重复通知确认:" + order.OrderId + " amount:" + order.Amount);
                return;
            }
            if (order.Status == OrderStatus.已确认 || order.Status == OrderStatus.已退款)
            {
                return;
            }
            OnlinePayBusiness.Instance.ConfirmByType(order, fromType);
            Log("确认订单:" + order.OrderId + " amount:" + order.Amount);
        }
示例#23
0
        protected override string OnNotify(System.Web.HttpContext context)
        {
            context.Request.ContentEncoding = encode;
            var c      = context.Request.Form;
            var fields = typeof(ChargeResponse).GetFields();
            var obj    = new ChargeResponse();

            foreach (var item in fields)
            {
                item.SetValue(obj, c[item.Name]);
            }
            if (obj.CheckSign(obj.ChkValue))
            {
                return("签名不正确");
            }
            if (obj.RespCode == "000000")
            {
                IPayHistory order = OnlinePayBusiness.Instance.GetOrder(obj.OrdId, ThisCompanyType);
                Confirm(order, GetType(), Convert.ToDecimal(obj.OrdAmt));
                return(string.Format("RECV_ORD_ID_{0}", obj.OrdId));
            }
            return(string.Format("失败 {0}", obj.RespCode));
        }
示例#24
0
        /// <summary>
        /// 查询订单状态,返回是否成功
        /// </summary>
        /// <param name="order"></param>
        /// <returns></returns>
        public override bool CheckOrder(IPayHistory order, out string message)
        {
            string url         = AliPay.CreateQueryOrderUrl(company_gateway, "single_trade_query", partner, sign_type, order.OrderId, key, _input_charset);
            string responseTxt = CoreHelper.HttpRequest.HttpGet(url, Encoding.Default);

            try
            {
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(responseTxt);
                XmlNode node = doc.SelectSingleNode("alipay/response/trade/trade_status");
                if (node == null)
                {
                    message = "服务器返回:" + responseTxt;
                    return(false);
                }
                if (node != null)
                {
                    string trade_status = node.InnerText;
                    if (trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS")
                    {
                        if (order.Status != OrderStatus.已确认)
                        {
                            Confirm(order, GetType(), order.Amount);
                        }
                        message = "成功";
                        return(true);
                    }
                }
            }
            catch (Exception ero)
            {
                message = "出现错误:" + ero.Message;
                return(false);
            }
            message = "失败";
            return(false);
        }
示例#25
0
        public override void Submit(IPayHistory order)
        {
            BaseSubmit(order);
            var request = new ChargeSubmit();

            request.MerId    = MerchantId;
            request.CmdId    = "Buy";
            request.OrdId    = order.OrderId;
            request.OrdAmt   = order.Amount.ToString("f");
            request.BgRetUrl = NotifyUrl;
            request.RetUrl   = ReturnUrl;
            request.ChkValue = request.MakeSign();
            var fields = request.GetType().GetFields();
            //测试
            string html = "<form id='form1' name='form1' action='https://mas.chinapnr.com/gar/RecvMerchant.do' method='post'>\r\n";

            foreach (var item in fields)
            {
                html += string.Format("<input type='hidden' Name='{0}' value='{1}' />\r\n", item.Name, item.GetValue(request));
            }
            html += "</form>\r\n";
            html += "<script>form1.submit()</script>";
            HttpContext.Current.Response.Write(html);
        }
示例#26
0
        public override bool RefundOrder(IPayHistory order, out string message)
        {
            message = "";
            if (string.IsNullOrEmpty(order.spBillno))
            {
                throw new Exception("支付宝订单号为空,请检查sp_billno");
            }
            ////////////////////////////////////////////请求参数////////////////////////////////////////////

            //服务器异步通知页面路径
            string notify_url = refundNotifyUrl;
            //需http://格式的完整路径,不允许加?id=123这类自定义参数

            //退款批次号
            string batch_no = DateTime.Now.ToString("yyyyMMdd") + order.OrderId.Substring(6, order.OrderId.Length - 6) + "C";
            //必填,每进行一次即时到账批量退款,都需要提供一个批次号,必须保证唯一性

            //退款请求时间
            string refund_date = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
            //必填,格式为:yyyy-MM-dd hh:mm:ss

            //退款总笔数
            string batch_num = "1";
            //必填,即参数detail_data的值中,“#”字符出现的数量加1,最大支持1000笔(即“#”字符出现的最大数量999个)

            //单笔数据集
            string detail_data = order.spBillno + "^" + order.Amount + "^协商退款";
            //必填,格式详见“4.3 单笔数据集参数说明”
            //Log(detail_data);

            ////////////////////////////////////////////////////////////////////////////////////////////////

            //把请求参数打包成数组
            SortedDictionary<string, string> sParaTemp = new SortedDictionary<string, string>();
            sParaTemp.Add("partner", partner);
            sParaTemp.Add("_input_charset", _input_charset);
            sParaTemp.Add("service", "refund_fastpay_by_platform_nopwd");
            sParaTemp.Add("notify_url", notify_url);
            sParaTemp.Add("batch_no", batch_no);
            sParaTemp.Add("refund_date", refund_date);
            sParaTemp.Add("batch_num", batch_num);
            sParaTemp.Add("detail_data", detail_data);

            //建立请求
            string sHtmlText = AlipaySubmit.BuildRequest(sParaTemp);

            //请在这里加上商户的业务逻辑程序代码

            //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——

            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.LoadXml(sHtmlText);
            Log(sHtmlText);
            string status = xmlDoc.SelectSingleNode("/alipay/is_success").InnerText;
            if (status == "F")
            {
                message = "退款失败:" + xmlDoc.SelectSingleNode("/alipay/error").InnerText;
                return false;
            }
            else
            {
                if (status == "T")
                {
                    message = "退款成功";
                    BaseRefundOrder(order);
                    return true;
                }
                else if (status == "P")
                {
                    message = "退款处理中";
                    //退款通知会用及时到帐接口发过来
                    return true;
                }
                return false;
            }
        }
示例#27
0
        /// <summary>
        /// 提交支付,转向需要按具体需求重写
        /// </summary>
        /// <param name="order"></param>
        public override void Submit(IPayHistory order)
        {
            BaseSubmit(order);
            string out_trade_no =order.OrderId;
            string subject = order.Desc;                           //商品名称
            string body = order.UserId;                                  //商品描述
            string price = order.Amount.ToString();                                //商品价格
            string bankType = order.BankType; //银行代码
            string token = (HttpContext.Current.Session["ali_token"] != null) ? HttpContext.Current.Session["ali_token"].ToString() : string.Empty;  // 支付宝来源用户的验证码

            //相关参数名称具体含义,可以在支付宝接口服务文档中查询到,
            //以上两个文件,通知正常都可以在notify data目录找到通知过来的日志
            string aliay_url = string.Empty;
            if (token == string.Empty)
            {
                //HttpContext.Current.Request.QueryString["is_company"] 判断企业网银支付渠道
                if (HttpContext.Current.Request.QueryString["is_company"] != null && HttpContext.Current.Request.QueryString["is_company"].ToString()!="")
                {
                    aliay_url = AliPay.CreatUrl(company_gateway, service, partner, sign_type, out_trade_no, subject, body, price, show_url, seller_email, key, return_url, _input_charset, notify_url, bankType);
                }
                else
                {
                    aliay_url = AliPay.CreatUrl(company_gateway, service, partner, sign_type, out_trade_no, subject, body, price, show_url, seller_email, key, return_url, _input_charset, notify_url, bankType);
                }
            }
            else
            {
                if (HttpContext.Current.Request.QueryString["is_company"] != null && HttpContext.Current.Request.QueryString["is_company"].ToString() != "")
                {
                    aliay_url = AliPay.CreatUrl(company_gateway, service, partner, sign_type, out_trade_no, subject, body, price, show_url, seller_email, key, return_url, _input_charset, notify_url, bankType, token);
                }
                else
                {
                    aliay_url = AliPay.CreatUrl(company_gateway, service, partner, sign_type, out_trade_no, subject, body, price, show_url, seller_email, key, return_url, _input_charset, notify_url, bankType, token);
                }
            }
            //HttpContext.Current.Response.Write(aliay_url);
            //HttpContext.Current.Response.End();
            HttpContext.Current.Response.Redirect(aliay_url);
        }
示例#28
0
        /// <summary>
        /// 退款接口,可重复提交得到状态
        /// </summary>
        /// <param name="order"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public override bool RefundOrder(IPayHistory order, out string message)
        {
            #region 退款
            RequestHandler reqHandler = new RequestHandler(HttpContext.Current);

            //通信对象
            TenpayHttpClient httpClient = new TenpayHttpClient();
            ClientResponseHandler resHandler = new ClientResponseHandler();
            //-----------------------------
            //设置请求参数
            //-----------------------------
            reqHandler.init();
            reqHandler.setKey(key);
            reqHandler.setGateUrl("https://mch.tenpay.com/refundapi/gateway/refund.xml");

            reqHandler.setParameter("partner", bargainor_id);
            //out_trade_no和transaction_id至少一个必填,同时存在时transaction_id优先
            //reqHandler.setParameter("out_trade_no", order.OrderId);
            reqHandler.setParameter("transaction_id", order.OrderId);
            reqHandler.setParameter("out_refund_no", order.OrderId + "C");
            reqHandler.setParameter("total_fee", (order.Amount * 100).ToString());
            reqHandler.setParameter("refund_fee", (order.Amount * 100).ToString());
            reqHandler.setParameter("op_user_id", bargainor_id);
            reqHandler.setParameter("op_user_passwd", ChargeConfig.GetConfigKey(ThisCompanyType, ChargeConfig.DataType.PayPass));
            string requestUrl = reqHandler.getRequestURL();
            //证书和证书密码
            httpClient.setCertInfo(ChargeConfig.GetConfigKey(ThisCompanyType, ChargeConfig.DataType.CertFile), bargainor_id);
            //设置请求内容
            httpClient.setReqContent(requestUrl);
            //设置超时
            httpClient.setTimeOut(10);

            string rescontent = "";
            //后台调用
            if (!httpClient.call())
            {
                message = "接口调用失败";
                return false;
            }
            //获取结果
            rescontent = httpClient.getResContent();

            resHandler.setKey(key);
            //设置结果参数
            resHandler.setContent(rescontent);
            message = resHandler.getParameter("retmsg");
            //Log("退款返回结果为:" + rescontent);
            //判断签名及结果
            if (!resHandler.isTenpaySign())
            {
                message = "返回签名验证错误";
                return false;
            }
            if (resHandler.getParameter("retcode") != "0")
            {
                return false;
            }

            //商户订单号
            string out_trade_no = resHandler.getParameter("out_trade_no");
            //财富通订单号
            string transaction_id = resHandler.getParameter("transaction_id");

            // 退款状态:
            //4,10:退款成功。
            //3,5,6:退款失败。
            //8,9,11:退款处理中。
            //1,2:未确定,需要商户原退款单号重新发起。
            //7:转入代发,退款到银行发现用户的卡作废或者冻结了,导致原路退款银行卡失败,资金回流到商户的现金帐号,需要商户人工干预,通过线下或者财富通转账的方式进行退款

            string refund_status = resHandler.getParameter("refund_status");

            if (refund_status == "4" || refund_status == "10")
            {
                string recv_user_id = resHandler.getParameter("recv_user_id");
                string reccv_user_name = resHandler.getParameter("reccv_user_name");
                //Log("退款接收人信息为:" + recv_user_id + "  " + reccv_user_name);
                BaseRefundOrder(order);
                return true;
            }
            if (refund_status == "8" || refund_status == "9" || refund_status == "11")
            {
                //todo 自动重复查询
                message = "退款处理中";
                return true;
            }
            return false;

            #endregion
        }
示例#29
0
 /// <summary>
 /// 接口转向页执行此方法
 /// </summary>
 /// <param name="order"></param>
 public static void Redirect(IPayHistory order)
 {
     Company.CompanyBase company = GetCompany(order.CompanyType);
     company.Redirect(order);
 }
示例#30
0
        public override void Submit(IPayHistory order)
        {
            base.BaseSubmit(order);

            var tenpay = new RequestHandler(HttpContext.Current);
            tenpay.init();
            tenpay.setKey(key);
            tenpay.setGateUrl("https://gw.tenpay.com/gateway/pay.htm");
            tenpay.setParameter("total_fee", ((int)(order.Amount * 100)).ToString());
            //用户的公网ip,测试时填写127.0.0.1,只能支持10分以下交易
            tenpay.setParameter("spbill_create_ip", ip);
            tenpay.setParameter("return_url", return_url);
            tenpay.setParameter("partner", bargainor_id);
            tenpay.setParameter("out_trade_no", order.OrderId);
            tenpay.setParameter("notify_url", notify_url);
            tenpay.setParameter("attach", order.UserId);
            tenpay.setParameter("body", order.Desc);
            tenpay.setParameter("bank_type", order.BankType);

            //系统可选参数
            tenpay.setParameter("sign_type", "MD5");
            tenpay.setParameter("service_version", "1.0");
            tenpay.setParameter("input_charset", ChargeConfig.Charset);
            tenpay.setParameter("sign_key_index", "1");

            string url= tenpay.getRequestURL();

            HttpContext.Current.Response.Redirect(url);
        }
示例#31
0
        public override bool CheckOrder(IPayHistory order,out string message)
        {
            //创建请求对象
            RequestHandler reqHandler = new RequestHandler(HttpContext.Current);

            //通信对象
            TenpayHttpClient httpClient = new TenpayHttpClient();

            //应答对象
            ClientResponseHandler resHandler = new ClientResponseHandler();

            //-----------------------------
            //设置请求参数
            //-----------------------------
            reqHandler.init();
            reqHandler.setKey(key);
            reqHandler.setGateUrl("https://gw.tenpay.com/gateway/normalorderquery.xml");

            reqHandler.setParameter("partner", bargainor_id);
            //out_trade_no和transaction_id至少一个必填,同时存在时transaction_id优先
            reqHandler.setParameter("out_trade_no", order.OrderId);
            //reqHandler.setParameter("transaction_id", "1900000109201103020030626316");

            string requestUrl = reqHandler.getRequestURL();
            //设置请求内容
            httpClient.setReqContent(requestUrl);
            //设置超时
            httpClient.setTimeOut(10);

            string rescontent = "";
            //后台调用
            if (httpClient.call())
            {
                //获取结果
                rescontent = httpClient.getResContent();

                resHandler.setKey(key);
                //设置结果参数
                resHandler.setContent(rescontent);

                //判断签名及结果
                if (resHandler.isTenpaySign() && resHandler.getParameter("retcode") == "0")
                {
                    //商户订单号
                    string out_trade_no = resHandler.getParameter("out_trade_no");
                    //财富通订单号
                    string transaction_id = resHandler.getParameter("transaction_id");
                    //金额,以分为单位
                    string total_fee = resHandler.getParameter("total_fee");
                    //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee
                    string discount = resHandler.getParameter("discount");
                    //支付结果
                    string trade_state = resHandler.getParameter("trade_state");

                    //支付成功
                    if (trade_state == "0")
                    {
                        if (order.Status != OrderStatus.已确认)
                        {
                            Confirm(order, GetType(), order.Amount);
                        }
                        message = "成功";
                        return true;
                    }
                }
                else
                {
                    message = "失败";
                    return false;
                }
            }
            else
            {
                message = "服务器返回:" + httpClient.getResponseCode();
                return false;
            }
            message = "失败";
            return false;
        }
示例#32
0
 /// <summary>
 /// 退款,取消订单
 /// </summary>
 /// <param name="order"></param>
 /// <param name="message"></param>
 /// <returns></returns>
 public abstract bool RefundOrder(IPayHistory order, out string message);
示例#33
0
 public override bool RefundOrder(IPayHistory order, out string message)
 {
     throw new NotImplementedException();
 }
示例#34
0
        /// <summary>
        /// 提交支付
        /// </summary>
        /// <param name="order"></param>
        public static void Submit(IPayHistory order)
        {
            if (order.OrderType == OrderType.支付)
            {
                if (string.IsNullOrEmpty(order.ProductOrderId))
                {
                    throw new Exception("支付类型订单必须传ProductOrderId");
                }
            }

            Company.CompanyBase company = GetCompany(order.CompanyType);
            try
            {
                company.Submit(order);
            }
            catch(Exception ero)
            {
                if (ero is System.Threading.ThreadAbortException)
                {
                    return;
                }
                CoreHelper.EventLog.Log("提交支付订单时出错:" + ero, true);
                throw ero;
            }
        }
示例#35
0
 /// <summary>
 /// 接口转向页执行此方法
 /// </summary>
 /// <param name="order"></param>
 public static void Redirect(IPayHistory order)
 {
     Company.CompanyBase company = GetCompany(order.CompanyType);
     company.Redirect(order);
 }
示例#36
0
        public override bool CheckOrder(IPayHistory order, out string message)
        {
            //创建请求对象
            RequestHandler reqHandler = new RequestHandler(HttpContext.Current);

            //通信对象
            TenpayHttpClient httpClient = new TenpayHttpClient();

            //应答对象
            ClientResponseHandler resHandler = new ClientResponseHandler();

            //-----------------------------
            //设置请求参数
            //-----------------------------
            reqHandler.init();
            reqHandler.setKey(key);
            reqHandler.setGateUrl("https://gw.tenpay.com/gateway/normalorderquery.xml");

            reqHandler.setParameter("partner", bargainor_id);
            //out_trade_no和transaction_id至少一个必填,同时存在时transaction_id优先
            reqHandler.setParameter("out_trade_no", order.OrderId);
            //reqHandler.setParameter("transaction_id", "1900000109201103020030626316");

            string requestUrl = reqHandler.getRequestURL();

            //设置请求内容
            httpClient.setReqContent(requestUrl);
            //设置超时
            httpClient.setTimeOut(10);

            string rescontent = "";

            //后台调用
            if (httpClient.call())
            {
                //获取结果
                rescontent = httpClient.getResContent();

                resHandler.setKey(key);
                //设置结果参数
                resHandler.setContent(rescontent);

                //判断签名及结果
                if (resHandler.isTenpaySign() && resHandler.getParameter("retcode") == "0")
                {
                    //商户订单号
                    string out_trade_no = resHandler.getParameter("out_trade_no");
                    //财富通订单号
                    string transaction_id = resHandler.getParameter("transaction_id");
                    //金额,以分为单位
                    string total_fee = resHandler.getParameter("total_fee");
                    //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee
                    string discount = resHandler.getParameter("discount");
                    //支付结果
                    string trade_state = resHandler.getParameter("trade_state");

                    //支付成功
                    if (trade_state == "0")
                    {
                        if (order.Status != OrderStatus.已确认)
                        {
                            Confirm(order, GetType(), order.Amount);
                        }
                        message = "成功";
                        return(true);
                    }
                }
                else
                {
                    message = "失败";
                    return(false);
                }
            }
            else
            {
                message = "服务器返回:" + httpClient.getResponseCode();
                return(false);
            }
            message = "失败";
            return(false);
        }
示例#37
0
        /// <summary>
        /// 退款接口,可重复提交得到状态
        /// </summary>
        /// <param name="order"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public override bool RefundOrder(IPayHistory order, out string message)
        {
            #region 退款
            RequestHandler reqHandler = new RequestHandler(HttpContext.Current);

            //通信对象
            TenpayHttpClient      httpClient = new TenpayHttpClient();
            ClientResponseHandler resHandler = new ClientResponseHandler();
            //-----------------------------
            //设置请求参数
            //-----------------------------
            reqHandler.init();
            reqHandler.setKey(key);
            reqHandler.setGateUrl("https://mch.tenpay.com/refundapi/gateway/refund.xml");

            reqHandler.setParameter("partner", bargainor_id);
            //out_trade_no和transaction_id至少一个必填,同时存在时transaction_id优先
            //reqHandler.setParameter("out_trade_no", order.OrderId);
            reqHandler.setParameter("transaction_id", order.OrderId);
            reqHandler.setParameter("out_refund_no", order.OrderId + "C");
            reqHandler.setParameter("total_fee", (order.Amount * 100).ToString());
            reqHandler.setParameter("refund_fee", (order.Amount * 100).ToString());
            reqHandler.setParameter("op_user_id", bargainor_id);
            reqHandler.setParameter("op_user_passwd", ChargeConfig.GetConfigKey(ThisCompanyType, ChargeConfig.DataType.PayPass));
            string requestUrl = reqHandler.getRequestURL();
            //证书和证书密码
            httpClient.setCertInfo(ChargeConfig.GetConfigKey(ThisCompanyType, ChargeConfig.DataType.CertFile), bargainor_id);
            //设置请求内容
            httpClient.setReqContent(requestUrl);
            //设置超时
            httpClient.setTimeOut(10);

            string rescontent = "";
            //后台调用
            if (!httpClient.call())
            {
                message = "接口调用失败";
                return(false);
            }
            //获取结果
            rescontent = httpClient.getResContent();

            resHandler.setKey(key);
            //设置结果参数
            resHandler.setContent(rescontent);
            message = resHandler.getParameter("retmsg");
            //Log("退款返回结果为:" + rescontent);
            //判断签名及结果
            if (!resHandler.isTenpaySign())
            {
                message = "返回签名验证错误";
                return(false);
            }
            if (resHandler.getParameter("retcode") != "0")
            {
                return(false);
            }

            //商户订单号
            string out_trade_no = resHandler.getParameter("out_trade_no");
            //财富通订单号
            string transaction_id = resHandler.getParameter("transaction_id");

            // 退款状态:
            //4,10:退款成功。
            //3,5,6:退款失败。
            //8,9,11:退款处理中。
            //1,2:未确定,需要商户原退款单号重新发起。
            //7:转入代发,退款到银行发现用户的卡作废或者冻结了,导致原路退款银行卡失败,资金回流到商户的现金帐号,需要商户人工干预,通过线下或者财富通转账的方式进行退款

            string refund_status = resHandler.getParameter("refund_status");

            if (refund_status == "4" || refund_status == "10")
            {
                string recv_user_id    = resHandler.getParameter("recv_user_id");
                string reccv_user_name = resHandler.getParameter("reccv_user_name");
                //Log("退款接收人信息为:" + recv_user_id + "  " + reccv_user_name);
                BaseRefundOrder(order);
                return(true);
            }
            if (refund_status == "8" || refund_status == "9" || refund_status == "11")
            {
                //todo 自动重复查询
                message = "退款处理中";
                return(true);
            }
            return(false);

            #endregion
        }
示例#38
0
 /// <summary>
 /// 产生记录并URL转向
 /// </summary>
 /// <param name="order"></param>
 public abstract void Submit(IPayHistory order);
示例#39
0
        /// <summary>
        /// 查询订单状态,返回是否成功
        /// </summary>
        /// <param name="order"></param>
        /// <returns></returns>
        public override bool CheckOrder(IPayHistory order,out string message)
        {
            string url = AliPay.CreateQueryOrderUrl(company_gateway, "single_trade_query", partner, sign_type, order.OrderId, key, _input_charset);
            string responseTxt = CoreHelper.HttpRequest.HttpGet(url, Encoding.Default);
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(responseTxt);
                XmlNode node = doc.SelectSingleNode("alipay/response/trade/trade_status");
                if (node == null)
                {
                    message = "服务器返回:" + responseTxt;
                    return false;
                }
                if (node != null)
                {
                    string trade_status = node.InnerText;
                    if (trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS")
                    {
                        if (order.Status != OrderStatus.已确认)
                        {
                            Confirm(order, GetType(), order.Amount);
                        }
                        message = "成功";
                        return true;
                    }
                }

            }
            catch(Exception ero)
            {
                message = "出现错误:" + ero.Message;
                return false;
            }
            message = "失败";
            return false;
        }
示例#40
0
 public override bool RefundOrder(IPayHistory order, out string message)
 {
     throw new NotImplementedException();
 }
示例#41
0
 /// <summary>
 /// 调用接口检查支付是否成功
 /// 根据情况手动Confirm
 /// </summary>
 /// <param name="order"></param>
 public abstract bool CheckOrder(IPayHistory order, out string message);
示例#42
0
        public override bool RefundOrder(IPayHistory order, out string message)
        {
            message = "";
            if (string.IsNullOrEmpty(order.spBillno))
            {
                throw new Exception("支付宝订单号为空,请检查sp_billno");
            }
            ////////////////////////////////////////////请求参数////////////////////////////////////////////

            //服务器异步通知页面路径
            string notify_url = refundNotifyUrl;
            //需http://格式的完整路径,不允许加?id=123这类自定义参数

            //退款批次号
            string batch_no = DateTime.Now.ToString("yyyyMMdd") + order.OrderId.Substring(6, order.OrderId.Length - 6) + "C";
            //必填,每进行一次即时到账批量退款,都需要提供一个批次号,必须保证唯一性

            //退款请求时间
            string refund_date = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
            //必填,格式为:yyyy-MM-dd hh:mm:ss

            //退款总笔数
            string batch_num = "1";
            //必填,即参数detail_data的值中,“#”字符出现的数量加1,最大支持1000笔(即“#”字符出现的最大数量999个)

            //单笔数据集
            string detail_data = order.spBillno + "^" + order.Amount + "^协商退款";
            //必填,格式详见“4.3 单笔数据集参数说明”
            //Log(detail_data);

            ////////////////////////////////////////////////////////////////////////////////////////////////

            //把请求参数打包成数组
            SortedDictionary <string, string> sParaTemp = new SortedDictionary <string, string>();

            sParaTemp.Add("partner", partner);
            sParaTemp.Add("_input_charset", _input_charset);
            sParaTemp.Add("service", "refund_fastpay_by_platform_nopwd");
            sParaTemp.Add("notify_url", notify_url);
            sParaTemp.Add("batch_no", batch_no);
            sParaTemp.Add("refund_date", refund_date);
            sParaTemp.Add("batch_num", batch_num);
            sParaTemp.Add("detail_data", detail_data);

            //建立请求
            string sHtmlText = AlipaySubmit.BuildRequest(sParaTemp);

            //请在这里加上商户的业务逻辑程序代码

            //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——

            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.LoadXml(sHtmlText);
            Log(sHtmlText);
            string status = xmlDoc.SelectSingleNode("/alipay/is_success").InnerText;

            if (status == "F")
            {
                message = "退款失败:" + xmlDoc.SelectSingleNode("/alipay/error").InnerText;
                return(false);
            }
            else
            {
                if (status == "T")
                {
                    message = "退款成功";
                    BaseRefundOrder(order);
                    return(true);
                }
                else if (status == "P")
                {
                    message = "退款处理中";
                    //退款通知会用及时到帐接口发过来
                    return(true);
                }
                return(false);
            }
        }
示例#43
0
        /// <summary>
        /// 获取通知,按具体需求重写
        /// </summary>
        /// <param name="context"></param>
        protected override string OnNotify(HttpContext context)
        {
            alipayNotifyURL = alipayNotifyURL + "&partner=" + partner + "&notify_id=" + context.Request.Form["notify_id"];

            //获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的
            string responseTxt = CoreHelper.HttpRequest.HttpGet(alipayNotifyURL, Encoding.Default);

            int i;
            NameValueCollection coll = context.Request.Form;

            // Get names of all forms into a string array.
            String[] requestarr = coll.AllKeys;

            //进行排序;
            string[] Sortedstr = AliPay.BubbleSort(requestarr);

            //构造待md5摘要字符串 ;
            string prestr = "";

            for (i = 0; i < Sortedstr.Length; i++)
            {
                if (context.Request.Form[Sortedstr[i]] != "" && Sortedstr[i] != "sign" && Sortedstr[i] != "sign_type")
                {
                    if (i == Sortedstr.Length - 1)
                    {
                        prestr = prestr + Sortedstr[i] + "=" + context.Request.Form[Sortedstr[i]];
                    }
                    else
                    {
                        prestr = prestr + Sortedstr[i] + "=" + context.Request.Form[Sortedstr[i]] + "&";
                    }
                }
            }
            prestr = prestr + key;

            string mysign = AliPay.GetMD5(prestr, _input_charset);

            string sign = context.Request.Form["sign"];

            string strOrderNO = context.Request.Form["out_trade_no"]; //订单号

            string strPrice = context.Request.Form["total_fee"];      //金额
            string trade_no = context.Request.Form["trade_no"];       //支付宝订单号

            string notify_type   = context.Request.Form["notify_type"];
            string trade_status  = context.Request.Form["trade_status"];  //交易状态
            string refund_status = context.Request.Form["refund_status"]; //退款状态
            string gmt_refund    = context.Request.Form["refund_status"]; //退款时间

            if (mysign == sign && responseTxt == "true")                  //验证支付发过来的消息,签名是否正确
            {
                if (notify_type == "trade_status_sync")
                {
                    #region 支付&退款
                    if (trade_status == "WAIT_BUYER_PAY")//   判断支付状态_等待买家付款(文档中有枚举表可以参考)
                    {
                        Log("WAIT_BUYER_PAY" + strOrderNO);
                        context.Response.Write("success");     //返回给支付宝消息,成功,请不要改写这个success
                    }//支付状态成功并且退款通知为NULL
                    else if ((trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS") && string.IsNullOrEmpty(refund_status))
                    {
                        #region 支付处理
                        IPayHistory order = OnlinePayBusiness.Instance.GetOrder(strOrderNO, ThisCompanyType);
                        order.spBillno = trade_no;
                        Confirm(order, GetType(), Convert.ToDecimal(strPrice));
                        #endregion
                        //context.Response.Write("success");     //返回给支付宝消息,成功,请不要改写这个success
                        return("success");
                    }
                    else if (refund_status == "REFUND_SUCCESS")//退款成功
                    {
                        #region 退款处理
                        Log("收到退款通知:" + strOrderNO);
                        IPayHistory order = OnlinePayBusiness.Instance.GetOrder(strOrderNO, ThisCompanyType);
                        BaseRefundOrder(order);
                        #endregion
                        //context.Response.Write("success");
                        return("success");
                    }
                    else
                    {
                        //context.Response.Write("fail");
                        return("fail");
                    }
                    #endregion
                }
                else if (notify_type == "batch_trans_notify")
                {
                    #region 批量付款通知

                    /***
                     * string batch_no = context.Request.Form["batch_no"];
                     * string success_details = context.Request.Form["success_details"];
                     * string fail_details = context.Request.Form["success_details"];
                     * List<BatchPayItem> arry1 = BatchPayItem.FromDetail(success_details);
                     * List<BatchPayItem> arry2 = BatchPayItem.FromDetail(fail_details);
                     * foreach(BatchPayItem a in arry1)
                     * {
                     *  HotelBookModel.AccountHistory item = new HotelBookModel.AccountHistory();
                     *  item.OrderId = a.OrderNo;
                     *  item.Status = HotelBookModel.AccountHistory.AccountStatus.Success;
                     *  item.Remark = "转帐成功:" + a.Remark;
                     *  item.BatchNo = batch_no;
                     *  AccountHistoryAction.UpdateStatus(item);
                     * }
                     * foreach (BatchPayItem a in arry2)
                     * {
                     *  HotelBookModel.AccountHistory item = new HotelBookModel.AccountHistory();
                     *  item.OrderId = a.OrderNo;
                     *  item.Status = HotelBookModel.AccountHistory.AccountStatus.Fail;
                     *  item.Remark = "转帐失败:" + a.Remark;
                     *  item.BatchNo = batch_no;
                     *  AccountHistoryAction.UpdateStatus(item);
                     * }
                     * context.Response.Write("success");
                     * **/
                    #endregion
                    return("success");
                }
            }
            else
            {
                //context.Response.Write("fail");
                return("fail");
            }
            return("fail");
        }
示例#44
0
 /// <summary>
 /// WAP认证支付
 /// 首次需传入银行卡进行绑定
 /// 再次按绑定的银行卡进行支付
 /// </summary>
 /// <param name="order"></param>
 /// <param name="id_no"></param>
 /// <param name="acct_name"></param>
 /// <param name="card_no"></param>
 /// <param name="no_agree"></param>
 /// <param name="risk_item"></param>
 public void WapAuthSubmit(IPayHistory order, string id_no, string acct_name, string card_no, string no_agree, string risk_item)
 {
     var request = new Message.WapAuth.PayRequest();
     request.version = PartnerConfig.VERSION;
     request.oid_partner = PartnerConfig.OID_PARTNER;
     request.user_id = order.UserId;
     request.sign_type = PartnerConfig.SIGN_TYPE;
     request.busi_partner = PartnerConfig.BUSI_PARTNER;
     request.no_order = order.OrderId;
     request.dt_order = YinTongUtil.getCurrentDateTimeStr();
     request.name_goods = "在线充值";
     request.money_order = order.Amount.ToString();
     request.notify_url = CoreHelper.CustomSetting.GetConfigKey("lianlianWapAuthNotifyUrl");
     request.url_return = CoreHelper.CustomSetting.GetConfigKey("lianlianWapAuthReturnUrl");
     request.id_type = "0";
     request.id_no = id_no;
     request.acct_name = acct_name;
     request.card_no = card_no;
     request.no_agree = no_agree;
     request.risk_item = risk_item;//风控参数
     request.SetSign();
     var data = CoreHelper.SerializeHelper.SerializerToJson(request, Encoding.UTF8);
     StringBuilder sbHtml = new StringBuilder();
     sbHtml.Append("<form id='payBillForm' action='" + request.InterFaceUrl + "' method='post'>");
     sbHtml.Append("<input name='req_data' value='" + data + "' /></form>");
     sbHtml.Append("<script>document.forms['payBillForm'].submit();</script>");
     System.Web.HttpContext.Current.Response.Write(sbHtml.ToString());
 }