Пример #1
0
        /// <summary>
        /// 【统一收单线下交易条码支付】构造支付请求数据
        /// </summary>
        /// <returns>请求数据集</returns>
        private AlipayTradePayContentBuilder BuildPayContent(string ord_id, string ord_name, string auth_coe, decimal total_amount, string partner_id)
        {
            string out_trade_no = ord_id;

            //扫码枪扫描到的用户手机钱包中的付款条码
            AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder();

            //收款账号
            builder.seller_id = partner_id;
            //订单编号
            builder.out_trade_no = out_trade_no;
            //支付场景,无需修改
            builder.scene = "bar_code";
            //支付授权码,付款码
            builder.auth_code = auth_coe;
            //订单总金额
            builder.total_amount = total_amount.ToString();
            //订单名称
            builder.subject = ord_name;
            //自定义超时时间
            builder.timeout_express = "5m";
            //订单描述
            builder.body = "";
            //门店编号,很重要的参数,可以用作之后的营销
            //builder.store_id = "test store id";
            //操作员编号,很重要的参数,可以用作之后的营销
            //builder.operator_id = "test";

            return(builder);
        }
Пример #2
0
        /// <summary>
        /// 提交支付请求
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void sureButton_Click(object sender, EventArgs e)
        {
            string amount = WIDtotal_fee.Text.Trim();

            if (string.IsNullOrEmpty(amount) || float.Parse(amount) == 0)
            {
                MessageBox.Show("支付金额不可为0,请重新填写");
                return;
            }

            //
            AlipayTradePayContentBuilder builder = BuildPayContent();
            string out_trade_no = builder.out_trade_no;

            AlipayF2FPayResult payResult = serviceClient.tradePay(builder);

            switch (payResult.Status)
            {
            case ResultEnum.SUCCESS:
                DoSuccessProcess(payResult);
                break;

            case ResultEnum.FAILED:
                DoFailedProcess(payResult);
                break;

            case ResultEnum.UNKNOWN:
                result = "网络异常,请检查网络配置后,更换外部订单号重试";
                break;
            }
            MessageBox.Show("" + result);
        }
Пример #3
0
        private AlipayTradePayContentBuilder BuildPayContent(Config config, PayParameter parameter)
        {
            AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder();

            builder.out_trade_no          = parameter.TradeID;
            builder.scene                 = "bar_code";
            builder.auth_code             = parameter.AuthCode;
            builder.total_amount          = parameter.Amount.ToString();
            builder.discountable_amount   = parameter.Amount.ToString();
            builder.undiscountable_amount = "0";
            builder.operator_id           = "test";
            builder.subject               = "条码支付";
            if (parameter.ExpireTime != DateTime.MinValue)
            {
                var minutes = Convert.ToInt32((parameter.ExpireTime - DateTime.Now).TotalMinutes);
                builder.timeout_express = Math.Max(1, minutes) + "m";
            }
            else
            {
                //默认2分钟
                builder.timeout_express = "2m";
            }
            builder.body      = parameter.TradeName == null ? parameter.Description : parameter.TradeName;
            builder.store_id  = "";                   //很重要的参数,可以用作之后的营销
            builder.seller_id = config.AppConfig.pid; //可以是具体的收款账号。

            builder.goods_detail = new List <Com.Alipay.Model.GoodsInfo>();
            //扩展参数
            //系统商接入可以填此参数用作返佣
            //ExtendParams exParam = new ExtendParams();
            //exParam.sysServiceProviderId = "20880000000000";
            //builder.extendParams = exParam;

            return(builder);
        }
