コード例 #1
0
        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);
            }
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        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
            { }
        }
コード例 #4
0
ファイル: Order.ashx.cs プロジェクト: tongxin3267/XCCloud
        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;
            }
        }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: Payment.ashx.cs プロジェクト: tongxin3267/XCCloud
        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;
            }
        }
コード例 #7
0
ファイル: Payment.ashx.cs プロジェクト: tongxin3267/XCCloud
        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, "支付失败"));
            }
        }
コード例 #8
0
        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("无通知参数");
            }
        }
コード例 #9
0
        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);
        }