Beispiel #1
0
        /// <summary>
        /// 支付宝退款

        /// 日期:2016年10月17日
        /// </summary>
        /// <param name="OrderNo"></param>
        /// <returns></returns>
        public override bool ApplyRefund(string OrderNo, string SellerID, string TradeNo, decimal TotalFee, string RefundNo, decimal RefundFee, string OnlineTransactionNo)
        {
            if (base.ApplyRefund(OrderNo, SellerID, TradeNo, TotalFee, RefundNo, RefundFee, OnlineTransactionNo))
            {
                //没有收款人
                if (SellerID == "")
                {
                    return(true);
                }

                XuHos.Common.Pay.AliPay.WebPay alipay = new WebPay(SellerID);
                return(alipay.ApplyRefund(SellerID, TradeNo, "", RefundFee, RefundNo));
            }

            return(false);
        }
Beispiel #2
0
        public HttpResponseMessage RefundNotifyUrl()
        {
            SortedDictionary <string, string> sPara = GetRequestPost();
            var ret = "fail";

            if (sPara.Count > 0)//判断是否有带返回参数
            {
                XuHos.BLL.OrderService service = new OrderService(CurrentOperatorUserID);
                var Request = System.Web.HttpContext.Current.Request;
                //批次号
                string batch_no = Request.Form["batch_no"];

                //批量退款数据中转账成功的笔数
                string success_num = Request.Form["success_num"];
                //批量退款数据中的详细信息
                string result_details = Request.Form["result_details"];
                //通知编号
                string notify_id = Request.Form["notify_id"];
                //签名
                string sign = Request.Form["sign"];

                var order = service.GetOrder(batch_no);

                var alipay = new WebPay(order.SellerID);

                if (alipay.VerifySign(sPara, notify_id, sign))//验证成功
                {
                    if (service.RefundCompleted(order.OrderNo, EnumPayType.AliPay))
                    {
                        ret = "success";
                    }
                }
            }



            //返回处理结果
            return(new HttpResponseMessage
            {
                Content = new StringContent(ret, Encoding.GetEncoding("UTF-8"), "text/plain")
            });
        }
        //網購寫入訂單
        public string webOrder(WebPay payData)
        {
            if (Session[CSession關鍵字.SK_LOGINED_CUSTOMER] != null)
            {
                tCustomer cust = Session[CSession關鍵字.SK_LOGINED_CUSTOMER] as tCustomer;

                MotaiDataEntities dbContext      = new MotaiDataEntities();
                List <tStatu>     StatuList      = dbContext.tStatus.Where(s => s.sCustomerId.Equals(cust.CustomerId)).ToList();
                string            szHtml         = String.Empty;
                string            szErrorMessage = String.Empty;
                List <string>     enErrors       = new List <string>();
                try
                {
                    using (AllInOne oPayment = new AllInOne())
                    {
                        /* 服務參數 */
                        oPayment.ServiceMethod = AllPay.Payment.Integration.HttpMethod.HttpPOST;
                        oPayment.ServiceURL    = "https://payment-stage.opay.tw/Cashier/AioCheckOut/V5";
                        oPayment.HashKey       = "5294y06JbISpM5x9";
                        oPayment.HashIV        = "v77hoKGq4kWxNNIS";
                        oPayment.MerchantID    = "2000132";
                        /* 基本參數 */
                        string baseURI = Request.Url.Scheme + "://" + Request.Url.Authority;
                        if (payData.payType == 2)
                        {
                            oPayment.Send.ReturnURL = baseURI + Url.Action("orderCredit", "Order");
                        }
                        else
                        {
                            oPayment.Send.ReturnURL = baseURI + Url.Action("ATMpayOff", "Order");
                        }
                        oPayment.Send.ClientBackURL = baseURI;
                        //oPayment.Send.OrderResultURL = baseURI;
                        int number = (DateTime.Now.Hour * 3600 + DateTime.Now.Minute * 60 + DateTime.Now.Second) * 3;
                        oPayment.Send.MerchantTradeNo   = "MD" + DateTime.Now.Date.ToString("yyyyMMdd") + number.ToString("000000");
                        oPayment.Send.MerchantTradeDate = DateTime.Now;
                        oPayment.Send.TotalAmount       = Decimal.Parse(payData.totalPay);
                        oPayment.Send.TradeDesc         = "感謝購買墨台商品";
                        if (payData.payType == 1)
                        {
                            oPayment.Send.ChoosePayment    = PaymentMethod.ATM;
                            oPayment.SendExtend.ExpireDate = Int32.Parse("3");
                        }
                        else
                        {
                            oPayment.Send.ChoosePayment = PaymentMethod.Credit;
                        }
                        //oPayment.Send.ChoosePayment = PaymentMethod.ALL;
                        oPayment.Send.Remark            = "饒了我吧";
                        oPayment.Send.ChooseSubPayment  = PaymentMethodItem.None;
                        oPayment.Send.NeedExtraPaidInfo = ExtraPaymentInfo.No;
                        oPayment.Send.HoldTrade         = HoldTradeType.No;
                        oPayment.Send.DeviceSource      = DeviceType.PC;
                        oPayment.Send.UseRedeem         = UseRedeemFlag.No; //購物金/紅包折抵
                        oPayment.Send.IgnorePayment     = "";               // 例如財付通:Tenpay
                        // 加入選購商品資料。
                        foreach (var item in StatuList)
                        {
                            tProduct product = dbContext.tProducts.Where(p => p.ProductId.Equals(item.sProductId)).FirstOrDefault();
                            //var chg = JObject.Parse(item.Value.ToString());
                            oPayment.Send.Items.Add(new Item()
                            {
                                Name     = product.pName,
                                Price    = product.pPrice,
                                Currency = "NTD",
                                Quantity = item.sProductQty,
                                URL      = "<< 產品說明位址 >>"
                            });
                        }
                        // 當付款方式為 ALL 時,建議增加的參數。
                        if (payData.payType == 1)
                        {
                            oPayment.SendExtend.PaymentInfoURL = baseURI + Url.Action("orderATM", "Order");
                        }
                        ////攜帶參數
                        //WebOrderModel order = new WebOrderModel();
                        //order.boughtList = StatuList;
                        //order.webpay = payData;
                        //order.customer = cust;
                        //order.payDate = oPayment.Send.MerchantTradeDate;

                        //http.Session[oPayment.Send.MerchantTradeNo] = order;

                        //database產生訂單
                        tOrder newOrder = new tOrder();
                        newOrder.oCustomerId    = cust.CustomerId;
                        newOrder.oEmployeeId    = 19;
                        newOrder.oDate          = DateTime.Now;
                        newOrder.oAddress       = payData.shipAddress;
                        newOrder.oWarehouseName = 1;
                        newOrder.cNote          = oPayment.Send.MerchantTradeNo;
                        dbContext.tOrders.Add(newOrder);
                        dbContext.SaveChanges();
                        tOrder    CreateOrder = dbContext.tOrders.OrderByDescending(o => o.OrderId).FirstOrDefault();
                        tOrderPay pay         = new tOrderPay();
                        pay.oOrderId          = CreateOrder.OrderId;
                        pay.oOrderInstallment = 1;
                        pay.oPayType          = payData.payType;
                        pay.oPayment          = Convert.ToInt32(payData.totalPay);
                        pay.oPayDate          = DateTime.Now;
                        dbContext.tOrderPays.Add(pay);
                        foreach (var item in StatuList)
                        {
                            tOrderDetail orderDetail = new tOrderDetail();
                            orderDetail.oOrderId    = CreateOrder.OrderId;
                            orderDetail.oProductId  = item.sProductId;
                            orderDetail.oProductQty = item.sProductQty;
                            dbContext.tOrderDetails.Add(orderDetail);
                            dbContext.tStatus.Remove(item);
                            dbContext.SaveChanges();
                        }
                        dbContext.SaveChanges();
                        /* 產生訂單 */
                        enErrors.AddRange(oPayment.CheckOut());
                        /* 產生產生訂單 Html Code 的方法 */
                        //string szHtml = String.Empty;
                        enErrors.AddRange(oPayment.CheckOutString(ref szHtml));
                    }
                }
                catch (Exception ex)
                {
                    // 例外錯誤處理。
                    enErrors.Add(ex.Message);
                }
                finally
                {
                    // 顯示錯誤訊息。
                    if (enErrors.Count() > 0)
                    {
                        szErrorMessage = String.Join("\\r\\n", enErrors);
                    }
                }
                if (enErrors.Count() == 0)
                {
                    return(szHtml);
                }
                else
                {
                    return(szErrorMessage);
                }
            }
            return(String.Empty);
        }