Пример #4
0
Файл: AliPay.cs Проект: qdjx/C5
        //条码支付https://docs.open.alipay.com/194/106039/
        //统一收单字段https://docs.open.alipay.com/api_1/alipay.trade.pay
        public JObject F2FPay(SOInfo SOInfo, string PayCode, out string Message)
        {
            var data = new AlipayTradePayContentBuilder()
            {
                subject      = SOInfo.SalesOrder.BillNO,                           //订单名称
                body         = "test",                                             //订单描述
                out_trade_no = SOInfo.SalesOrder.BillNO,                           //订单编号
                total_amount = SOInfo.SOItems.Sum(i => i.Amount).ToString("0.00"), //订单金额
                scene        = "bar_code",                                         //支付场景
                auth_code    = PayCode,                                            //付款条码
            };

            var result = serviceClient.tradePay(data);
            //{
            //"alipay_trade_pay_response": {
            //    "code": "10000",
            //    "msg": "Success",
            //    "buyer_logon_id": "j*z***@yahoo.cn",
            //    "buyer_pay_amount": "0.01",
            //    "buyer_user_id": "2088102549201514",
            //    "fund_bill_list": [
            //      {
            //        "amount": "0.01",
            //        "fund_channel": "PCREDIT"
            //      }
            //    ],
            //    "gmt_payment": "2019-03-19 17:00:54",
            //    "invoice_amount": "0.01",
            //    "out_trade_no": "SO201903191700107879",
            //    "point_amount": "0.00",
            //    "receipt_amount": "0.01",
            //    "total_amount": "0.01",
            //    "trade_no": "2019031922001401510517716161"
            //  },
            //  "sign": "D020VIGsiIqygRJLlSCEBulNxzN8KBMiUS+C/wW8tKZV6PaUc4OMSxc9uAM2UDhVlPDIdPsMZoIkTZ1BsDZldAR9k28oZvG9gAPluuHkHAvdqMgLDbvhOIBY3C7qT9tYe1M2n7HkruFP9nmhw09z1mCbG8EeH8s9zPMY8CG3QnQ+lDcbmivFXveCel7YmVP+AfXxTo/DKcf937ynOhDK1sinuG16kWOgZtxHVP9iPrF1DaVBmS3OnD/dYPm10QVY4OaMfw7fsPSH8moBGSUbsk7z4p95VmTT9JDdF/1wEK40LdXt6Tyo9/zNMhIv7sjdISvIyyu9nJ3ouPCtrwNFiA=="
            //}
            var resultObject = JsonConvert.DeserializeObject <JObject>(result.response.Body);

            switch (result.Status)
            {
            case ResultEnum.SUCCESS: Message = null; return(resultObject);

            case ResultEnum.FAILED:
                if (resultObject["alipay_trade_pay_response"]["sub_code"].ToString() == "ACQ.TRADE_HAS_SUCCESS")
                {
                    Message = null;
                    return(resultObject);
                }
                Message = resultObject["alipay_trade_pay_response"]["sub_msg"].ToString();
                return(null);

            case ResultEnum.UNKNOWN: Message = "网络异常,请检查网络配置后,更换外部订单号重试"; return(null);

            default: Message = "支付宝交易状态(" + result.Status + ")未定义"; return(null);
            }
        }
