Ejemplo n.º 1
0
        public async Task <IActionResult> Pay(string out_trade_no, string subject, string total_amount, string body, string scene, string auth_code)
        {
            var model = new AlipayTradePayModel
            {
                OutTradeNo  = out_trade_no,
                Subject     = subject,
                Scene       = scene,
                AuthCode    = auth_code,
                TotalAmount = total_amount,
                Body        = body
            };
            var req = new AlipayTradePayRequest();

            req.SetBizModel(model);

            var response = await _client.ExecuteAsync(req);

            ResponseModel responseModel = new ResponseModel()
            {
                code = HTTPResponseCode.PartialContent,
                data = response.Body
            };

            if (response.IsError)
            {
                responseModel.code    = HTTPResponseCode.BadRequest;
                responseModel.message = response.Msg;
            }
            else
            {
                responseModel.code = HTTPResponseCode.Successful;
            }
            return(Json(responseModel));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 条码支付
        /// </summary>
        /// <param name="tradepayModel">请求内容</param>
        /// <returns></returns>
        public static TradepayResponseModel TradePay(TradepayModel tradepayModel)
        {
            AlipayTradePayRequest payRequst = new AlipayTradePayRequest();

            payRequst.BizContent = JsonConvert.SerializeObject(tradepayModel);
            LogUtil.WriteAlipayLog("条码支付请求", "请求参数", payRequst.BizContent);
            Dictionary <string, string> paramsDict  = (Dictionary <string, string>)payRequst.GetParameters();
            AlipayTradePayResponse      payResponse = _client.Execute(payRequst);

            LogUtil.WriteAlipayLog("条码支付响应", "响应参数", payResponse.Body);
            return(new TradepayResponseModel
            {
                msg = payResponse.Msg,
                code = payResponse.Code,
                subcode = payResponse.SubCode,
                submsg = payResponse.SubMsg,
                buyer_logon_id = payResponse.BuyerLogonId,
                store_name = payResponse.StoreName,
                buyer_pay_amount = payResponse.BuyerPayAmount,
                buyer_user_id = payResponse.BuyerUserId,
                gmt_payment = payResponse.GmtPayment,
                out_trade_no = payResponse.OutTradeNo,
                point_amount = payResponse.PointAmount,
                invoice_amount = payResponse.InvoiceAmount,
                total_amount = payResponse.TotalAmount,
                trade_no = payResponse.TradeNo,
                receipt_amount = payResponse.ReceiptAmount
            });
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 条码支付
        /// </summary>
        public void BarCodePay(decimal amount, string orderNo, string authCode, string subject, string storeId, string terminalId)
        {
            bool success = false;

            //组装业务参数
            var model = new AlipayTradePayModel()
            {
                OutTradeNo     = orderNo,
                TotalAmount    = amount.ToString(),
                Scene          = "bar_code",
                AuthCode       = authCode,
                Subject        = subject,
                StoreId        = storeId,
                TerminalId     = terminalId,
                TimeoutExpress = "2m"
            };

            var request = new AlipayTradePayRequest();

            request.SetBizModel(model);

            AlipayTradePayResponse response = aopClient.Execute(request);

            if (response != null && response.Code == "10000")
            {
                success = true;

                //response.TradeNo 支付宝28位交易号
            }

            //记日志response.ToJson();

            //return success;
        }
Ejemplo n.º 4
0
        public AlipayTradePayResponse Pay(string content)
        {
            AlipayTradePayRequest payRequst = new AlipayTradePayRequest();

            payRequst.BizContent = content;
            //Dictionary<string, string> paramsDict = (Dictionary<string, string>)payRequst.GetParameters();
            AlipayTradePayResponse payResponse = m_Client.Execute(payRequst);

            return(payResponse);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 统一收单交易支付接口
        /// </summary>
        /// <param name="request">提交给统一下单API的参数</param>
        /// <param name="config"></param>
        /// <param name="timeOut">超时时间</param>
        /// <returns>成功时返回,其他抛异常</returns>
        public static async Task <AlipayTradePayResponse> CreateOrder(AlipayTradePayModel request, AlipayConfig config, int timeOut = 6)
        {
            IAopClient client      = new AopClient(AlipayConstants.GATEWAYURL, config.AppId, config.PrivateKey, config.Format, config.Version, config.SignType, config.AliPublicKey, config.Charset, config.KeyFromFile);
            var        requestData = new AlipayTradePayRequest();

            requestData.SetNotifyUrl(config.NotifyUrl);
            requestData.SetReturnUrl(config.QuitUrl);
            requestData.SetBizModel(request);

            return(await client.ExecuteAsync(requestData));
        }
Ejemplo n.º 6
0
        private AlipayTradePayResponse Pay(string biz_content)
        {
            AlipayTradePayRequest payRequst = new AlipayTradePayRequest();

            payRequst.BizContent = biz_content;

            Dictionary <string, string> paramsDict = (Dictionary <string, string>)payRequst.GetParameters();
            //new DefaultAopClient(Config.serverUrl, Config.appId, Config.merchant_private_key);

            AlipayTradePayResponse payResponse = client.Execute(payRequst);

            return(payResponse);
        }
Ejemplo n.º 7
0
        public AlipayTradePayResponse PayData(AlipayTradePayRequest request)
        {
            var    resp       = client.SdkExecute(request);
            string resultData = HttpHelper.Post(AliPayConfig.serverUrl, resp.Body);

            LogHelper.WriteLog("支付统一支付", resultData);
            string      str  = JObject.Parse(resultData)["alipay_trade_query_response"].ToString();
            XmlDocument doc1 = Newtonsoft.Json.JsonConvert.DeserializeXmlNode("{\"AlipayTradeQueryResponse\":" + str + "}");

            System.IO.StringReader strread   = new System.IO.StringReader(doc1.OuterXml);
            AlipayTradePayResponse response1 = new System.Xml.Serialization.XmlSerializer(typeof(AlipayTradePayResponse)).Deserialize(strread) as AlipayTradePayResponse;

            LogHelper.WriteLog("支付结果model", JsonConvert.SerializeObject(response1));
            return(response1);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 条码支付
        /// </summary>
        /// <param name="pay">条码支付实体</param>
        /// <param name="payBack">条码支付实体返回</param>
        /// <param name="message">错误信息</param>
        /// <returns></returns>
        internal bool Pay(Pay pay, out PayBack payBack, out string message)
        {
            _log.Info("条码支付 Pay 开始");
            var payRequst = new AlipayTradePayRequest();

            payRequst.SetNotifyUrl(AlipayConfig.NotifyUrl);
            payRequst.BizContent = JsonConvert.SerializeObject(pay, new Newtonsoft.Json.JsonSerializerSettings()
            {
                DefaultValueHandling = DefaultValueHandling.Ignore
            }).ToLower();
            var payResponse = client.Execute(payRequst);

            if (payResponse.Code == "10000")
            {
                _log.Info("条码支付成功!");
                payBack = new PayBack()
                {
                    Code                  = payResponse.Code,
                    Msg                   = payResponse.Msg,
                    Out_Trade_No          = payResponse.OutTradeNo,
                    Sub_Code              = payResponse.SubCode,
                    Sub_Msg               = payResponse.SubMsg,
                    Buyer_Logon_Id        = payResponse.BuyerLogonId,
                    Buyer_Pay_Amount      = Convert.ToDecimal(payResponse.BuyerPayAmount),
                    Buyer_User_Id         = payResponse.BuyerUserId,
                    Card_Balance          = Convert.ToDecimal(payResponse.CardBalance),
                    Discount_Goods_Detail = payResponse.DiscountGoodsDetail,
                    Fund_Bill_List        = GetTradeFundBills(payResponse.FundBillList),
                    Gmt_Payment           = Convert.ToDateTime(payResponse.GmtPayment),
                    Invoice_Amount        = Convert.ToDecimal(payResponse.InvoiceAmount),
                    Point_Amount          = Convert.ToDecimal(payResponse.PointAmount),
                    Receipt_Amount        = Convert.ToDecimal(payResponse.ReceiptAmount),
                    Store_Name            = payResponse.StoreName,
                    Total_Amount          = payResponse.TotalAmount,
                    Trade_No              = payResponse.TradeNo,
                    Voucher_Detail_List   = GetVoucherDetails(payResponse.VoucherDetailList)
                };
                message = "";
                return(true);
            }
            else
            {
                payBack = null;
                message = $"{ payResponse.Msg},{payResponse.SubMsg}";
                _log.Error($"条码支付失败:{message}");
                return(false);
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 当面付扫码
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public ActionResult BarCodePay(string code)
        {
            string out_trade_no = DateTime.Now.ToString("yyyyMMddHHmmssfff");

            AlipayTradePayRequest request = new AlipayTradePayRequest(); //创建API对应的request类

            request.BizContent = "{" +
                                 "    \"out_trade_no\":\"" + out_trade_no + "\"," +
                                 "    \"scene\":\"bar_code\"," +
                                 "    \"auth_code\":\"" + code + "\"," +
                                 "    \"subject\":\"Iphone6 16G\"," +
                                 "    \"store_id\":\"NJ_001\"," +
                                 "    \"timeout_express\":\"2m\"," +
                                 "    \"total_amount\":\"88.88\"" +
                                 "  }";                                    //设置业务参数
            AlipayTradePayResponse response = client.pageExecute(request); //通过alipayClient调用API,获得对应的response类

            return(Content(response.Body));
        }
Ejemplo n.º 10
0
        public async Task <IActionResult> Pay(AlipayTradePayViewModel viewModel)
        {
            var model = new AlipayTradePayModel
            {
                OutTradeNo  = viewModel.OutTradeNo,
                Subject     = viewModel.Subject,
                Scene       = viewModel.Scene,
                AuthCode    = viewModel.AuthCode,
                TotalAmount = viewModel.TotalAmount,
                Body        = viewModel.Body
            };
            var req = new AlipayTradePayRequest();

            req.SetBizModel(model);

            var response = await _client.CertificateExecuteAsync(req, _optionsAccessor.Value);

            return(Ok(response.Body));
        }
Ejemplo n.º 11
0
        public async Task <IActionResult> Pay(string out_trade_no, string scene, string auth_code, string subject, string total_amount, string body, string notify_url)
        {
            var model = new AlipayTradePayModel()
            {
                Scene       = scene,
                AuthCode    = auth_code,
                Body        = body,
                Subject     = subject,
                TotalAmount = total_amount,
                OutTradeNo  = out_trade_no,
            };
            var req = new AlipayTradePayRequest();

            req.SetBizModel(model);
            req.SetNotifyUrl(notify_url);

            var response = await _client.ExecuteAsync(req);

            return(Ok(response.Body));
        }
Ejemplo n.º 12
0
        public async Task <IActionResult> Pay(AlipayTradePayViewModel viewModel)
        {
            var model = new AlipayTradePayModel
            {
                OutTradeNo  = viewModel.OutTradeNo,
                Subject     = viewModel.Subject,
                Scene       = viewModel.Scene,
                AuthCode    = viewModel.AuthCode,
                TotalAmount = viewModel.TotalAmount,
                Body        = viewModel.Body
            };
            var req = new AlipayTradePayRequest();

            req.SetBizModel(model);

            var response = await _client.ExecuteAsync(req);

            ViewData["response"] = response.Body;
            return(View());
        }
Ejemplo n.º 13
0
        // 条码/声波支付
        public async Task <AlipayTradePayResponse> Pay(PayRequest request)
        {
            var order = OrderService.Get(request.Id);
            var model = new AlipayTradePayModel
            {
                OutTradeNo  = order.Order_SN,
                Subject     = order.Name,
                Scene       = "bar_code", //wave_code
                AuthCode    = request.AuthCode,
                TotalAmount = order.Order_Money.ToString("n"),
                Body        = order.Remark,
                ProductCode = request.ProduceCode ?? "FACE_TO_FACE_PAYMENT"
            };

            var req = new AlipayTradePayRequest();

            req.SetBizModel(model);

            return(await client.ExecuteAsync(req, options.Value));
        }
Ejemplo n.º 14
0
        protected void Page_Load(object sender, EventArgs e)
        {
            DefaultAopClient      client  = new DefaultAopClient(config.gatewayUrl, config.app_id, config.private_key, "json", "1.0", config.sign_type, config.alipay_public_key, config.charset, false);
            AlipayTradePayRequest request = new AlipayTradePayRequest();

            request.BizContent = "{" +
                                 "\"out_trade_no\":\"20150320010101001\"," +
                                 "\"scene\":\"bar_code\"," +
                                 "\"auth_code\":\"28763443825664394\"," +
                                 "\"product_code\":\"FACE_TO_FACE_PAYMENT\"," +
                                 "\"subject\":\"Iphone616G\"," +
                                 "\"buyer_id\":\"2088202954065786\"," +
                                 "\"seller_id\":\"2088102146225135\"," +
                                 "\"total_amount\":88.88," +
                                 "\"discountable_amount\":8.88," +
                                 "\"body\":\"Iphone616G\"," +
                                 "\"goods_detail\":[{" +
                                 "\"goods_id\":\"apple-01\"," +
                                 "\"goods_name\":\"ipad\"," +
                                 "\"quantity\":1," +
                                 "\"price\":2000," +
                                 "\"goods_category\":\"34543238\"," +
                                 "\"body\":\"特价手机\"," +
                                 "\"show_url\":\"http://www.alipay.com/xxx.jpg\"" +
                                 "}]," +
                                 "\"operator_id\":\"yx_001\"," +
                                 "\"store_id\":\"NJ_001\"," +
                                 "\"terminal_id\":\"NJ_T_001\"," +
                                 "\"extend_params\":{" +
                                 "\"sys_service_provider_id\":\"2088511833207846\"" +
                                 "}," +
                                 "\"timeout_express\":\"90m\"" +
                                 "}";

            AlipayTradePayResponse response = client.Execute(request);

            Response.Write(response.Body);
        }
Ejemplo n.º 15
0
        public async Task <IActionResult> Pay(AlipayTradePayViewModel viewModel)
        {
            if (_Interceptor != null)
            {
                return(Ok("this is _Interceptor"));
            }
            var model = new AlipayTradePayModel
            {
                OutTradeNo  = viewModel.OutTradeNo,
                Subject     = viewModel.Subject,
                Scene       = viewModel.Scene,
                AuthCode    = viewModel.AuthCode,
                TotalAmount = viewModel.TotalAmount,
                Body        = viewModel.Body
            };
            var req = new AlipayTradePayRequest();

            req.SetBizModel(model);

            var response = await _client.CertificateExecuteAsync(req, _optionsAccessor.Value);

            ViewData["response"] = response.Body;
            return(View());
        }
Ejemplo n.º 16
0
        /// <summary>
        /// 扫码支付
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        public OrderPayResult OrderPay(OrderPayDTO dto)
        {
            OrderPayResult result = new OrderPayResult();

            try
            {
                AlipayTradeBarcodeDTO barcodeDto = new AlipayTradeBarcodeDTO();
                barcodeDto.out_trade_no    = dto.OutTradeNo;
                barcodeDto.operator_id     = dto.OperatorId;
                barcodeDto.auth_code       = dto.AuthCode;
                barcodeDto.scene           = "bar_code";
                barcodeDto.total_amount    = dto.TotalAmount;
                barcodeDto.subject         = dto.Title;
                barcodeDto.body            = dto.Body;
                barcodeDto.store_id        = dto.StoreId;
                barcodeDto.terminal_id     = dto.TerminalId;
                barcodeDto.timeout_express = "30m";//限制30分钟内完成付款

                AlipayTradePayRequest payRequest = new AlipayTradePayRequest();
                payRequest.BizContent = barcodeDto.BuildJson();
                AlipayTradePayResponse payResponse = Execute(payRequest);

                if (payResponse != null)
                {
                    switch (payResponse.Code)
                    {
                    case ResultCode.SUCCESS:
                        break;

                    //返回支付处理中,需要进行轮询
                    case ResultCode.INRROCESS:

                        AlipayTradeQueryResponse queryResponse = LoopQuery(barcodeDto.out_trade_no, 10, 3000);       //用订单号trade_no进行轮询也是可以的。
                        //轮询结束后还是支付处理中,需要调撤销接口
                        if (queryResponse != null)
                        {
                            if (queryResponse.TradeStatus == TradeStatus.WAIT_BUYER_PAY)
                            {
                                CancelAndRetry(barcodeDto.out_trade_no);
                                queryResponse.TradeStatus = TradeStatus.TRADE_CLOSED;
                                queryResponse.SubMsg      = payResponse.SubMsg + "(等待时间过长,已经撤销支付订单)";
                            }
                            payResponse = toTradePayResponse(queryResponse);
                        }
                        break;

                    //明确返回业务失败
                    case ResultCode.FAIL:
                        break;

                    //返回系统异常,需要调用一次查询接口,没有返回支付成功的话调用撤销接口撤销交易
                    case ResultCode.ERROR:

                        AlipayTradeQueryResponse queryResponse2 = sendTradeQuery(barcodeDto.out_trade_no);

                        if (queryResponse2 != null)
                        {
                            if (queryResponse2.TradeStatus == TradeStatus.WAIT_BUYER_PAY)
                            {
                                AlipayTradeCancelResponse cancelResponse = CancelAndRetry(barcodeDto.out_trade_no);
                                queryResponse2.TradeStatus = TradeStatus.TRADE_CLOSED;
                                queryResponse2.SubMsg      = queryResponse2.SubMsg + "(等待时间过长,已经撤销支付订单)";
                            }
                            payResponse = toTradePayResponse(queryResponse2);
                        }
                        break;

                    default:
                        break;
                    }
                    result.SetAlipayResult(payResponse);
                    return(result);
                }
                else
                {
                    AlipayTradeQueryResponse queryResponse3 = sendTradeQuery(barcodeDto.out_trade_no);
                    if (queryResponse3 != null)
                    {
                        if (queryResponse3.TradeStatus == TradeStatus.WAIT_BUYER_PAY)
                        {
                            AlipayTradeCancelResponse cancelResponse = CancelAndRetry(barcodeDto.out_trade_no);
                            queryResponse3.TradeStatus = TradeStatus.TRADE_CLOSED;
                            queryResponse3.SubMsg      = queryResponse3.SubMsg + "(等待时间过长,已经撤销支付订单)";
                        }
                        payResponse = toTradePayResponse(queryResponse3);
                    }
                    result.SetAlipayResult(payResponse);
                    return(result);
                }
            }
            catch (Exception e)
            {
                throw new F2FPayException(e.Message, e);
            }
        }
        public void Post()
        {
            string Data = DataObj.GetData();

            if (Data.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Data);
            }
            catch (Exception Ex)
            {
                Log.Write("[OrderF2F]:", "【Data】" + Data, Ex);
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }
            OrderF2F OrderF2F = new OrderF2F();

            OrderF2F = JsonToObject.ConvertJsonToModel(OrderF2F, json);

            UserTrack UserTrack = new UserTrack();

            UserTrack = JsonToObject.ConvertJsonToModel(UserTrack, json);

            #region 获取并处理用户信息
            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == OrderF2F.Token);
            if (baseUsers == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (baseUsers.State != 1)//用户被锁定
            {
                DataObj.OutError("2003");
                return;
            }
            if (baseUsers.CardStae != 2)//未实名认证
            {
                //DataObj.OutError("2006");
                //return;
            }
            if (baseUsers.MiBao != 1)//未设置支付密码
            {
                //DataObj.OutError("2008");
                //return;
            }
            string NeekName = baseUsers.NeekName;
            if (NeekName.IsNullOrEmpty())
            {
                NeekName = baseUsers.TrueName;
            }
            if (NeekName.IsNullOrEmpty())
            {
                NeekName = "货款";
            }
            #endregion

            if (OrderF2F.Action == "Create")
            {
                int    PayWay  = OrderF2F.PayWay;
                string Tag     = "";
                byte   PayType = 0;
                string PayName = "";

                if (OrderF2F.OType == 7)
                {//支付宝
                    Tag     = "AliPay";
                    PayName = "条码付-";
                }
                if (OrderF2F.OType == 8)
                {//微信
                    Tag     = "WeiXin";
                    PayName = "刷卡付-";
                }
                if (PayWay.IsNullOrEmpty())
                {
                    if (Tag == "AliPay")
                    {
                        PayWay = 5;//兼容老版本
                    }
                    if (Tag == "WeiXin")
                    {
                        PayWay = 6;//兼容老版本
                    }
                }
                PayConfig PayConfig = Entity.PayConfig.FirstOrDefault(n => n.Id == PayWay && n.State == 1);
                //获取系统支付配置
                if (PayConfig == null)
                {
                    DataObj.OutError("1000");
                    return;
                }
                if (PayConfig.GroupType != Tag)
                {
                    DataObj.OutError("1000");
                    return;
                }
                PayName += PayConfig.Name;

                int InType = 0;
                if (!OrderF2F.InType.IsNullOrEmpty())
                {
                    InType = 1;
                }

                SysControl SysControl = new SysControl();

                #region 版本比较 升级之后比较长时间后可以考滤删除版本判断代码
                bool IsNew     = true;
                var  vSysAgent = this.Entity.SysAgent.FirstOrDefault(o => o.Id == baseUsers.Agent);
                if (vSysAgent == null)
                {
                    DataObj.OutError("1000");
                    return;
                }
                IsNew = BizExt.NewOrOldVersion(vSysAgent, Equipment, this.Entity);
                #endregion
                if (IsNew)//新版
                {
                    if (InType == 1)
                    {
                        SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == Tag && n.PayWay == PayWay && n.LagEntryDay > 0);
                    }
                    else
                    {
                        SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == Tag && n.PayWay == PayWay && n.LagEntryDay == 0);
                    }
                }
                else
                {
                    //旧版
                    SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == Tag && n.PayWay == PayWay);
                    if (SysControl.LagEntryDay > 0)
                    {
                        InType = 1;
                    }
                    else
                    {
                        InType = 0;
                    }
                }
                //获取系统支付配置
                if (SysControl == null)
                {
                    DataObj.OutError("1005");
                    return;
                }
                if (InType == 1 && (SysControl.LagEntryDay.IsNullOrEmpty() || SysControl.LagEntryNum.IsNullOrEmpty()))
                {
                    DataObj.Msg = "请升级到最新版再发起Tn到帐交易!";
                    DataObj.OutError("1005");
                    return;
                }
                SysControl syscontrol = SysControl.ChkState();
                if (syscontrol.State != 1)
                {
                    DataObj.OutError("1005");
                    return;
                }

                #region 创建订单
                //处理交易地点
                if (OrderF2F.X.IsNullOrEmpty() || OrderF2F.Y.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
                //开始处理参数 PayId扣款码,OType通道,7支付宝,8微信
                if (OrderF2F.Amoney.IsNullOrEmpty() || OrderF2F.PayId.IsNullOrEmpty() || OrderF2F.OType.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }

                OrderF2F.Amoney = OrderF2F.Amoney.FormatMoney();

                //获取用户支付配置
                UserPay UserPay = Entity.UserPay.FirstOrDefault(n => n.UId == baseUsers.Id && n.PId == PayWay);
                if (UserPay == null)
                {
                    DataObj.OutError("1000");
                    return;
                }
                //获取分支机构信息
                SysAgent SysAgent = new SysAgent();
                if (!baseUsers.Agent.IsNullOrEmpty())
                {
                    SysAgent = Entity.SysAgent.FirstOrNew(n => n.Id == baseUsers.Agent);
                }

                OrderF2F.PayWay = PayWay;
                //获取系统配置
                SysSet SysSet = Entity.SysSet.FirstOrDefault();
                if (InType == 1)
                {//客户端传来T+N但是系统没开启时无效
                    if (SysSet.LagEntry == 0)
                    {
                        InType = 0;
                    }
                }
                if (InType == 1)
                {
                    //手续费
                    OrderF2F.Poundage = 0;
                    //商户费率
                    OrderF2F.UserRate = 0;
                    //T+n时,代理佣金为 交易金额*费率
                    decimal AgentPayGet = OrderF2F.Amoney * SysSet.AgentGet;
                    OrderF2F.AgentPayGet = (Double)AgentPayGet;
                    //佣金舍位
                    OrderF2F.AgentPayGet = OrderF2F.AgentPayGet.Floor();
                }
                else
                {
                    //手续费
                    OrderF2F.Poundage = OrderF2F.Amoney * (decimal)UserPay.Cost;
                    //手续费取进
                    OrderF2F.Poundage = OrderF2F.Poundage.Ceiling();
                    //商户费率
                    OrderF2F.UserRate = UserPay.Cost;
                    //分支机构佣金设置为0,待分润计算后再写入
                    OrderF2F.AgentPayGet = 0;
                }

                OrderF2F.UId = baseUsers.Id;
                //到帐金额=支付金额-手续费
                OrderF2F.PayMoney = OrderF2F.Amoney - OrderF2F.Poundage;
                //第三方支付通道率
                OrderF2F.SysRate = (double)PayConfig.Cost;

                //这里是利润计算==========
                //利润=总金额-到帐-支付手续费
                decimal GetAll = OrderF2F.Amoney - OrderF2F.PayMoney - OrderF2F.Amoney * (decimal)OrderF2F.SysRate;
                //利润舍位
                GetAll = GetAll.Floor();
                //总利润
                OrderF2F.AIdPayGet = (double)GetAll;

                OrderF2F.Agent      = SysAgent.Id;//分支机构Id
                OrderF2F.AId        = baseUsers.AId;
                OrderF2F.FId        = 0;
                OrderF2F.OrderState = 1;
                OrderF2F.PayState   = 0;
                OrderF2F.AgentState = 0;
                OrderF2F.AddTime    = DateTime.Now;

                //写入前,判断交易金额限制
                if (OrderF2F.Amoney < syscontrol.SNum || OrderF2F.Amoney > syscontrol.ENum)
                {
                    DataObj.OutError("1006");
                    return;
                }
                //写入订单总表
                Orders Orders = new Orders();
                Orders.UId   = OrderF2F.UId;
                Orders.TName = NeekName;

                Orders.PayType = PayType;
                Orders.PayName = PayName;

                Orders.RUId     = 0;
                Orders.RName    = string.Empty;
                Orders.TType    = OrderF2F.OType;
                Orders.TState   = 1;
                Orders.Amoney   = OrderF2F.Amoney;
                Orders.Poundage = OrderF2F.Poundage;
                Orders.AddTime  = DateTime.Now;
                Orders.PayState = 0;
                Orders.PayWay   = PayConfig.Id;

                Orders.Agent      = OrderF2F.Agent;
                Orders.AgentState = 0;
                Orders.AId        = OrderF2F.AId;
                Orders.FId        = 0;
                Orders.ComeWay    = 1;

                string OrderAddress = OrderF2F.OrderAddress;
                if (OrderAddress.IsNullOrEmpty())
                {
                    OrderAddress = Utils.GetAddressByGPS(OrderF2F.X, OrderF2F.Y);
                }
                Orders.OrderAddress = OrderAddress;
                Orders.X            = OrderF2F.X;
                Orders.Y            = OrderF2F.Y;

                if (InType == 1)
                {
                    if (IsNew)//新版
                    {
                        Orders.LagEntryDay = SysControl.LagEntryDay;
                        Orders.LagEntryNum = SysControl.LagEntryNum;
                    }
                    else
                    {
                        Orders.LagEntryDay = SysSet.LagEntryDay;
                        Orders.LagEntryNum = SysSet.LagEntryNum;
                    }
                }
                else
                {
                    Orders.LagEntryDay = 0;
                    Orders.LagEntryNum = 0;
                }

                Entity.Orders.AddObject(Orders);
                Entity.SaveChanges();
                Entity.Refresh(RefreshMode.StoreWins, Orders);

                OrderF2F.OId = Orders.TNum;
                Entity.OrderF2F.AddObject(OrderF2F);
                Entity.SaveChanges();

                //=======================================
                UserTrack.ENo        = DataObj.ENo;
                UserTrack.OPType     = Orders.PayName;
                UserTrack.UserName   = Orders.TNum;
                UserTrack.GPSAddress = Orders.OrderAddress;
                UserTrack.GPSX       = Orders.X;
                UserTrack.GPSY       = Orders.Y;
                if (!OrderF2F.IP.IsNullOrEmpty())
                {
                    UserTrack.IP = OrderF2F.IP;
                }
                Orders.SeavGPSLog(UserTrack, Entity);
                //=======================================

                #endregion

                if (PayConfig.DllName == "AliPay")
                {
                    #region 支付宝调用支付
                    string[] PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' });    //接口信息 商户号,密钥,支付宝号
                    if (PayConfigArr.Length != 3)
                    {
                        DataObj.OutError("9999");
                        return;
                    }
                    if (AlipayVer == "1.0")
                    {
                        #region 1.0老接口
                        Submit Submit = new Submit();
                        Submit.pid = PayConfigArr[0];
                        Submit.key = PayConfigArr[1];
                        //卖家支付宝帐户
                        string seller_email = PayConfigArr[2];

                        //订单业务类型
                        string product_code = "BARCODE_PAY_OFFLINE";
                        //SOUNDWAVE_PAY_OFFLINE:声波支付,FINGERPRINT_FAST_PAY:指纹支付,BARCODE_PAY_OFFLINE:条码支付

                        string dynamic_id_type = "qrcode";    //动态ID类型 soundwave:声波,qrcode:二维码,barcode:条码


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

                        //把请求参数打包成数组
                        SortedDictionary <string, string> sParaTemp = new SortedDictionary <string, string>();
                        sParaTemp.Add("partner", Submit.pid);
                        sParaTemp.Add("_input_charset", "utf-8");
                        sParaTemp.Add("service", "alipay.acquire.createandpay");
                        sParaTemp.Add("seller_email", seller_email);
                        sParaTemp.Add("out_trade_no", OrderF2F.OId);
                        sParaTemp.Add("subject", Orders.TName + ":" + OrderF2F.OId);
                        sParaTemp.Add("total_fee", OrderF2F.Amoney.ToString("F2"));
                        sParaTemp.Add("product_code", product_code);
                        sParaTemp.Add("dynamic_id_type", dynamic_id_type);
                        sParaTemp.Add("dynamic_id", OrderF2F.PayId);

                        sParaTemp.Add("notify_url", NoticePath + "/PayCenter/AliPay/Notice.html");
                        //建立请求
                        string sHtmlText = Submit.BuildRequest(sParaTemp);
                        //Utils.WriteLog(sHtmlText);
                        try
                        {
                            XmlDocument xmlDoc = new XmlDocument();
                            xmlDoc.LoadXml(sHtmlText);
                            string is_success = xmlDoc.SelectSingleNode("/alipay/is_success").InnerText;
                            if (is_success == "T")
                            {
                                string trade_no    = xmlDoc.SelectSingleNode("/alipay/response/alipay/trade_no").InnerText;
                                string result_code = xmlDoc.SelectSingleNode("/alipay/response/alipay/result_code").InnerText;
                                if (result_code == "ORDER_SUCCESS_PAY_SUCCESS")
                                {    //成功
                                    OrderF2F.Trade_no = trade_no;
                                    Entity.SaveChanges();
                                    Orders = Orders.PaySuccess(Entity);
                                }
                                else if (result_code == "ORDER_SUCCESS_PAY_INPROCESS")    //返回支付处理中,需要进行轮询
                                {
                                    //此处立马返回
                                    OrderF2F.Trade_no = trade_no;
                                    Entity.SaveChanges();
                                }
                                else
                                {
                                    AliPayApi Api = new AliPayApi();
                                    Api.AlipayCancel(Orders.TNum, Submit.pid, Submit.key);    //交易异常,取消交易

                                    Orders.TState       = 0;
                                    OrderF2F.OrderState = 0;
                                    Entity.SaveChanges();
                                }
                            }
                            else
                            {
                                Orders.TState       = 0;
                                OrderF2F.OrderState = 0;
                                Entity.SaveChanges();
                            }
                        }
                        catch (Exception Ex)
                        {
                            //Utils.WriteLog(Ex.ToString());
                            Orders.TState       = 0;
                            OrderF2F.OrderState = 0;
                            Entity.SaveChanges();
                        }
                        #endregion
                    }
                    if (AlipayVer == "2.0")
                    {
                        #region 2.0新接口

                        ALF2FPAY ALF2FPAY = new ALF2FPAY();
                        ALF2FPAY.pid   = PayConfigArr[0];
                        ALF2FPAY.appId = PayConfigArr[2];
                        IAopClient    client = new DefaultAopClient(ALF2FPAY.serverUrl, ALF2FPAY.appId, ALF2FPAY.merchant_private_key, "json", ALF2FPAY.version, ALF2FPAY.sign_type, ALF2FPAY.alipay_public_key, ALF2FPAY.charset);
                        StringBuilder sb     = new StringBuilder();
                        sb.Append("{\"out_trade_no\":\"" + OrderF2F.OId + "\",");
                        sb.Append("\"scene\":\"bar_code\",");
                        sb.Append("\"auth_code\":\"" + OrderF2F.PayId + "\",");
                        sb.Append("\"total_amount\":\"" + OrderF2F.Amoney.ToMoney() + "\",");
                        sb.Append("\"subject\":\"" + Orders.TName + ":" + OrderF2F.OId + "\",");
                        string expire_time = System.DateTime.Now.AddMinutes(30).ToString("yyyy-MM-dd HH:mm:ss");
                        sb.Append("\"time_expire\":\"" + expire_time + "\"}");
                        AlipayTradePayRequest payRequst = new AlipayTradePayRequest();
                        payRequst.BizContent = sb.ToString();
                        Dictionary <string, string> paramsDict  = (Dictionary <string, string>)payRequst.GetParameters();
                        AlipayTradePayResponse      payResponse = client.Execute(payRequst);
                        if (payResponse != null)
                        {
                            payResponse.SaveLog(Entity);    //保存记录

                            switch (payResponse.Code)
                            {
                            case "10000":        //成功
                                OrderF2F.Trade_no = payResponse.TradeNo;
                                Entity.SaveChanges();
                                Orders = Orders.PaySuccess(Entity);
                                break;

                            case "10003":        //返回支付处理中,需要进行轮询
                                OrderF2F.Trade_no = payResponse.TradeNo;
                                Entity.SaveChanges();
                                break;

                            case "20000":        //交易异常,取消交易

                                string      CancelStr = "{\"out_trade_no\":\"" + Orders.TNum + "\"}";
                                ALF2FPAYObj ObjCancel = new ALF2FPAYObj();
                                ObjCancel.BizCode = CancelStr;
                                ObjCancel.Client  = client;
                                AliPayApi Api = new AliPayApi();
                                Api.AlipayCancel(ObjCancel);

                                Orders.TState       = 0;
                                OrderF2F.OrderState = 0;
                                Entity.SaveChanges();

                                break;

                            case "40004":        //返回失败
                                Orders.TState       = 0;
                                OrderF2F.OrderState = 0;
                                Entity.SaveChanges();
                                break;
                            }
                        }
                        #endregion
                    }
                    #endregion
                }

                if (PayConfig.DllName == "WeiXin")
                {
                    #region 微信调用支付
                    //初始化支付配置
                    WxPayConfig WxPayConfig  = new WxPayConfig();
                    string[]    PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' }); //接口信息 appid,mchid,key,appsecret
                    if (PayConfigArr.Length != 4 && PayConfigArr.Length != 5)
                    {
                        DataObj.OutError("9999");
                        return;
                    }
                    string ServerIp     = ConfigurationManager.AppSettings["ServerIp"].ToString();
                    string Wx_Cert_Path = ConfigurationManager.AppSettings["Wx_Cert_Path"].ToString();
                    string Wx_Cert_PWD  = ConfigurationManager.AppSettings["Wx_Cert_PWD"].ToString();
                    WxPayConfig.IP        = ServerIp;
                    WxPayConfig.APPID     = PayConfigArr[0];
                    WxPayConfig.MCHID     = PayConfigArr[1];
                    WxPayConfig.KEY       = PayConfigArr[2];
                    WxPayConfig.APPSECRET = PayConfigArr[3];
                    if (PayConfigArr.Length == 5)
                    {
                        WxPayConfig.SubMCHID = PayConfigArr[4];
                    }
                    WxPayConfig.SSLCERT_PATH     = Wx_Cert_Path;
                    WxPayConfig.SSLCERT_PASSWORD = Wx_Cert_PWD;
                    //支付配置结束

                    WxPayData data = new WxPayData();
                    data.SetValue("auth_code", OrderF2F.PayId);               //授权码
                    data.SetValue("body", Orders.TName + ":" + OrderF2F.OId); //商品描述

                    string total_fee = (OrderF2F.Amoney * 100).ToString("F0");

                    data.SetValue("total_fee", total_fee);                       //总金额
                    data.SetValue("out_trade_no", OrderF2F.OId);                 //产生随机的商户订单号

                    WxPayData result = WxPayApi.Micropay(data, WxPayConfig, 10); //提交被扫支付,接收返回结果
                    result.SaveLog(Entity);

                    if (!result.IsSet("return_code") || result.GetValue("return_code").ToString() == "FAIL")
                    {    //支付失败
                        Orders.TState       = 0;
                        OrderF2F.OrderState = 0;
                        Entity.SaveChanges();
                    }
                    else
                    {
                        if (!result.CheckSign(WxPayConfig.KEY))
                        {    //签名失败,取消订单
                            Orders.TState       = 0;
                            OrderF2F.OrderState = 0;
                            Entity.SaveChanges();
                        }
                        else
                        {
                            if (result.GetValue("return_code").ToString() == "SUCCESS" && result.GetValue("result_code").ToString() == "SUCCESS")
                            {    //直接支付成功
                                OrderF2F.Trade_no = result.GetValue("transaction_id").ToString();
                                Entity.SaveChanges();
                                Orders = Orders.PaySuccess(Entity);
                            }
                            else
                            {
                                if (result.GetValue("err_code").ToString() != "USERPAYING" && result.GetValue("err_code").ToString() != "SYSTEMERROR")
                                {    //业务明确失败
                                    Orders.TState       = 0;
                                    OrderF2F.OrderState = 0;
                                    Entity.SaveChanges();
                                }
                                else
                                {     //需要查单
                                }
                            }
                        }
                    }
                    #endregion
                }

                #region 提交好付
                if (PayConfig.DllName == "HFAliPay" || PayConfig.DllName == "HFWeiXin")
                {
                    string NoticeUrl = "";
                    string Action    = "";
                    if (PayConfig.DllName == "HFAliPay")
                    {
                        NoticeUrl = NoticePath + "/PayCenter/HFAliPay/Notice.html";
                        Action    = "AliCode";
                    }
                    if (PayConfig.DllName == "HFWeiXin")
                    {
                        NoticeUrl = NoticePath + "/PayCenter/HFWeiXin/Notice.html";
                        Action    = "WxCode";
                    }
                    string[] PayConfigArr = PayConfig.QueryArray.Split(',');
                    if (PayConfigArr.Length != 3)
                    {
                        DataObj.OutError("1000");
                        return;
                    }
                    //提交结算中心
                    string merId    = PayConfigArr[0]; //商户号
                    string merKey   = PayConfigArr[1]; //商户密钥
                    string JsPayWay = PayConfigArr[2]; //绑定通道

                    string  orderId    = Orders.TNum;  //商户流水号
                    decimal money      = Orders.Amoney * 100;
                    long    intmoney   = Int64.Parse(money.ToString("F0"));
                    string  OrderMoney = intmoney.ToString();//金额,以分为单

                    string PostJson = "{\"action\":\"" + Action + "\",\"txnamt\":\"" + OrderMoney + "\",\"merid\":\"" + merId + "\",\"payway\":\"" + JsPayWay + "\",\"orderid\":\"" + orderId + "\",\"backurl\":\"" + NoticeUrl + "\",\"code\":\"" + OrderF2F.PayId + "\"}";

                    string DataBase64 = LokFuEncode.Base64Encode(PostJson, "utf-8");
                    string Sign       = (DataBase64 + merKey).GetMD5();

                    DataBase64 = HttpUtility.UrlEncode(DataBase64);
                    string PostData = string.Format("req={0}&sign={1}", DataBase64, Sign);

                    string HF_Url = "https://api.zhifujiekou.com/api/mpgateway";

                    string Ret = Utils.PostRequest(HF_Url, PostData, "utf-8");

                    JObject JS = new JObject();
                    try
                    {
                        JS = (JObject)JsonConvert.DeserializeObject(Ret);
                    }
                    catch (Exception Ex)
                    {
                        Log.Write("[Order_HF]:", "【Ret】" + Ret, Ex);
                    }
                    if (JS == null)
                    {
                        DataObj.OutError("1000");
                        return;
                    }
                    string resp = JS["resp"].ToString();
                    Ret = LokFuEncode.Base64Decode(resp, "utf-8");
                    try
                    {
                        JS = (JObject)JsonConvert.DeserializeObject(Ret);
                    }
                    catch (Exception Ex)
                    {
                        Log.Write("[Order_HF]:", "【Ret2】" + Ret, Ex);
                    }
                    if (JS == null)
                    {
                        DataObj.OutError("1000");
                        return;
                    }
                    string respcode = JS["respcode"].ToString();
                    if (respcode != "00")
                    {
                        string respmsg = JS["respmsg"].ToString();
                        DataObj.OutError("1000");
                        Utils.WriteLog("[Order_HF_Err]:【" + respcode + "】" + respmsg, "orderface");
                        return;
                    }
                }
                #endregion

                DataObj.Data = Orders.OutJson();
                DataObj.Code = "0000";
                DataObj.OutString();
            }
            if (OrderF2F.Action == "GET")//获取订交易信息
            {
                //开始处理参数
                if (OrderF2F.OId.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
                Orders Orders = Entity.Orders.FirstOrDefault(n => n.TNum == OrderF2F.OId && n.UId == baseUsers.Id);
                if (Orders == null)
                {
                    DataObj.OutError("1000");
                    return;
                }
                OrderF2F  Orderf2f  = Entity.OrderF2F.FirstOrDefault(n => n.OId == OrderF2F.OId && n.UId == baseUsers.Id);
                PayConfig PayConfig = Entity.PayConfig.FirstOrNew(n => n.Id == Orders.PayWay);
                if (Orders.TState == 1 && Orders.PayState == 0)
                {
                    if (PayConfig.DllName == "AliPay")
                    {
                        #region 支付宝处理
                        string[] PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' });    //接口信息 商户号,密钥,APPId
                        if (PayConfigArr.Length != 3)
                        {
                            DataObj.OutError("9999");
                            return;
                        }
                        if (AlipayVer == "1.0")
                        {
                            #region 1.0老接口
                            string pid        = PayConfigArr[0];
                            string key        = PayConfigArr[1];
                            int    queryTimes = 10; //查询次数计数器
                            int    Run        = 0;
                            while (queryTimes > 0 && Run != 1)
                            {
                                AliPayApi Api        = new AliPayApi();
                                int       succResult = Api.AliPayQuery(Orderf2f.OId, pid, key);
                                //如果需要继续查询,则等待2s后继续
                                if (succResult == 2)
                                {
                                    //Thread.Sleep(5000);
                                    //continue;
                                    Run = 1;    //跳出循环,20160420
                                }
                                //查询成功,返回订单查询接口返回的数据
                                else if (succResult == 1)
                                {
                                    Orders = Orders.PaySuccess(Entity);
                                    Run    = 1;
                                }
                                //订单交易失败
                                else
                                {
                                    Orders.TState       = 0;
                                    Orderf2f.OrderState = 0;
                                    Entity.SaveChanges();
                                }
                                queryTimes--;
                            }
                            #endregion
                        }
                        if (AlipayVer == "2.0")
                        {
                            #region 2.0新接口
                            ALF2FPAY ALF2FPAY = new ALF2FPAY();
                            ALF2FPAY.pid   = PayConfigArr[0];
                            ALF2FPAY.appId = PayConfigArr[2];

                            IAopClient client = new DefaultAopClient(ALF2FPAY.serverUrl, ALF2FPAY.appId, ALF2FPAY.merchant_private_key, "json", ALF2FPAY.version, ALF2FPAY.sign_type, ALF2FPAY.alipay_public_key, ALF2FPAY.charset);

                            string      QueryStr = "{\"out_trade_no\":\"" + Orders.TNum + "\"}";
                            ALF2FPAYObj ObjQuery = new ALF2FPAYObj();
                            ObjQuery.BizCode = QueryStr;
                            ObjQuery.Client  = client;
                            ObjQuery.Entity  = Entity;
                            AliPayApi Api = new AliPayApi();
                            AlipayTradeQueryResponse queryResponse = Api.LoopAlipayQuery(ObjQuery);
                            if (queryResponse != null)
                            {
                                if (queryResponse.Code == "10000")
                                {
                                    if (queryResponse.TradeStatus == "TRADE_FINISHED" || queryResponse.TradeStatus == "TRADE_SUCCESS")
                                    {
                                        Orders = Orders.PaySuccess(Entity);
                                    }
                                }
                            }
                            #endregion
                        }

                        #endregion
                    }
                    if (PayConfig.DllName == "WeiXin")
                    {
                        #region 微信处理
                        //初始化支付配置
                        WxPayConfig WxPayConfig  = new WxPayConfig();
                        string[]    PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' }); //接口信息 appid,mchid,key,appsecret
                        if (PayConfigArr.Length != 4 && PayConfigArr.Length != 5)
                        {
                            DataObj.OutError("9999");
                            return;
                        }
                        string ServerIp     = ConfigurationManager.AppSettings["ServerIp"].ToString();
                        string Wx_Cert_Path = ConfigurationManager.AppSettings["Wx_Cert_Path"].ToString();
                        string Wx_Cert_PWD  = ConfigurationManager.AppSettings["Wx_Cert_PWD"].ToString();
                        WxPayConfig.IP        = ServerIp;
                        WxPayConfig.APPID     = PayConfigArr[0];
                        WxPayConfig.MCHID     = PayConfigArr[1];
                        WxPayConfig.KEY       = PayConfigArr[2];
                        WxPayConfig.APPSECRET = PayConfigArr[3];
                        if (PayConfigArr.Length == 5)
                        {
                            WxPayConfig.SubMCHID = PayConfigArr[4];
                        }
                        WxPayConfig.SSLCERT_PATH     = Wx_Cert_Path;
                        WxPayConfig.SSLCERT_PASSWORD = Wx_Cert_PWD;
                        //支付配置结束
                        int queryTimes = 10;    //查询次数计数器
                        int Run        = 0;
                        while (queryTimes > 0 && Run != 1)
                        {
                            int       succResult  = 0;//查询结果
                            MicroPay  MicroPay    = new MicroPay();
                            WxPayData queryResult = MicroPay.WXQuery(Orderf2f.OId, WxPayConfig, Entity, out succResult);
                            //如果需要继续查询,则等待2s后继续
                            if (succResult == 2)
                            {
                                //Thread.Sleep(5000);
                                //continue;
                                Run = 1;    //跳出循环,20160420
                            }
                            //查询成功,返回订单查询接口返回的数据
                            else if (succResult == 1)
                            {
                                Orderf2f.Trade_no = queryResult.GetValue("transaction_id").ToString();
                                int ret = Entity.SaveChanges();
                                Orders = Orders.PaySuccess(Entity);
                                Run    = 1;
                            }
                            //订单交易失败
                            else
                            {
                                Orders.TState       = 0;
                                Orderf2f.OrderState = 0;
                                Entity.SaveChanges();
                            }
                            queryTimes--;
                        }
                        #endregion
                    }
                    if (PayConfig.DllName == "HFAliPay" || PayConfig.DllName == "HFWeiXin")
                    {
                        #region 好付处理
                        string[] QueryArr = PayConfig.QueryArray.Split(',');
                        if (QueryArr.Length == 3)
                        {
                            //提交结算中心
                            string merId      = QueryArr[0]; //商户号
                            string merKey     = QueryArr[1]; //商户密钥
                            string orderId    = Orders.TNum; //商户流水号
                            string PostJson   = "{\"merid\":\"" + merId + "\",\"orderid\":\"" + orderId + "\"}";
                            string DataBase64 = LokFuEncode.Base64Encode(PostJson, "utf-8");
                            string Sign       = (DataBase64 + merKey).GetMD5();
                            DataBase64 = HttpUtility.UrlEncode(DataBase64);
                            string PostData = string.Format("req={0}&sign={1}", DataBase64, Sign);
                            string HF_Url   = "https://api.zhifujiekou.com/api/query";
                            string Ret      = Utils.PostRequest(HF_Url, PostData, "utf-8");

                            JObject JS = new JObject();
                            try
                            {
                                JS = (JObject)JsonConvert.DeserializeObject(Ret);
                            }
                            catch (Exception Ex)
                            {
                                Log.Write("[Order_HFQuery]:", "【Ret】" + Ret, Ex);
                            }
                            if (JS == null)
                            {
                                DataObj.OutError("1000");
                                return;
                            }
                            string resp = JS["resp"].ToString();
                            Ret = LokFuEncode.Base64Decode(resp, "utf-8");
                            try
                            {
                                JS = (JObject)JsonConvert.DeserializeObject(Ret);
                            }
                            catch (Exception Ex)
                            {
                                Log.Write("[Order_HFQuery]:", "【Ret2】" + Ret, Ex);
                            }
                            if (JS == null)
                            {
                                DataObj.OutError("1000");
                                return;
                            }
                            string respcode = JS["respcode"].ToString();
                            if (respcode != "00")
                            {
                                string respmsg = JS["respmsg"].ToString();
                                DataObj.OutError("1000");
                                Utils.WriteLog("[Order_HFQuery_Err]:【" + respcode + "】" + respmsg, "orderface");
                                return;
                            }
                            string resultcode = JS["resultcode"].ToString();
                            if (resultcode == "0000" || resultcode == "1002" || resultcode == "1004")
                            {
                                string txnamt    = JS["txnamt"].ToString();
                                int    factmoney = int.Parse(txnamt);
                                if (((int)(Orders.Amoney * 100)) == factmoney)
                                {
                                    Orders = Orders.PaySuccess(Entity);
                                }
                            }
                        }
                        #endregion
                    }
                }
                DataObj.Data = Orders.OutJson();
                DataObj.Code = "0000";
                DataObj.OutString();
            }
            if (OrderF2F.Action == "Cancel")//取消交易
            {
                //开始处理参数
                if (OrderF2F.OId.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
                Orders Orders = Entity.Orders.FirstOrDefault(n => n.TNum == OrderF2F.OId && n.UId == baseUsers.Id);
                if (Orders == null)
                {
                    DataObj.OutError("1000");
                    return;
                }
                OrderF2F Orderf2f = Entity.OrderF2F.FirstOrDefault(n => n.OId == OrderF2F.OId && n.UId == baseUsers.Id);
                if (Orders.TState == 1 && Orders.PayState == 0)
                {
                    PayConfig PayConfig = Entity.PayConfig.FirstOrNew(n => n.Id == Orders.PayWay);
                    if (PayConfig.DllName == "AliPay")
                    {
                        #region 支付宝处理
                        string[] PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' });    //接口信息 商户号,密钥,支付宝号
                        if (PayConfigArr.Length != 3)
                        {
                            DataObj.OutError("9999");
                            return;
                        }
                        if (AlipayVer == "1.0")
                        {
                            #region 1.0老接口
                            string    pid = PayConfigArr[0];
                            string    key = PayConfigArr[1];
                            AliPayApi Api = new AliPayApi();
                            Api.AlipayCancel(Orders.TNum, pid, key);
                            #endregion
                        }
                        if (AlipayVer == "2.0")
                        {
                            #region 2.0新接口
                            ALF2FPAY ALF2FPAY = new ALF2FPAY();
                            ALF2FPAY.pid   = PayConfigArr[0];
                            ALF2FPAY.appId = PayConfigArr[2];
                            IAopClient  client    = new DefaultAopClient(ALF2FPAY.serverUrl, ALF2FPAY.appId, ALF2FPAY.merchant_private_key, "json", ALF2FPAY.version, ALF2FPAY.sign_type, ALF2FPAY.alipay_public_key, ALF2FPAY.charset);
                            string      CancelStr = "{\"out_trade_no\":\"" + Orders.TNum + "\"}";
                            ALF2FPAYObj ObjCancel = new ALF2FPAYObj();
                            ObjCancel.BizCode = CancelStr;
                            ObjCancel.Client  = client;
                            ObjCancel.Entity  = Entity;
                            AliPayApi Api = new AliPayApi();
                            Api.AlipayCancel(ObjCancel);
                            #endregion
                        }
                        #endregion
                    }
                    if (PayConfig.DllName == "WeiXin")
                    {
                        #region 微信处理
                        //初始化支付配置
                        WxPayConfig WxPayConfig  = new WxPayConfig();
                        string[]    PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' }); //接口信息 appid,mchid,key,appsecret
                        if (PayConfigArr.Length != 4 && PayConfigArr.Length != 5)
                        {
                            DataObj.OutError("9999");
                            return;
                        }
                        string ServerIp     = ConfigurationManager.AppSettings["ServerIp"].ToString();
                        string Wx_Cert_Path = ConfigurationManager.AppSettings["Wx_Cert_Path"].ToString();
                        string Wx_Cert_PWD  = ConfigurationManager.AppSettings["Wx_Cert_PWD"].ToString();
                        WxPayConfig.IP        = ServerIp;
                        WxPayConfig.APPID     = PayConfigArr[0];
                        WxPayConfig.MCHID     = PayConfigArr[1];
                        WxPayConfig.KEY       = PayConfigArr[2];
                        WxPayConfig.APPSECRET = PayConfigArr[3];
                        if (PayConfigArr.Length == 5)
                        {
                            WxPayConfig.SubMCHID = PayConfigArr[4];
                        }
                        WxPayConfig.SSLCERT_PATH     = Wx_Cert_Path;
                        WxPayConfig.SSLCERT_PASSWORD = Wx_Cert_PWD;
                        //支付配置结束
                        MicroPay MicroPay = new MicroPay();
                        MicroPay.WXCancel(OrderF2F.OId, WxPayConfig, Entity);    //取消订单,重试10次
                        #endregion
                    }
                    if (PayConfig.DllName == "HFAliPay" || PayConfig.DllName == "HFWeiXin")
                    {
                        #region 好付处理
                        string[] QueryArr = PayConfig.QueryArray.Split(',');
                        if (QueryArr.Length == 3)
                        {
                            //提交结算中心
                            string merId      = QueryArr[0]; //商户号
                            string merKey     = QueryArr[1]; //商户密钥
                            string orderId    = Orders.TNum; //商户流水号
                            string PostJson   = "{\"merid\":\"" + merId + "\",\"orderid\":\"" + orderId + "\"}";
                            string DataBase64 = LokFuEncode.Base64Encode(PostJson, "utf-8");
                            string Sign       = (DataBase64 + merKey).GetMD5();
                            DataBase64 = HttpUtility.UrlEncode(DataBase64);
                            string PostData = string.Format("req={0}&sign={1}", DataBase64, Sign);
                            string HF_Url   = "https://api.zhifujiekou.com/api/cancel";
                            string Ret      = Utils.PostRequest(HF_Url, PostData, "utf-8");

                            JObject JS = new JObject();
                            try
                            {
                                JS = (JObject)JsonConvert.DeserializeObject(Ret);
                            }
                            catch (Exception Ex)
                            {
                                Log.Write("[Order_HFCancel]:", "【Ret】" + Ret, Ex);
                            }
                            if (JS == null)
                            {
                                DataObj.OutError("1000");
                                return;
                            }
                            string resp = JS["resp"].ToString();
                            Ret = LokFuEncode.Base64Decode(resp, "utf-8");
                            try
                            {
                                JS = (JObject)JsonConvert.DeserializeObject(Ret);
                            }
                            catch (Exception Ex)
                            {
                                Log.Write("[Order_HFCancel]:", "【Ret2】" + Ret, Ex);
                            }
                            if (JS == null)
                            {
                                DataObj.OutError("1000");
                                return;
                            }
                            string respcode = JS["respcode"].ToString();
                            if (respcode != "00")
                            {
                                string respmsg = JS["respmsg"].ToString();
                                DataObj.OutError("1000");
                                Utils.WriteLog("[Order_HFQuery_Err]:【" + respcode + "】" + respmsg, "orderface");
                                return;
                            }
                        }
                        #endregion
                    }
                    Orders.TState       = 0;
                    Orderf2f.OrderState = 0;
                    Entity.SaveChanges();
                }
                DataObj.Data = Orders.OutJson();
                DataObj.Code = "0000";
                DataObj.OutString();
            }
        }
Ejemplo n.º 18
0
        private void GetZfb()
        {
            IAopClient            client  = new DefaultAopClient("https://openapi.alipay.com/gateway.do", "app_id", "merchant_private_key", "json", "RSA", "alipay_public_key", "GBK");
            AlipayTradePayRequest request = new AlipayTradePayRequest();

            request.BizContent = "{" +
                                 "    \"out_trade_no\":\"20150320010101001\"," +
                                 "    \"scene\":\"bar_code,wave_code\"," +
                                 "    \"auth_code\":\"28763443825664394\"," +
                                 "    \"subject\":\"Iphone6 16G\"," +
                                 "    \"seller_id\":\"2088102146225135\"," +
                                 "    \"total_amount\":88.88," +
                                 "    \"discountable_amount\":8.88," +
                                 "    \"undiscountable_amount\":80.00," +
                                 "    \"body\":\"Iphone6 16G\"," +
                                 "      \"goods_detail\":[{" +
                                 "                \"goods_id\":\"apple-01\"," +
                                 "        \"alipay_goods_id\":\"20010001\"," +
                                 "        \"goods_name\":\"ipad\"," +
                                 "        \"quantity\":1," +
                                 "        \"price\":2000," +
                                 "        \"goods_category\":\"34543238\"," +
                                 "        \"body\":\"特价手机\"," +
                                 "        \"show_url\":\"http://www.alipay.com/xxx.jpg\"" +
                                 "        }]," +
                                 "    \"operator_id\":\"yx_001\"," +
                                 "    \"store_id\":\"NJ_001\"," +
                                 "    \"terminal_id\":\"NJ_T_001\"," +
                                 "    \"alipay_store_id\":\"2016041400077000000003314986\"," +
                                 "    \"extend_params\":{" +
                                 "      \"sys_service_provider_id\":\"2088511833207846\"," +
                                 "      \"hb_fq_num\":\"3\"," +
                                 "      \"hb_fq_seller_percent\":\"100\"" +
                                 "    }," +
                                 "    \"timeout_express\":\"90m\"," +
                                 "    \"royalty_info\":{" +
                                 "      \"royalty_type\":\"ROYALTY\"," +
                                 "        \"royalty_detail_infos\":[{" +
                                 "                    \"serial_no\":1," +
                                 "          \"trans_in_type\":\"userId\"," +
                                 "          \"batch_no\":\"123\"," +
                                 "          \"out_relation_id\":\"20131124001\"," +
                                 "          \"trans_out_type\":\"userId\"," +
                                 "          \"trans_out\":\"2088101126765726\"," +
                                 "          \"trans_in\":\"2088101126708402\"," +
                                 "          \"amount\":0.1," +
                                 "          \"desc\":\"分账测试1\"," +
                                 "          \"amount_percentage\":\"100\"" +
                                 "          }]" +
                                 "    }," +
                                 "    \"sub_merchant\":{" +
                                 "      \"merchant_id\":\"19023454\"" +
                                 "    }" +
                                 "  }";
            AlipayTradePayResponse response = client.Execute(request);

            if (!response.IsError)
            {
                Console.WriteLine("调用成功");
            }
            else
            {
                Console.WriteLine("调用失败");
            }
        }
Ejemplo n.º 19
0
        public ActionResult MicroPay(int?CompanyId, string storeId, string autoCode, string paySN, decimal totalPrice)
        {
            var op = new OpResult();
            AlipayTradePayResponse payResponse = null;

            try
            {
                var setting = paySetBLL.GetPaymentSettingBystoreId(1, storeId, CompanyId);
                client = new DefaultAopClient(qrcode._2.Config.serverUrl, setting.AppId, qrcode._2.Config.merchant_private_key, "", qrcode._2.Config.version,
                                              qrcode._2.Config.sign_type, qrcode._2.Config.alipay_public_key, qrcode._2.Config.charset);
                var           orderno = qrcode.wx.WxPayApi.GenerateOutTradeNo(setting.AppId);
                StringBuilder sb      = new StringBuilder();
                sb.Append("{\"out_trade_no\":\"" + orderno + "\",");
                sb.Append("\"scene\":\"bar_code\",");
                sb.Append("\"auth_code\":\"" + autoCode + "\",");
                sb.Append("\"total_amount\":\"" + totalPrice + "\",\"discountable_amount\":\"0.00\",");
                sb.Append("\"subject\":\"订单编号 " + paySN + "\",\"body\":\"\",");
                string expire_time = System.DateTime.Now.AddHours(1).ToString("yyyy-MM-dd HH:mm:ss");
                sb.Append("\"time_expire\":\"" + expire_time + "\"}");
                AlipayTradePayRequest payRequst = new AlipayTradePayRequest();
                payRequst.BizContent = sb.ToString();

                Dictionary <string, string> paramsDict = (Dictionary <string, string>)payRequst.GetParameters();
                payResponse = client.Execute(payRequst);
                switch (payResponse.Code)
                {
                case qrcode._2.ResultCode.SUCCESS:
                    op.Message   = payResponse.TradeNo;
                    op.Successed = true;
                    break;

                case qrcode._2.ResultCode.INRROCESS:
                    StringBuilder sb1 = new StringBuilder();
                    sb1.Append("{\"out_trade_no\":\"" + orderno + "\"}");

                    //返回支付处理中,需要进行轮询
                    AlipayTradeQueryResponse queryResponse = LoopQuery(sb1.ToString());
                    if (queryResponse != null)
                    {
                        op.Message   = queryResponse.TradeNo;
                        op.Successed = true;
                    }
                    else
                    {
                        var cancel1 = Cancel(sb1.ToString());
                        op.Message = cancel1.Code == qrcode._2.ResultCode.SUCCESS ? "订单支付失败,已撤销!" : (cancel1.SubMsg ?? cancel1.Msg);
                    }
                    break;

                case qrcode._2.ResultCode.FAIL:
                    StringBuilder sb2 = new StringBuilder();
                    sb2.Append("{\"out_trade_no\":\"" + orderno + "\"}");
                    Cancel(sb2.ToString());    //不撤销防止同订单号时产生退款
                    op.Message = payResponse.SubMsg ?? payResponse.Msg;
                    break;

                default:
                    op.Message = payResponse.SubMsg ?? payResponse.Msg;
                    break;
                }
            }
            catch (Exception ex)
            {
                op.Message = ex.Message;
                new Sys.LogEngine().WriteError("支付宝当面付失败!" + payResponse.Body, ex);
            }
            Pharos.Component.qrcode.Log.Debug(this.GetType().Name, "支付宝当面付,返回结果:" + payResponse.Body);
            return(new JsonNetResult(op));
        }
Ejemplo n.º 20
0
        public AlipayF2FPayResult tradePay(AlipayTradePayContentBuilder builder)
        {
            AlipayF2FPayResult payResult = new AlipayF2FPayResult();

            try
            {
                AlipayTradePayRequest payRequest = new AlipayTradePayRequest();
                payRequest.BizContent = builder.BuildJson();
                AlipayTradePayResponse payResponse = client.Execute(payRequest);

                //payRequest.SetBizModel("");

                if (payResponse != null)
                {
                    switch (payResponse.Code)
                    {
                    case ResultCode.SUCCESS:
                        break;

                    //返回支付处理中,需要进行轮询
                    case ResultCode.INRROCESS:

                        AlipayTradeQueryResponse queryResponse = LoopQuery(builder.out_trade_no, 10, 3000);       //用订单号trade_no进行轮询也是可以的。
                        //轮询结束后还是支付处理中,需要调撤销接口
                        if (queryResponse != null)
                        {
                            if (queryResponse.TradeStatus == "WAIT_BUYER_PAY")
                            {
                                CancelAndRetry(builder.out_trade_no);
                                payResponse.Code = ResultCode.FAIL;
                            }
                            payResponse = toTradePayResponse(queryResponse);
                        }
                        break;

                    //明确返回业务失败
                    case ResultCode.FAIL:
                        break;

                    //返回系统异常,需要调用一次查询接口,没有返回支付成功的话调用撤销接口撤销交易
                    case ResultCode.ERROR:

                        AlipayTradeQueryResponse queryResponse2 = sendTradeQuery(builder.out_trade_no);

                        if (queryResponse2 != null)
                        {
                            if (queryResponse2.TradeStatus == TradeStatus.WAIT_BUYER_PAY)
                            {
                                AlipayTradeCancelResponse cancelResponse = CancelAndRetry(builder.out_trade_no);
                                payResponse.Code = ResultCode.FAIL;
                            }

                            payResponse = toTradePayResponse(queryResponse2);
                        }
                        break;

                    default:
                        payResult.response = payResponse;
                        break;
                    }
                    payResult.response = payResponse;
                    return(payResult);
                }
                else
                {
                    AlipayTradeQueryResponse queryResponse3 = sendTradeQuery(builder.out_trade_no);
                    if (queryResponse3 != null)
                    {
                        if (queryResponse3.TradeStatus == TradeStatus.WAIT_BUYER_PAY)
                        {
                            AlipayTradeCancelResponse cancelResponse = CancelAndRetry(builder.out_trade_no);
                            payResponse.Code = ResultCode.FAIL;
                        }
                        payResponse = toTradePayResponse(queryResponse3);
                    }
                    payResult.response = payResponse;
                    return(payResult);
                }
                //return payResult;
            }
            catch (Exception e)
            {
                AlipayTradePayResponse payResponse = new AlipayTradePayResponse();
                payResponse.Code   = ResultCode.FAIL;
                payResponse.Body   = e.Message;
                payResult.response = payResponse;
                return(payResult);
            }
        }
Ejemplo n.º 21
0
        /// <summary>
        /// 直接付款,适合条码支付
        /// </summary>
        /// <param name="parameter"></param>
        public virtual string StartPay(PayParameter parameter)
        {
            if (parameter.AuthCode.IsNullOrEmpty())
            {
                throw new Exception("条码为空");
            }
            if (parameter.TradeID.IsNullOrEmpty())
            {
                throw new Exception("交易编号为空");
            }


            try
            {
                Config config = new Config(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.AlipayBarcode, parameter.TradeID));


                //创建提交的内容
                AlipayTradePayContentBuilder builder = BuildPayContent(config, parameter);
                var client = config.AppConfig.CreateAopClient();
                AlipayTradePayRequest payRequest = new AlipayTradePayRequest();
                payRequest.BizContent = builder.BuildJson();

                AlipayTradePayResponse payResponse = client.Execute(payRequest);

                PayFactory.OnLog(parameter.TradeID, payResponse.Body);

                string[] errorCodes = new string[] { "20000", "20001", "40001", "40002", "40003", "40004", "40006" };//明确一定是错误的代码

                if (errorCodes.Contains(payResponse.Code))
                {
                    PayFactory.OnPayFailed(parameter.TradeID, payResponse.SubMsg, payResponse.Body);
                }
                else if (payResponse.Code == ResultCode.SUCCESS)
                {
                    PayFactory.OnPaySuccessed(parameter.TradeID, payResponse.Body);
                }
                else
                {
                    //到这里,不能确定支付结果,循环30秒确定
                    int checkTimes = parameter.Timeout / 2;
                    Thread.Sleep(1000);
                    for (int i = 0; i < checkTimes; i++)
                    {
                        if (checkPayStateByConfig(parameter, config))
                        {
                            break;
                        }
                        if (i + 1 == checkTimes)
                        {
                            break;
                        }
                        Thread.Sleep(2000);
                    }
                }
            }
            catch (Exception ex)
            {
            }

            return(null);
        }