/// <summary> /// 构造支付宝条码支付请求数据 /// </summary> /// <returns>请求数据集</returns> public AlipayTradePayContentBuilder BuildPayContent(Flw_Order order, decimal amount, string subject, string authcode) { //扫码枪扫描到的用户手机钱包中的付款条码 AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder(); //收款账号 builder.seller_id = AliPayConfig.pid; //订单编号 builder.out_trade_no = order.OrderID; //支付场景,无需修改 builder.scene = "bar_code"; //支付授权码,付款码 builder.auth_code = authcode; //订单总金额 builder.total_amount = amount.ToString("0.00"); //参与优惠计算的金额 //builder.discountable_amount = ""; //不参与优惠计算的金额 //builder.undiscountable_amount = ""; //订单名称 builder.subject = subject; //自定义超时时间 builder.timeout_express = "2m"; //订单描述 builder.body = order.Note; //门店编号,很重要的参数,可以用作之后的营销 builder.store_id = order.StoreID; //操作员编号,很重要的参数,可以用作之后的营销 builder.operator_id = order.AuthorID == null ? "" : order.AuthorID.Value.ToString(); ////传入商品信息详情 //List<GoodsInfo> gList = new List<GoodsInfo>(); //GoodsInfo goods = new GoodsInfo(); //goods.goods_id = "304"; //goods.goods_name = "goods#name"; //goods.price = "0.01"; //goods.quantity = "1"; //gList.Add(goods); //builder.goods_detail = gList; //系统商接入可以填此参数用作返佣 //ExtendParams exParam = new ExtendParams(); //exParam.sysServiceProviderId = "20880000000000"; //builder.extendParams = exParam; return(builder); }
/// <summary> /// 对支付宝异步通知的关键参数进行校验 /// </summary> /// <returns></returns> private bool CheckParams() { //获得商户订单号out_trade_no string out_trade_no = Request.Form["out_trade_no"]; //判断通知数据中的out_trade_no是否为商户系统中创建的订单号 Flw_Order order = Flw_OrderBusiness.GetOrderModel(out_trade_no); if (order == null) { return(false); } // ****订单金额校验放在回调业务处理中去,因为当支付金额异常时要对订单进行异常标记**** ////获得支付总金额total_amount //string total_amount = Request.Form["total_amount"]; //// 判断total_amount是否确实为该订单的实际金额 //decimal PayCount = order.PayCount != null ? (decimal)order.PayCount : 0; //应付金额 //decimal FreePay = order.FreePay != null ? (decimal)order.FreePay : 0; //减免金额 //decimal payAmount = PayCount - FreePay; //实际应支付金额 //decimal amount = Convert.ToDecimal(total_amount); ////如果实际应支付金额不等于支付宝通知中的金额,就返回校验失败 //if (payAmount != amount) //{ // return false; //} //获得卖家账号seller_email string seller_id = Request.Form["seller_id"].Trim(); // 验证通知中的seller_email(或者seller_id) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id / seller_email) if (AliPayConfig.pid.Trim() != seller_id) { return(false); } //获得调用方的appid; //如果是非授权模式,appid是商户的appid;如果是授权模式(token调用),appid是系统商的appid string app_id = Request.Form["app_id"]; // 验证app_id是否是调用方的appid if (AliPayConfig.appId.Trim() != app_id) { return(false); } //验证上述四个参数,完全吻合则返回参数校验成功 return(true); }
/** * 生成直接支付url,支付url有效期为2小时,模式二 * @param productId 商品ID * @return 模式二URL */ public WxPayData GetPayUrl(Flw_Order order, decimal amount, string subject) { WxPayData data = new WxPayData(); data.SetValue("body", subject); //商品描述 data.SetValue("attach", order.Note); //附加数据 data.SetValue("out_trade_no", order.OrderID); //订单号 //data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());//订单号 data.SetValue("total_fee", Convert.ToInt32(amount * 100)); //总金额,单位:分 data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss")); //交易起始时间 data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss")); //交易结束时间 data.SetValue("goods_tag", order.ID.ToString()); //商品标记 data.SetValue("trade_type", "NATIVE"); //交易类型 data.SetValue("product_id", order.OrderID); //商品ID,商户自定义 WxPayData result = WxPayApi.UnifiedOrder(data); //调用统一下单接口 //qr_url = result.GetValue("code_url").ToString();//获得统一下单接口返回的二维码链接 return(result); }
public object getOrderPayState(Dictionary <string, object> dicParas) { try { string OrderId = dicParas.ContainsKey("orderId") ? dicParas["orderId"].ToString().Trim() : string.Empty; string UserToken = dicParas.ContainsKey("userToken") ? dicParas["userToken"].ToString() : string.Empty; if (string.IsNullOrEmpty(UserToken)) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "用户token无效")); } var list = XCCloudUserTokenBusiness.GetUserTokenModel(UserToken); if (list == null) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "用户token无效")); } OrderPayCacheModel model = new OrderPayCacheModel(); if (OrderPayCache.IsExist(OrderId)) { model = OrderPayCache.GetValue(OrderId) as OrderPayCacheModel; } else { Flw_Order order = Flw_OrderBusiness.GetOrderModel(OrderId); if (order != null) { model.OrderId = OrderId; model.PayAmount = order.RealPay == null ? 0 : order.RealPay.Value; model.PayTime = order.PayTime == null ? "" : order.PayTime.Value.ToString("yyyy-MM-dd HH:mm:ss"); model.PayState = (OrderState)order.OrderStatus.Value; } } return(ResponseModelFactory <OrderPayCacheModel> .CreateModel(isSignKeyReturn, model)); } catch (Exception e) { throw e; } }
public object getPayQRcode(Dictionary <string, object> dicParas) { try { string errMsg = string.Empty; string orderId = dicParas.ContainsKey("orderId") ? dicParas["orderId"].ToString() : string.Empty; string strPayChannel = dicParas.ContainsKey("payChannel") ? dicParas["payChannel"].ToString() : string.Empty; string payType = dicParas.ContainsKey("payType") ? dicParas["payType"].ToString() : string.Empty; string subject = dicParas.ContainsKey("subject") ? dicParas["subject"].ToString() : string.Empty; if (string.IsNullOrWhiteSpace(orderId)) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "订单号无效")); } if (string.IsNullOrWhiteSpace(payType)) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付方式为空")); } //支付方式 PaymentChannel PayChannel = (PaymentChannel)Convert.ToInt32(payType); Flw_Order order = Flw_OrderBusiness.GetOrderModel(orderId); if (order == null) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "订单号无效")); } Base_StoreInfo store = XCCloudStoreBusiness.GetStoreModel(order.StoreID); if (store == null) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "订单所属门店无效")); } //订单减免金额 decimal freePay = order.FreePay == null ? 0 : order.FreePay.Value; //计算订单实付金额,单位:元 decimal amount = (decimal)order.PayCount - freePay; PayQRcodeModel model = new PayQRcodeModel(); model.OrderId = orderId; //SelttleType selttleType = (SelttleType)store.SelttleType.Value; SelttleType selttleType = (SelttleType)Convert.ToInt32(strPayChannel); switch (selttleType) { case SelttleType.NotThird: break; case SelttleType.AliWxPay: //微信支付宝官方通道 { #region 支付宝、微信 if (PayChannel == PaymentChannel.ALIPAY) //支付宝 { try { IAlipayTradeService serviceClient = F2FBiz.CreateClientInstance(AliPayConfig.serverUrl, AliPayConfig.appId, AliPayConfig.merchant_private_key, AliPayConfig.version, AliPayConfig.sign_type, AliPayConfig.alipay_public_key, AliPayConfig.charset); AliPayCommon alipay = new AliPayCommon(); AlipayTradePrecreateContentBuilder builder = alipay.BuildPrecreateContent(order, amount, subject); //如果需要接收扫码支付异步通知,那么请把下面两行注释代替本行。 //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。 //AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder); //AliPayConfig.notify_url //商户接收异步通知的地址 AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, AliPayConfig.notify_url); switch (precreateResult.Status) { case ResultEnum.SUCCESS: model.QRcode = precreateResult.response.QrCode; break; case ResultEnum.FAILED: LogHelper.SaveLog(TxtLogType.AliPay, precreateResult.response.Body); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, precreateResult.response.Body)); case ResultEnum.UNKNOWN: if (precreateResult.response == null) { LogHelper.SaveLog(TxtLogType.AliPay, "配置或网络异常,请检查后重试"); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败")); } else { LogHelper.SaveLog(TxtLogType.AliPay, "系统异常,请更新外部订单后重新发起请求"); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败")); } } } catch (Exception e) { LogHelper.SaveLog(TxtLogType.AliPay, e.Message); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败")); } } else if (PayChannel == PaymentChannel.WXPAY) //微信 { NativePay native = new NativePay(); try { WxPayData resultData = native.GetPayUrl(order, amount, subject); if (resultData.GetValue("result_code") != null) { string resule = resultData.GetValue("result_code").ToString(); if (resule == "SUCCESS") { model.QRcode = resultData.GetValue("code_url").ToString(); //获得统一下单接口返回的二维码链接 } else { LogHelper.SaveLog(TxtLogType.WeiXinPay, resultData.GetValue("err_code_des").ToString()); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败," + resultData.GetValue("err_code_des").ToString())); } } else { LogHelper.SaveLog(TxtLogType.WeiXinPay, resultData.GetValue("return_msg").ToString()); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败," + resultData.GetValue("return_msg").ToString())); } } catch (WxPayException ex) { LogHelper.SaveLog(TxtLogType.WeiXinPay, ex.Message); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败")); } catch (Exception e) { LogHelper.SaveLog(TxtLogType.WeiXinPay, e.Message); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败")); } } #endregion } break; case SelttleType.StarPos: //新大陆 #region 新大陆 { string error = ""; PPosPayData.OrderPay pposOrder = new PPosPayData.OrderPay(); pposOrder.txnTime = System.DateTime.Now.ToString("yyyyMMddHHmmss"); pposOrder.tradeNo = order.OrderID; //pposOrder.tradeNo = Guid.NewGuid().ToString().Replace("-", ""); pposOrder.amount = Convert.ToInt32(amount * 100).ToString(); //实际付款 pposOrder.total_amount = Convert.ToInt32(amount * 100).ToString(); //订单总金额 pposOrder.subject = subject; pposOrder.payChannel = PayChannel.ToString(); PPosPayApi ppos = new PPosPayApi(); PPosPayData.OrderPayACK result = ppos.OrderPay(pposOrder, out error); if (result == null) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败," + error)); } model.QRcode = result.payCode; } break; #endregion case SelttleType.LcswPay: //扫呗 #region 扫呗 { string qrcode = ""; LcswPayDate.OrderPay payInfo = new LcswPayDate.OrderPay(); //payInfo.terminal_trace = Guid.NewGuid().ToString().Replace("-", ""); payInfo.terminal_trace = order.OrderID; payInfo.pay_type = PayChannel.ToDescription(); payInfo.order_body = subject; payInfo.total_fee = Convert.ToInt32(amount * 100).ToString(); LcswPayAPI api = new LcswPayAPI(); if (api.OrderPay(payInfo, out qrcode)) { model.QRcode = qrcode; } else { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败")); } } break; #endregion case SelttleType.DinPay: //智付 #region 智付 string errmsg = ""; DinPayData.ScanPay scanPay = new DinPayData.ScanPay(); //scanPay.order_no = order.OrderID; scanPay.order_no = Guid.NewGuid().ToString().Replace("-", ""); scanPay.order_time = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); scanPay.order_amount = amount.ToString("0.01"); scanPay.service_type = PayChannel == PaymentChannel.WXPAY ? "weixin_scan" : "alipay_scan"; scanPay.product_name = subject; scanPay.product_desc = subject; DinPayApi payApi = new DinPayApi(); string payCode = payApi.GetQRcode(scanPay, out errmsg); if (payCode == "") { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "获取支付二维码失败," + errmsg)); } model.QRcode = payCode; break; #endregion } return(ResponseModelFactory <PayQRcodeModel> .CreateModel(isSignKeyReturn, model)); } catch (Exception e) { throw e; } }
public object BarcodePay(Dictionary <string, object> dicParas) { try { string errMsg = string.Empty; string orderId = dicParas.ContainsKey("orderId") ? dicParas["orderId"].ToString() : string.Empty; string strPayChannel = dicParas.ContainsKey("payChannel") ? dicParas["payChannel"].ToString() : string.Empty; string subject = dicParas.ContainsKey("subject") ? dicParas["subject"].ToString() : string.Empty; string payType = dicParas.ContainsKey("payType") ? dicParas["payType"].ToString() : string.Empty; string authCode = dicParas.ContainsKey("authCode") ? dicParas["authCode"].ToString() : string.Empty; if (string.IsNullOrWhiteSpace(orderId)) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "订单号无效")); } if (string.IsNullOrWhiteSpace(payType)) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付方式为空")); } //支付方式 PaymentChannel PayChannel = (PaymentChannel)Convert.ToInt32(payType); Flw_Order order = Flw_OrderBusiness.GetOrderModel(orderId); if (order == null) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "订单号无效")); } Base_StoreInfo store = XCCloudStoreBusiness.GetStoreModel(order.StoreID); if (store == null) { return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "订单所属门店无效")); } //订单减免金额 decimal freePay = order.FreePay == null ? 0 : order.FreePay.Value; //计算订单实付金额,单位:元 decimal amount = (decimal)order.PayCount - freePay; BarcodePayModel model = new BarcodePayModel(); model.OrderId = orderId; //SelttleType selttleType = (SelttleType)store.SelttleType.Value; SelttleType selttleType = (SelttleType)Convert.ToInt32(strPayChannel); switch (selttleType) { case SelttleType.NotThird: break; case SelttleType.AliWxPay: //微信支付宝官方通道 { #region 微信支付宝官方通道 if (PayChannel == PaymentChannel.ALIPAY) //支付宝 { try { IAlipayTradeService serviceClient = F2FBiz.CreateClientInstance(AliPayConfig.serverUrl, AliPayConfig.appId, AliPayConfig.merchant_private_key, AliPayConfig.version, AliPayConfig.sign_type, AliPayConfig.alipay_public_key, AliPayConfig.charset); AliPayCommon alipay = new AliPayCommon(); AlipayTradePayContentBuilder builder = alipay.BuildPayContent(order, amount, subject, authCode); //string out_trade_no = builder.out_trade_no; AlipayF2FPayResult payResult = serviceClient.tradePay(builder); if (payResult.Status == ResultEnum.SUCCESS) { decimal payAmount = Convert.ToDecimal(payResult.response.TotalAmount); //支付成功后的处理 BarcodePayModel callbackModel = Flw_OrderBusiness.OrderPay(payResult.response.OutTradeNo, payAmount, selttleType); model.OrderStatus = callbackModel.OrderStatus; model.PayAmount = payAmount.ToString("0.00"); } else { LogHelper.SaveLog(TxtLogType.AliPay, payResult.response.SubMsg); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败")); } } catch (Exception e) { LogHelper.SaveLog(TxtLogType.AliPay, e.Message); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败")); } } else if (PayChannel == PaymentChannel.WXPAY) { try { MicroPay pay = new MicroPay(); WxPayData resultData = pay.BarcodePay(orderId, subject, amount, authCode); string resule = resultData.GetValue("result_code").ToString(); if (resule == "SUCCESS") { string out_trade_no = resultData.GetValue("out_trade_no").ToString(); decimal total_fee = Convert.ToDecimal(resultData.GetValue("total_fee")); decimal payAmount = total_fee / 100; //支付成功后的处理 BarcodePayModel callbackModel = Flw_OrderBusiness.OrderPay(out_trade_no, payAmount, selttleType); model.OrderStatus = callbackModel.OrderStatus; model.PayAmount = payAmount.ToString("0.00"); } else { LogHelper.SaveLog(TxtLogType.WeiXinPay, resultData.GetValue("result_code").ToString()); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败")); } } catch (WxPayException ex) { LogHelper.SaveLog(TxtLogType.WeiXinPay, ex.Message); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败")); } catch (Exception e) { LogHelper.SaveLog(TxtLogType.WeiXinPay, e.Message); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败")); } } #endregion } break; case SelttleType.StarPos: //新大陆 #region 新大陆 PPosPayData.MicroPay pposOrder = new PPosPayData.MicroPay(); //string tradeNo = Guid.NewGuid().ToString().Replace("-", ""); string tradeNo = order.OrderID; pposOrder.tradeNo = tradeNo; pposOrder.amount = Convert.ToInt32(amount * 100).ToString(); pposOrder.total_amount = Convert.ToInt32(amount * 100).ToString(); pposOrder.authCode = authCode; pposOrder.payChannel = PayChannel.ToString(); pposOrder.subject = subject; pposOrder.selOrderNo = tradeNo; pposOrder.txnTime = System.DateTime.Now.ToString("yyyyMMddHHmmss"); pposOrder.signValue = ""; string error = ""; PPosPayApi ppos = new PPosPayApi(); PPosPayData.MicroPayACK result = ppos.ScanPay(pposOrder, out error); if (result != null) { //SUCCESS string out_trade_no = result.tradeNo; decimal total_fee = Convert.ToDecimal(result.total_amount); decimal payAmount = total_fee / 100; //支付成功后的处理 BarcodePayModel callbackModel = Flw_OrderBusiness.OrderPay(out_trade_no, payAmount, selttleType); model.OrderStatus = callbackModel.OrderStatus; model.PayAmount = payAmount.ToString("0.00"); } else { LogHelper.SaveLog(TxtLogType.PPosPay, error); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败," + error)); } break; #endregion case SelttleType.LcswPay: //扫呗 #region 扫呗 LcswPayDate.TradePay tradePay = new LcswPayDate.TradePay(); tradePay.terminal_trace = order.OrderID; tradePay.pay_type = PayChannel.ToDescription(); tradePay.order_body = subject; tradePay.total_fee = Convert.ToInt32(amount * 100).ToString(); tradePay.auth_no = authCode; LcswPayAPI api = new LcswPayAPI(); LcswPayDate.OrderPayACK ack = api.BarcodePay(tradePay); if (ack != null) { if (ack.return_code == "01" && ack.result_code == "01") { string out_trade_no = ack.out_trade_no; decimal total_fee = Convert.ToDecimal(ack.total_fee); decimal payAmount = total_fee / 100; //支付成功后的处理 BarcodePayModel callbackModel = Flw_OrderBusiness.OrderPay(out_trade_no, payAmount, SelttleType.LcswPay); model.OrderStatus = callbackModel.OrderStatus; model.PayAmount = payAmount.ToString("0.00"); } } else { LogHelper.SaveLog(TxtLogType.LcswPay, "条码支付失败"); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败")); } break; #endregion case SelttleType.DinPay: //智付 #region 智付 string errmsg = ""; DinPayData.MicroPay Pay = new DinPayData.MicroPay(); //scanPay.order_no = order.OrderID; Pay.order_no = Guid.NewGuid().ToString().Replace("-", ""); Pay.order_time = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); Pay.order_amount = amount.ToString("0.01"); Pay.service_type = PayChannel == PaymentChannel.WXPAY ? "weixin_micropay" : "alipay_micropay"; Pay.product_name = subject; Pay.auth_code = authCode; //Pay.return_url = "http://106.14.174.131/returnurl.aspx"; DinPayApi payApi = new DinPayApi(); string resultXml = payApi.MicroPay(Pay); //将同步返回的xml中的参数提取出来 var el = XElement.Load(new StringReader(resultXml)); //处理码 string resp_code = el.XPathSelectElement("/response/resp_code").Value; //业务结果 string result_code = el.XPathSelectElement("/response/result_code").Value; if (resp_code == "SUCCESS" && result_code == "0") { //支付成功后的处理 string out_trade_no = el.XPathSelectElement("/response/order_no").Value; decimal total_fee = Convert.ToDecimal(el.XPathSelectElement("/response/order_amount").Value); decimal payAmount = total_fee / 100; BarcodePayModel callbackModel = Flw_OrderBusiness.OrderPay(out_trade_no, payAmount, SelttleType.DinPay); model.OrderStatus = callbackModel.OrderStatus; model.PayAmount = payAmount.ToString("0.00"); } else { errmsg = el.XPathSelectElement("/response/result_desc").Value; LogHelper.SaveLog(TxtLogType.DinPay, errmsg); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败," + errmsg)); } break; #endregion } return(ResponseModelFactory <BarcodePayModel> .CreateModel(isSignKeyReturn, model)); } catch (WxPayException ex) { LogHelper.SaveLog(TxtLogType.WeiXinPay, ex.Message); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败")); } catch (Exception e) { LogHelper.SaveLog(TxtLogType.Api, e.Message); return(ResponseModelFactory.CreateModel(isSignKeyReturn, Return_Code.T, "", Result_Code.F, "支付失败")); } }
/// <summary> /// 订单支付成功处理 /// </summary> /// <param name="orderId">订单号</param> /// <param name="amount">实际支付金额</param> /// <param name="selttleType">支付方式</param> /// <returns></returns> public static BarcodePayModel OrderPay(string orderId, decimal amount, SelttleType selttleType) { BarcodePayModel model = null; try { Flw_Order order = Flw_OrderBusiness.GetOrderModel(orderId); if (order != null) { model = new BarcodePayModel(); model.OrderId = orderId; model.PayAmount = amount.ToString("0.00"); string payTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); string StoreID = order.StoreID; decimal PayCount = order.PayCount != null ? (decimal)order.PayCount : 0; //应付金额 decimal FreePay = order.FreePay != null ? (decimal)order.FreePay : 0; //减免金额 decimal payAmount = PayCount - FreePay; //实际应支付金额 if (payAmount == amount) { string sql = string.Format("update Flw_Order set OrderStatus={3}, RealPay='{0}', PayTime='{1}' where OrderID='{2}'", payAmount.ToString("0.00"), payTime, orderId, OrderState.AlreadyPaid); XCCloudBLL.ExecuteSql(sql); model.OrderStatus = OrderState.AlreadyPaid; if (selttleType == SelttleType.StarPos) { sql = @"SELECT a.StoreID, SettleFee FROM Base_StoreInfo a INNER JOIN Flw_Order b ON b.StoreID = a.StoreID INNER JOIN Base_SettlePPOS c ON c.ID = a.SettleID WHERE b.OrderID = '" + orderId + "'"; } else if (selttleType == SelttleType.LcswPay) { sql = @"SELECT a.StoreID, SettleFee FROM Base_StoreInfo a INNER JOIN Flw_Order b ON b.StoreID = a.StoreID INNER JOIN Base_SettleLCPay c ON c.ID = a.SettleID WHERE b.OrderID = '" + orderId + "'"; } else { sql = "SELECT SettleFee FROM Base_StoreInfo a, Base_SettleOrg b WHERE a.SettleID = b.ID AND a.StoreID = '" + StoreID + "'"; } DataTable dt = XCCloudBLL.ExecuterSqlToTable(sql); if (dt.Rows.Count > 0) { //获取当前结算费率,计算手续费 double fee = Convert.ToDouble(dt.Rows[0]["SettleFee"]); double d = Math.Round(Convert.ToDouble(payAmount) * fee, 2, MidpointRounding.AwayFromZero); //最小单位为0.01元 if (d < 0.01) { d = 0.01; } sql = "update Flw_Order set PayFee='" + d + "' where OrderID='" + orderId + "'"; XCCloudBLL.ExecuteSql(sql); } } else { //支付异常 //PayList.AddNewItem(out_trade_no, amount); string sql = string.Format("update Flw_Order set OrderStatus={3}, RealPay='{0}', PayTime='{1}' where OrderID='{2}'", amount.ToString("0.00"), payTime, orderId, OrderState.Alarm); XCCloudBLL.ExecuteSql(sql); model.OrderStatus = OrderState.Alarm; } AddOrderPayCache(orderId, amount, payTime, model.OrderStatus, selttleType); } } catch { return(model); } return(model); }