Пример #5
0
        /// <summary>
        /// 构造支付请求数据
        /// </summary>
        /// <returns>请求数据集</returns>
        private static AlipayTradePayContentBuilder BuildPayContent(AlipayTradeOrderModel model)
        {
            //线上联调时,请输入真实的外部订单号。
            string out_trade_no = model.out_trade_no;

            //扫码枪扫描到的用户手机钱包中的付款条码
            AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder();

            //收款账号
            builder.seller_id = model.seller_id;
            //订单编号
            builder.out_trade_no = out_trade_no;
            //支付场景,无需修改
            builder.scene = "bar_code";
            //支付授权码,付款码
            builder.auth_code = model.buyer_id;
            //订单总金额
            builder.total_amount = model.total_amount;
            //参与优惠计算的金额
            builder.discountable_amount = model.discountable_amount;
            //不参与优惠计算的金额
            builder.undiscountable_amount = model.undiscountable_amount;
            //订单名称
            builder.subject = model.subject;
            //自定义超时时间
            builder.timeout_express = "10m";
            //订单描述
            builder.body = model.body;
            //门店编号,很重要的参数,可以用作之后的营销
            builder.store_id = model.store_id;
            //操作员编号,很重要的参数,可以用作之后的营销
            builder.operator_id = "HAND";


            //传入商品信息详情
            List <GoodsInfo> gList = new List <GoodsInfo>();

            GoodsInfo goods = new GoodsInfo();

            goods.goods_id   = "";
            goods.goods_name = model.body;
            goods.price      = model.total_amount;
            goods.quantity   = "1";
            gList.Add(goods);
            builder.goods_detail = gList;

            //系统商接入可以填此参数用作返佣
            //ExtendParams exParam = new ExtendParams();
            //exParam.sysServiceProviderId = "20880000000000";
            //builder.extendParams = exParam;

            return(builder);
        }
Пример #6
0
        private AlipayTradePayContentBuilder BuildPayContent()
        {
            //线上联调时,请输入真实的外部订单号。
            string out_trade_no = "";

            //if (String.IsNullOrEmpty(WIDout_request_no.Text.Trim()))
            if (String.IsNullOrEmpty(OrderNumber))
            {
                out_trade_no = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString();
            }
            else
            {
                //out_trade_no = WIDout_request_no.Text.Trim();
                out_trade_no = OrderNumber;
            }

            //扫码枪扫描到的用户手机钱包中的付款条码
            AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder();

            builder.out_trade_no          = out_trade_no;
            builder.scene                 = "bar_code";
            builder.auth_code             = WIDdynamic_id.Text.Trim();
            builder.total_amount          = WIDtotal_fee.Text.Trim();
            builder.discountable_amount   = WIDtotal_fee.Text.Trim();
            builder.undiscountable_amount = "0";
            builder.operator_id           = "test";
            builder.subject               = "条码支付";
            builder.timeout_express       = "2m";
            builder.body      = "订单描述";
            builder.store_id  = "test store id";  //很重要的参数,可以用作之后的营销
            builder.seller_id = Config.pid;       //可以是具体的收款账号。

            //传入商品信息详情
            List <GoodsInfo> gList = new List <GoodsInfo>();

            GoodsInfo goods = new GoodsInfo();

            goods.goods_id   = "goods id";
            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);
        }
Пример #7
0
        /// <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);
        }
Пример #8
0
        /// <summary>
        ///     构造支付请求数据
        /// </summary>
        /// <returns>请求数据集</returns>
        private AlipayTradePayContentBuilder BuildPayContent()
        {
            //线上联调时,请输入真实的外部订单号。
            var out_trade_no = "1";

            //扫码枪扫描到的用户手机钱包中的付款条码
            var builder = new AlipayTradePayContentBuilder();

            //收款账号
            builder.seller_id = Config.seller_id;
            //订单编号
            builder.out_trade_no = out_trade_no;
            //支付场景,无需修改
            builder.scene = "bar_code";
            //订单总金额
            builder.total_amount = "1";

            //订单名称
            builder.subject = "1";
            //自定义超时时间
            builder.timeout_express = "2m";
            //订单描述
            builder.body = "";
            //门店编号,很重要的参数,可以用作之后的营销
            builder.store_id = "test store id";
            //操作员编号,很重要的参数,可以用作之后的营销
            builder.operator_id = "test";


            //传入商品信息详情
            var gList = new List <GoodsInfo>();

            var 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;

            return(builder);
        }