Beispiel #4
0
        public IHttpActionResult ReturnUrl()
        {
            var payConfig = SysConfigService.Get <XuHos.Common.Config.Sections.Pay>();

            try
            {
                var Request = System.Web.HttpContext.Current.Request;
                var sPara   = GetRequestGet();


                if (sPara.Count > 0)//判断是否有带返回参数
                {
                    string seller_id = Request.QueryString["seller_id"];
                    //商户订单号
                    string out_trade_no = Request.QueryString["out_trade_no"];

                    //支付宝交易号
                    string trade_no = Request.QueryString["trade_no"];

                    //交易状态
                    string trade_status = Request.QueryString["trade_status"];

                    //总金额
                    string total_fee = Request["total_fee"];
                    //通知编号
                    string notify_id = Request.QueryString["notify_id"];
                    //签名
                    string sign   = Request.QueryString["sign"];
                    var    alipay = new WebPay(seller_id);
                    //验证成功
                    if ((trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS"))
                    {
                        if (alipay.VerifySign(sPara, notify_id, sign))
                        {
                            XuHos.BLL.OrderService service = new OrderService(CurrentOperatorUserID);

                            var order = service.GetOrder(out_trade_no);

                            if (order != null)
                            {
                                if (order.TotalFee == decimal.Parse(total_fee))
                                {
                                    if (service.PayCompleted(out_trade_no, trade_no, XuHos.Common.Enum.EnumPayType.AliPay, seller_id))
                                    {
                                        return(Redirect($"{payConfig.ReturnUrlPrefix}/Trade/Order/PaySuccessfully?OrderNo={out_trade_no}"));
                                    }
                                    else
                                    {
                                        return(Redirect($"{payConfig.ReturnUrlPrefix}/Trade/Order/Error?message=系统错误,更新订单状态失败"));
                                    }
                                }
                                else
                                {
                                    return(Redirect($"{payConfig.ReturnUrlPrefix}/Trade/Order/Error?message=参数非法,参数“totalFee”或 “seller_id”不正确"));
                                }
                            }
                            else
                            {
                                return(Redirect($"{payConfig.ReturnUrlPrefix}/Trade/Order/Error?message=参数非法,订单不存在"));
                            }
                        }
                        else
                        {
                            return(Redirect($"{payConfig.ReturnUrlPrefix}/Trade/Order/PaySuccessfully?OrderNo={out_trade_no}"));
                        }
                    }
                }
                return(Redirect($"{payConfig.ReturnUrlPrefix}/Trade/Order/Error?message=参数非法,不是合法的支付请求"));
            }
            catch (Exception E)
            {
                return(Redirect($"{payConfig.ReturnUrlPrefix}/Trade/Order/Error?message={E.Message}"));
            }
        }
Beispiel #5
0
        public HttpResponseMessage NotifyUrl()
        {
            var Request = System.Web.HttpContext.Current.Request;
            var content = "";

            try
            {
                LogHelper.WriteDebug("Cashier/AliPay/NotifyUrl", Request.Params.ToJson());
                SortedDictionary <string, string> sPara = GetRequestPost();

                if (sPara.Count > 0)//判断是否有带返回参数
                {
                    //通知编号
                    string seller_id = Request.Form["seller_id"];
                    //商户订单号
                    string out_trade_no = Request.Form["out_trade_no"];
                    //支付宝交易号
                    string trade_no = Request.Form["trade_no"];
                    //交易状态
                    string trade_status = Request.Form["trade_status"];
                    //总金额
                    string total_fee = Request["total_fee"];
                    //通知编号
                    string notify_id = Request.Form["notify_id"];

                    //签名
                    string sign = Request.Form["sign"];

                    var alipay = new WebPay(seller_id);

                    if ((trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS") && alipay.VerifySign(sPara, notify_id, sign))//验证成功
                    {
                        using (XuHos.EventBus.MQChannel mqChanne = new EventBus.MQChannel())
                        {
                            if (mqChanne.Publish <EventBus.Events.OrderPayNotifyEvent>(new EventBus.Events.OrderPayNotifyEvent()
                            {
                                OrderNo = out_trade_no,
                                TradeNo = trade_no,
                                PayType = EnumPayType.AliPay,
                                SelllerID = seller_id
                            }))
                            {
                                content = "success";
                            }
                        }
                    }
                }

                content = "fail";
            }
            catch (Exception E)
            {
                LogHelper.WriteError(E);
                content = "fail";
            }

            //返回处理结果
            return(new HttpResponseMessage
            {
                Content = new StringContent(content, Encoding.GetEncoding("UTF-8"), "text/plain")
            });
        }