protected void Page_Load(object sender, EventArgs e) { System.IO.Stream s = Request.InputStream; int count = 0; byte[] buffer = new byte[1024]; StringBuilder builder = new StringBuilder(); while ((count = s.Read(buffer, 0, 1024)) > 0) { builder.Append(Encoding.UTF8.GetString(buffer, 0, count)); } s.Flush(); s.Close(); s.Dispose(); PayLogHelper.WriteEvent(builder.ToString(), "扫呗支付"); //string testresponse = "{\"attach\":\"\",\"channel_trade_no\":\"4009262001201708186903067327\",\"end_time\":\"20170818160418\",\"key_sign\":\"b503c7c76e4df6379c6d43c5103595b9\",\"merchant_name\":\"45对接专用1号\",\"merchant_no\":\"852100210000005\",\"out_trade_no\":\"300508950021217081816035700005\",\"pay_type\":\"010\",\"receipt_fee\":\"10\",\"result_code\":\"01\",\"return_code\":\"01\",\"return_msg\":\"支付成功\",\"terminal_id\":\"30050895\",\"terminal_time\":\"20170818160255\",\"terminal_trace\":\"b609bfed0a8f4badaa5373d20b30a52c\",\"total_fee\":\"10\",\"user_id\":\"on9DrwJ7GgmOaxHBN_yIkSCeBZVo\"}"; JavaScriptSerializer jsonSerialize = new JavaScriptSerializer(); NotifyResponse ack = jsonSerialize.Deserialize <NotifyResponse>(builder.ToString()); //NotifyResponse ack = jsonSerialize.Deserialize<NotifyResponse>(testresponse); Response.ContentType = "application/json"; Response.HeaderEncoding = Encoding.UTF8; try { if (ack.CheckSign()) { if (ack.return_code == "01") { if (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; Flw_OrderBusiness.OrderPay(out_trade_no, payAmount, SelttleType.LcswPay); } } Response.Write("{\"return_code\":\"01\",\"return_msg\":\"success\"}"); } else { Response.Write("{\"return_code\":\"02\",\"return_msg\":\"签名失败\"}"); } } catch (Exception ex) { Response.Write("{\"return_code\":\"02\",\"return_msg\":\"签名失败\"}"); PayLogHelper.WriteError(ex); } }
/// <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); }
protected void Page_Load(object sender, EventArgs e) { try { SortedDictionary <string, string> arrParams = GetRequestPost(); string sign_type = arrParams.FirstOrDefault(t => t.Key == "sign_type").Value; string dinpaysign = arrParams.FirstOrDefault(t => t.Key == "sign").Value; arrParams.Remove("sign_type"); arrParams.Remove("sign"); string signStr = DinPayHttpHelp.GetSignString(arrParams); if (sign_type == "RSA-S") //RSA-S的验签方法 { //使用智付公钥对返回的数据验签 string dinpayPubKey = DinPayConfig.MerPubKey; //将智付公钥转换成C#专用格式 dinpayPubKey = DinPayHttpHelp.RSAPublicKeyJava2DotNet(dinpayPubKey); //验签 bool result = DinPayHttpHelp.ValidateRsaSign(signStr, dinpayPubKey, dinpaysign); if (result == true) { //如果验签结果为true,则对订单进行更新 string out_trade_no = arrParams.FirstOrDefault(t => t.Key == "order_no").Value; string order_amount = arrParams.FirstOrDefault(t => t.Key == "order_amount").Value; decimal amount = Convert.ToDecimal(order_amount); Flw_OrderBusiness.OrderPay(out_trade_no, amount, SelttleType.DinPay); //订单更新完之后打印SUCCESS Response.Write("SUCCESS"); } else { //验签失败 Response.Write("验签失败"); } } } catch { } }
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; } }
protected void Page_Load(object sender, EventArgs e) { System.IO.Stream s = Request.InputStream; int count = 0; byte[] buffer = new byte[1024]; StringBuilder builder = new StringBuilder(); while ((count = s.Read(buffer, 0, 1024)) > 0) { builder.Append(Encoding.GetEncoding("GBK").GetString(buffer, 0, count)); } s.Flush(); s.Close(); s.Dispose(); PayLogHelper.WriteEvent(builder.ToString(), "新大陆支付"); JavaScriptSerializer jsonSerialize = new JavaScriptSerializer(); PosStarCallback callback = jsonSerialize.Deserialize <PosStarCallback>(builder.ToString()); if (callback != null) { string out_trade_no = callback.TxnLogId; decimal total_fee = Convert.ToDecimal(callback.TxnAmt); decimal payAmount = total_fee / 100; Flw_OrderBusiness.OrderPay(out_trade_no, payAmount, SelttleType.StarPos); #region MyRegion // Flw_Order order = Flw_OrderBusiness.GetOrderModel(out_trade_no); // if (order != null) // { // decimal PayCount = order.PayCount != null ? (decimal)order.PayCount * 100 : 0; //应付金额 // decimal FreePay = order.FreePay != null ? (decimal)order.FreePay * 100 : 0; //减免金额 // if (total_fee == PayCount - FreePay) // { // string payTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // string sql = string.Format("update Flw_Order set OrderStatus=2, RealPay='{0}', PayTime='{1}' where OrderID='{2}'", payAmount, payTime, out_trade_no); // XCCloudBLL.ExecuteSql(sql); // OrderPayNotify.AddOrderPayCache(out_trade_no, payAmount, payTime, 2); // 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 = '" + out_trade_no + "'"; // 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='" + out_trade_no + "'"; // XCCloudBLL.ExecuteSql(sql); // } // } // else // { // //支付异常 // //PayList.AddNewItem(out_trade_no, amount); // string sql = string.Format("update Flw_Order set OrderStatus=3, RealPay='{0}', PayTime=GETDATE() where OrderID='{1}'", payAmount, out_trade_no); // XCCloudBLL.ExecuteSql(sql); // } // } #endregion } Response.ContentType = "application/json"; Response.HeaderEncoding = Encoding.GetEncoding("GBK"); //string blank = ""; //blank = blank.PadLeft(64, ' '); //string responseWrite= string r = "{\"RspCode\":\"000000\",\"RspDes\":\"\"}"; //Response.Write(string.Format("{\"RspCode\":\"000000\",\"RspDes\":\"{0}\"}", blank)); Response.Write(r); }
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, "支付失败")); } }
protected void Page_Load(object sender, EventArgs e) { SortedDictionary <string, string> sPara = GetRequestPost(); PayLogHelper.WriteEvent(Request.Form.ToString(), "支付宝支付"); if (sPara.Count > 0)//判断是否有带返回参数 { Notify aliNotify = new Notify(AliPayConfig.charset, AliPayConfig.sign_type, AliPayConfig.pid, AliPayConfig.mapiUrl, AliPayConfig.alipay_public_key); bool verifyResult = aliNotify.Verify(sPara, Request.Form["notify_id"], Request.Form["sign"]); if (verifyResult && CheckParams())//验证成功 { ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代码 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表 //商户订单号 string out_trade_no = Request.Form["out_trade_no"]; //支付宝交易号 string trade_no = Request.Form["trade_no"]; //获得支付总金额total_amount string total_amount = Request.Form["total_amount"]; //交易状态 //在支付宝的业务通知中,只有交易通知状态为TRADE_SUCCESS或TRADE_FINISHED时,才是买家付款成功。 string trade_status = Request.Form["trade_status"]; //交易状态 if (trade_status == "TRADE_SUCCESS" || trade_status == "TRADE_FINISHED") { try { decimal amount = Convert.ToDecimal(total_amount); Flw_OrderBusiness.OrderPay(out_trade_no, amount, SelttleType.AliWxPay); } catch (Exception ex) { PayLogHelper.WriteError(ex); } Response.Write("success"); //请不要修改或删除 } else { Response.Write("fail"); } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ///////////////////////////////////////////////////////////////////////////////////////////////////////////// } else//验证失败 { //PayLogHelper.WriteEvent("支付宝验证失败"); Response.Write("fail"); } } else { Response.Write("无通知参数"); } }
public WxPayData GetNotifyData() { //接收从微信后台POST过来的数据 System.IO.Stream s = Request.InputStream; int count = 0; byte[] buffer = new byte[1024]; StringBuilder builder = new StringBuilder(); while ((count = s.Read(buffer, 0, 1024)) > 0) { builder.Append(Encoding.UTF8.GetString(buffer, 0, count)); } s.Flush(); s.Close(); s.Dispose(); // string temp = @"<xml><appid><![CDATA[wx359e3843fe4c20e6]]></appid> //<bank_type><![CDATA[ABC_DEBIT]]></bank_type> //<cash_fee><![CDATA[1]]></cash_fee> //<device_info><![CDATA[100010_SC-201609020843]]></device_info> //<fee_type><![CDATA[CNY]]></fee_type> //<is_subscribe><![CDATA[Y]]></is_subscribe> //<mch_id><![CDATA[1264100601]]></mch_id> //<nonce_str><![CDATA[9551f570dc8b434a98c7fb5e95543664]]></nonce_str> //<openid><![CDATA[oaxaDv5ATDpyyTJjh03vl_x55a9I]]></openid> //<out_trade_no><![CDATA[03ad8b23b8554450b272b543bd5f9dbd]]></out_trade_no> //<result_code><![CDATA[SUCCESS]]></result_code> //<return_code><![CDATA[SUCCESS]]></return_code> //<sign><![CDATA[774AB611BAEF0D61B94AD5FD5DF3097D]]></sign> //<time_end><![CDATA[20170301141219]]></time_end> //<total_fee>1</total_fee> //<trade_type><![CDATA[NATIVE]]></trade_type> //<transaction_id><![CDATA[4009262001201703011791419767]]></transaction_id> //</xml>"; //转换数据格式并验证签名 WxPayData data = new WxPayData(); try { PayLogHelper.WriteEvent(builder.ToString(), "微信支付"); data.FromXml(builder.ToString()); string resule = data.GetValue("result_code").ToString(); if (resule == "SUCCESS") { string out_trade_no = data.GetValue("out_trade_no").ToString(); decimal total_fee = Convert.ToDecimal(data.GetValue("total_fee")); decimal payAmount = total_fee / 100; Flw_OrderBusiness.OrderPay(out_trade_no, payAmount, SelttleType.AliWxPay); #region MyRegion //Flw_Order order = Flw_OrderBusiness.GetOrderModel(out_trade_no); //if (order != null) //{ // decimal PayCount = order.PayCount != null ? (decimal)order.PayCount * 100 : 0; //应付金额 // decimal FreePay = order.FreePay != null ? (decimal)order.FreePay * 100 : 0; //减免金额 // if (total_fee == PayCount - FreePay) // { // string payTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // string sql = string.Format("update Flw_Order set OrderStatus=2, RealPay='{0}', PayTime='{1}' where OrderID='{2}'", payAmount, payTime, out_trade_no); // XCCloudBLL.ExecuteSql(sql); // OrderPayNotify.AddOrderPayCache(out_trade_no, payAmount, payTime, 2); // sql = "SELECT SettleFee FROM Base_StoreInfo a, Base_SettleOrg b WHERE a.SettleID = b.ID AND a.StoreID = '" + order.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='" + out_trade_no + "'"; // XCCloudBLL.ExecuteSql(sql); // } // } // else // { // //支付异常 // //PayList.AddNewItem(out_trade_no, amount); // string sql = string.Format("update Flw_Order set OrderStatus=3, RealPay='{0}', PayTime=GETDATE() where OrderID='{1}'", payAmount, out_trade_no); // XCCloudBLL.ExecuteSql(sql); // } //} #endregion } //data.FromXml(temp); } catch (WxPayException ex) { //若签名错误,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", ex.Message); Response.Write(res.ToXml()); Response.End(); } return(data); }