Пример #9
0
        //alipay.trade.pay(统一收单线下交易条码支付)
        public bool Alipay_BarcodePay(string app_id, string merchant_private_key, string alipay_public_key, string ord_id, string ord_name, decimal total_amt
                                      , string auth_code, string partner_id, out string msg)
        {
            try
            {
                IAlipayTradeService sc = F2FBiz.CreateClientInstance(Config.serverUrl, app_id, merchant_private_key, Config.version,
                                                                     Config.sign_type, alipay_public_key, Config.charset);

                AlipayTradePayContentBuilder builder = BuildPayContent(ord_id, ord_name, auth_code, total_amt, partner_id);
                string out_trade_no = builder.out_trade_no;

                AlipayF2FPayResult payResult = sc.tradePay(builder);

                msg = "";
                if (payResult.Status == ResultEnum.SUCCESS)
                {
                    return(true);
                }
                else if (payResult.Status == ResultEnum.FAILED)
                {
                    msg = payResult.response.Body;
                    return(false);
                }
                else
                {
                    if (payResult.response == null)
                    {
                        msg = "配置或网络异常,请检查后重试";
                    }
                    else
                    {
                        msg = "网络异常,请检查网络配置后重试";
                    }
                    return(false);
                }
            }
            catch (Exception ex)
            {
                Server.LogHelper.writeLog("PreCreate ->Alipay_BarcodePay()", ex.ToString(), ord_id, total_amt.ToString());
                throw ex;
            }
        }
Пример #10
0
        private AlipayTradePayContentBuilder BuildPayContent(DBDsPosOrder posOrder)
        {
            //扫码枪扫描到的用户手机钱包中的付款条码
            AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder();

            builder.out_trade_no          = posOrder.SerialNumber;
            builder.scene                 = "bar_code";
            builder.auth_code             = posOrder.PayAuthCode;
            builder.total_amount          = (posOrder.TotalSellValue - posOrder.PointMoney).ToString("0.00");
            builder.discountable_amount   = "0";
            builder.undiscountable_amount = posOrder.TotalSellValue.ToString("0.00");
            builder.operator_id           = posOrder.Clerker;
            builder.subject               = "条码支付";
            builder.timeout_express       = "2m";
            builder.body      = "订单商品描述";
            builder.store_id  = posOrder.StoreName; //很重要的参数,可以用作之后的营销
            builder.seller_id = Config.pid;         //可以是具体的收款账号。

            //传入商品信息详情
            List <GoodsInfo> gList = new List <GoodsInfo>();

            foreach (DsPosOrderItem posItem in posOrder.items)
            {
                GoodsInfo goods = new GoodsInfo();
                goods.goods_id   = posItem.ProSysNo.ToString();
                goods.goods_name = posItem.ProName;
                goods.price      = posItem.ProTotalValue.ToString("0.00");
                goods.quantity   = posItem.ProNum.ToString();
                gList.Add(goods);
            }
            builder.goods_detail = gList;
            //扩展参数
            //系统商接入可以填此参数用作返佣
            //ExtendParams exParam = new ExtendParams();
            //exParam.sysServiceProviderId = "20880000000000";
            //builder.extendParams = exParam;

            return(builder);
        }
Пример #11
0
        /// <summary>
        /// 提交支付请求
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Alipay_RSA_Submit(object sender, EventArgs e)
        {
            AlipayTradePayContentBuilder builder = BuildPayContent();
            string out_trade_no = builder.out_trade_no;

            AlipayF2FPayResult payResult = serviceClient.tradePay(builder);

            switch (payResult.Status)
            {
            case ResultEnum.SUCCESS:
                DoSuccessProcess(payResult);
                break;

            case ResultEnum.FAILED:
                DoFailedProcess(payResult);
                break;

            case ResultEnum.UNKNOWN:
                result = "网络异常,请检查网络配置后,更换外部订单号重试";
                break;
            }
            Response.Redirect("result.aspx?Text=" + result);
        }
Пример #12
0
        /// <summary>
        ///  提交支付请求
        /// </summary>
        /// <param name="orderName">订单名称</param>
        /// <param name="orderAmount">订单金额</param>
        /// <param name="outTradeNo">订单号</param>
        /// <param name="authCode">支付授权码,付款码</param>
        /// <returns></returns>
        public ActionResult ScanCodeGen(string orderName, string orderAmount, string outTradeNo, string authCode)
        {
            AlipayTradePayContentBuilder builder = BuildPayContent(orderName, orderAmount, outTradeNo, authCode);
            string out_trade_no = builder.out_trade_no;

            AlipayF2FPayResult payResult = serviceClient.tradePay(builder);

            switch (payResult.Status)
            {
            case ResultEnum.SUCCESS:
                DoSuccessProcess(payResult);
                break;

            case ResultEnum.FAILED:
                DoFailedProcess(payResult);
                break;

            case ResultEnum.UNKNOWN:
                result = "网络异常,请检查网络配置后,更换外部订单号重试";
                break;
            }
            return(Json(result));
        }
Пример #13
0
        public static string BarCodePayOrder(string companyId, AlipayTradeOrderModel model)
        {
            try
            {
                AliPayApiConfig config = AliPayApiConfigServices.QueryAliPayConfig(companyId);
                if (config == null)
                {
                    throw new MyException("获取支付宝配置失败");
                }

                IAlipayTradeService serviceClient = GetDefaultF2FClient(companyId);

                AlipayTradePayContentBuilder builder = BuildPayContent(model);
                string out_trade_no = builder.out_trade_no;

                AlipayF2FPayResult payResult = serviceClient.tradePay(builder);

                TxtLogServices.WriteTxtLogEx("AliPayApiServices", string.Format("F2F支付:{0}\r\nResult:{1}", builder.ToXml(Encoding.GetEncoding("GB2312")), payResult.response.Body));
                switch (payResult.Status)
                {
                case ResultEnum.SUCCESS:
                    return(payResult.response.TradeNo);

                case ResultEnum.FAILED:
                    return("");

                case ResultEnum.UNKNOWN:
                    return("-1");
                }
            }
            catch (Exception ex)
            {
                TxtLogServices.WriteTxtLogEx("AliPayApiServices", string.Format("统一下单失败2:{0}", ex.Message));
            }

            return("-2");
        }
Пример #14
0
        /// <summary>
        /// 构造支付请求数据
        /// </summary>
        /// <param name="orderName">订单名称</param>
        /// <param name="orderAmount">订单金额</param>
        /// <param name="outTradeNo">订单编号</param>
        /// <returns>请求结果集</returns>
        private AlipayTradePayContentBuilder BuildPayContent(string orderName, string orderAmount, string outTradeNo, string authCode)
        {
            //线上联调时,请输入真实的外部订单号。
            string out_trade_no = "";

            if (String.IsNullOrEmpty(outTradeNo.Trim()))
            {
                out_trade_no = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString();
            }
            else
            {
                out_trade_no = outTradeNo;
            }

            //扫码枪扫描到的用户手机钱包中的付款条码
            AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder();

            //收款账号
            builder.seller_id = Config.UID;
            //订单编号
            builder.out_trade_no = out_trade_no;
            //支付场景,无需修改
            builder.scene = "bar_code";
            //支付授权码,付款码
            builder.auth_code = authCode;
            //订单总金额
            builder.total_amount = orderAmount;
            //参与优惠计算的金额
            //builder.discountable_amount = "";
            //不参与优惠计算的金额
            //builder.undiscountable_amount = "";
            //订单名称
            builder.subject = orderName;
            //自定义超时时间
            builder.timeout_express = "2m";
            //订单描述
            builder.body = "";
            //门店编号,很重要的参数,可以用作之后的营销
            builder.store_id = "test store id";
            //操作员编号,很重要的参数,可以用作之后的营销
            builder.operator_id = "test";


            //传入商品信息详情
            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);
        }
Пример #15
0
 public AlipayF2FPayResult TradePay(AlipayTradePayContentBuilder builder)
 {
     return(_alipayClient.TradePay(builder));
 }
Пример #16
0
        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, "支付失败"));
            }
        }
Пример #17
0
        /// <summary>
        /// 刷卡支付完整业务流程逻辑(2018-04-19写)
        /// </summary>
        /// <param name="body">商品描述</param>
        /// <param name="total_fee">总金额(单位为元)</param>
        /// <param name="auth_code">支付授权码</param>
        /// <returns>刷卡支付结果</returns>
        public static AlipayPayResponse OrderPay(string body, string total_fee, string auth_code)
        {
            IAlipayTradeService serviceClient = F2FBiz.CreateClientInstance(
                F2FPayConfig.serverUrl,
                F2FPayConfig.appId,
                F2FPayConfig.merchant_private_key,
                F2FPayConfig.version,
                F2FPayConfig.sign_type,
                F2FPayConfig.alipay_public_key,
                F2FPayConfig.charset);

            var result = new AlipayPayResponse {
                Success = false, Message = "支付失败"
            };

            //线上联调时,请输入真实的外部订单号。
            result.OutTradeNo = DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString();

            //扫码枪扫描到的用户手机钱包中的付款条码
            AlipayTradePayContentBuilder builder = new AlipayTradePayContentBuilder();

            //收款账号
            builder.seller_id = F2FPayConfig.pid;
            //订单编号
            builder.out_trade_no = result.OutTradeNo;
            //支付场景,无需修改
            builder.scene = "bar_code";
            //支付授权码,付款码
            builder.auth_code = auth_code.Trim();
            //订单总金额
            builder.total_amount = total_fee.Trim();
            //参与优惠计算的金额
            //builder.discountable_amount = "";
            //不参与优惠计算的金额
            //builder.undiscountable_amount = "";
            //订单名称
            builder.subject = body.Trim();
            //自定义超时时间
            builder.timeout_express = "2m";
            //订单描述
            builder.body = body.Trim();
            //门店编号,很重要的参数,可以用作之后的营销
            builder.store_id = "";
            //操作员编号,很重要的参数,可以用作之后的营销
            builder.operator_id = "";


            //传入商品信息详情
            List <GoodsInfo> gList = new List <GoodsInfo>();

            GoodsInfo goods = new GoodsInfo();

            goods.goods_id   = "304";
            goods.goods_name = "goods#name";
            goods.price      = total_fee.Trim();
            goods.quantity   = "1";
            gList.Add(goods);
            builder.goods_detail = gList;

            //系统商接入可以填此参数用作返佣
            //ExtendParams exParam = new ExtendParams();
            //exParam.sysServiceProviderId = "20880000000000";
            //builder.extendParams = exParam;

            AlipayF2FPayResult payResult = serviceClient.tradePay(builder);

            switch (payResult.Status)
            {
            case ResultEnum.SUCCESS:
                result.Success = true;
                result.Message = "支付成功";
                break;

            case ResultEnum.FAILED:
                var subMsg = payResult.response.SubMsg;
                if (string.IsNullOrEmpty(subMsg))
                {
                    subMsg = "支付失败";
                }
                result.Message = subMsg;
                break;

            case ResultEnum.UNKNOWN:
                result.Message = "支付失败,网络异常,请检查网络配置后,更换外部订单号重试";
                break;
            }
            return(result);
        }
Пример #18
0
        public AlipayF2FPayResult tradePay(AlipayTradePayContentBuilder builder)
        {
            AlipayF2FPayResult payResult = new AlipayF2FPayResult();

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

                //payRequest.SetBizModel("");

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

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

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

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

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

                        AlipayTradeQueryResponse queryResponse2 = sendTradeQuery(builder.out_trade_no);

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

                            payResponse = toTradePayResponse(queryResponse2);
                        }
                        break;

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


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


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

                AlipayTradePayResponse payResponse = client.Execute(payRequest);

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

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

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

            return(null);
        }