Esempio n. 1
0
        private AlipayTradePrecreateContentBuilder BuildPrecreateContent(Config config, PayParameter parameter)
        {
            AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder();

            builder.out_trade_no          = parameter.TradeID;
            builder.total_amount          = parameter.Amount.ToString();
            builder.undiscountable_amount = "0";
            builder.operator_id           = "test";
            builder.subject = "扫码支付";
            if (parameter.ExpireTime != DateTime.MinValue)
            {
                builder.time_expire = parameter.ExpireTime.ToString("yyyy-MM-dd HH:mm:ss");
            }
            else
            {
                //默认10分钟
                builder.time_expire = System.DateTime.Now.AddMinutes(10).ToString("yyyy-MM-dd HH:mm:ss");;
            }
            builder.body      = parameter.TradeName == null ? parameter.Description : parameter.TradeName;
            builder.store_id  = "";                   //很重要的参数,可以用作之后的营销
            builder.seller_id = config.AppConfig.pid; //可以是具体的收款账号。

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

            return(builder);
        }
Esempio n. 2
0
        /// <summary>
        /// 创建支付
        /// </summary>
        /// <returns>返回二维码内容</returns>
        public override string StartPay(PayParameter parameter)
        {
            if (parameter.TradeID.IsNullOrEmpty())
            {
                throw new Exception("交易编号为空");
            }

            Config config = new Alipay.Config(PayFactory.GetInterfaceXmlConfig(PayInterfaceType.AlipayScanQRCode, parameter.TradeID));
            IAlipayTradeService serviceClient = config.AppConfig.CreateClientInstance();

            AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(config, parameter);
            string out_trade_no = builder.out_trade_no;

            //回掉通知页面
            string notifyUrl = string.Format("http://{0}/{1}", HttpContext.Current.Request.Url.Authority, Alipay_ScanPay_HttpModule.NotifyPageName);

            AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, notifyUrl);

            PayFactory.OnLog(parameter.TradeID, precreateResult.response.Body);
            if (precreateResult.response.QrCode.IsNullOrEmpty())
            {
                //如果没有生成二维码内容,认为失败
                throw new Exception(precreateResult.response.SubMsg);
            }

            if (precreateResult.Status == ResultEnum.FAILED)
            {
                throw new Exception(precreateResult.response.SubMsg);
            }

            return(precreateResult.response.QrCode);
        }
Esempio n. 3
0
        /// <summary>
        /// 获得支付二维码
        /// </summary>
        /// <param name="aoM">支付宝支付订单对象</param>
        /// <returns>支付二维码</returns>
        public Bitmap GetPayQRCode(AlipayOrderModel aoM)
        {
            AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(aoM);
            string out_trade_no = builder.out_trade_no;
            AlipayF2FPrecreateResult precreateResult = _serviceClient.tradePrecreate(builder, aoM.NotifyUrl);
            Bitmap img;

            if (precreateResult.Status == ResultEnum.SUCCESS)
            {
                img = EncryptionManager.QRCodeEncode(precreateResult.response.QrCode);
            }
            else if (precreateResult.Status == ResultEnum.FAILED)
            {
                throw new MAlipayException(precreateResult.response.Body);
            }
            else
            {
                if (precreateResult.response == null)
                {
                    throw new MAlipayException("配置或网络异常,请检查后重试");
                }
                else
                {
                    throw new MAlipayException("系统异常,请更新外部订单后重新发起请求");
                }
            }
            return(img);
        }
Esempio n. 4
0
        public override bool TradePrecreate(MyOrder order)
        {
            IAlipayTradeService serviceClient = F2FBiz.CreateClientInstance(AliPayConfig.serverUrl, AliPayConfig.appId, AliPayConfig.merchant_private_key, AliPayConfig.version,
                                                                            AliPayConfig.sign_type, AliPayConfig.alipay_public_key, AliPayConfig.charset);

            AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(order);
            string out_trade_no = builder.out_trade_no;
            AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, AliPayConfig.notifyUrl);

            switch (precreateResult.Status)
            {
            case ResultEnum.SUCCESS:
                DoWaitProcess(precreateResult);
                return(true);

            case ResultEnum.FAILED:
                precreateMessage = precreateResult.response.Body;
                return(false);

            case ResultEnum.UNKNOWN:
                if (precreateResult.response == null)
                {
                    precreateMessage = "配置或网络异常,请检查后重试";
                }
                else
                {
                    precreateMessage = "系统异常,请更新外部订单后重新发起请求";
                }
                return(false);

            default:
                precreateMessage = "未定义的结果";
                return(false);
            }
        }
Esempio n. 5
0
        /// <summary>
        /// 构造支付请求数据
        /// </summary>
        /// <returns>请求数据集</returns>
        private AlipayTradePrecreateContentBuilder BuildPrecreateContent()
        {
            //线上联调时,请输入真实的外部订单号。
            string out_trade_no = "";

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

            AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder();

            //收款账号
            builder.seller_id = AlipayConfig.pid;
            //订单编号
            builder.out_trade_no = out_trade_no;
            //订单总金额
            builder.total_amount = WIDtotal_fee.Text.Trim();
            //参与优惠计算的金额
            //builder.discountable_amount = "";
            //不参与优惠计算的金额
            //builder.undiscountable_amount = "";
            //订单名称
            builder.subject = WIDsubject.Text.Trim();
            //自定义超时时间
            builder.timeout_express = "5m";
            //订单描述
            builder.body = "";
            //门店编号,很重要的参数,可以用作之后的营销
            builder.store_id = "test store id";
            //操作员编号,很重要的参数,可以用作之后的营销
            builder.operator_id = "test";

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

            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);
        }
Esempio n. 6
0
        public AlipayTradePrecreateContentBuilder BuildPrecreateContent(EAliPayApplication app, EUserInfo AgentUi, string sellerid, string TotalAmt)
        {
            //线上联调时,请输入真实的外部订单号。
            _OrderNo  = StringHelper.GenerateOrderNo();
            _SellerId = sellerid;

            AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder();

            //收款账号
            builder.seller_id = _SellerId;

            //      builder.store_id = _SellerId;

            //订单编号
            builder.out_trade_no = OrderNo;
            //订单总金额
            builder.total_amount = TotalAmt;

            //参与优惠计算的金额
            //builder.discountable_amount = "";
            //不参与优惠计算的金额
            //builder.undiscountable_amount = "";
            //订单名称
            builder.subject = "#" + AgentUi.Name + "收银台";
            //自定义超时时间
            //  builder.timeout_express = "5m";
            //订单描述
            builder.body = "#" + app.AppName + "-商品";
            //门店编号,很重要的参数,可以用作之后的营销
            // builder.store_id = "test store id";
            //操作员编号,很重要的参数,可以用作之后的营销
            // builder.operator_id = "test";

            //传入商品信息详情
            //List<GoodsInfo> gList = new List<GoodsInfo>();
            //GoodsInfo goods = new GoodsInfo();
            //goods.goods_id = "爱钱吧商品";
            //goods.goods_name = "爱钱吧商品";
            //goods.price = TotalAmt;
            //goods.quantity = "1";
            //gList.Add(goods);
            //List<GoodsInfo> gList = AliPayManager.GetGoodsList(TotalAmt);
            //builder.goods_detail = gList;

            //系统商接入可以填此参数用作返佣
            //ExtendParams exParam = new ExtendParams();
            //exParam.sys_service_provider_id = app.AppId;

            //builder.extend_params = exParam;



            return(builder);
        }
Esempio n. 7
0
        /// <summary>
        /// 预下单
        /// </summary>
        /// <returns></returns>
        public Result PreCreate(string account, string fileCoverId)
        {
            Result result = new Result();

            try
            {
                IAlipayTradeService serviceClient          = F2FBiz.CreateClientInstance(Config.serverUrl, Config.appId, Config.merchant_private_key, Config.version, Config.sign_type, Config.alipay_public_key, Config.charset);
                AlipayTradePrecreateContentBuilder builder = Common.Common.BuildPrecreateContent(account, fileCoverId);
                string out_trade_no = builder.out_trade_no;
                AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder);

                switch (precreateResult.Status)
                {
                case ResultEnum.SUCCESS:
                    result.IsOK = true;
                    result      = Common.Common.RecordPreRenewal(account, fileCoverId, out_trade_no);
                    break;

                case ResultEnum.FAILED:
                    result.Description = precreateResult.response.Body;
                    result.IsOK        = false;
                    break;

                case ResultEnum.UNKNOWN:

                    if (precreateResult.response == null)
                    {
                        result.Description = "配置或网络异常,请检查后重试";
                    }
                    else
                    {
                        result.Description = precreateResult.response.Body;    // "系统异常,请更新外部订单后重新发起请求";
                    }
                    result.IsOK = false;
                    break;
                }
                if (!result.IsOK)
                {
                    return(result);
                }
                result.ExtData     = precreateResult.response.QrCode;
                result.Description = "预下单成功";
                //  result.SucceedDescription = out_trade_no;
            }
            catch (Exception ex)
            {
                LogHelper.WriteLog(GetType()).Info(ex.StackTrace);
                result.IsOK        = false;
                result.Description = ex.Message;
            }
            return(result);
        }
Esempio n. 8
0
        /// <summary>
        /// 构造支付请求数据
        /// </summary>
        /// <param name="aoM">支付宝支付订单对象</param>
        /// <returns>请求数据集</returns>
        private AlipayTradePrecreateContentBuilder BuildPrecreateContent(AlipayOrderModel aoM)
        {
            //线上联调时,请输入真实的外部订单号。
            string out_trade_no = aoM.ID;//订单号
            AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder
            {
                //收款账号
                seller_id = _config.PID,
                //订单编号
                out_trade_no = out_trade_no,
                //订单总金额
                total_amount = aoM.TotalPrice.ToString(),
                //参与优惠计算的金额
                discountable_amount = aoM.DiscounPrice.ToString(),
                //不参与优惠计算的金额
                undiscountable_amount = aoM.UnDiscounPrice.ToString(),
                //订单名称
                subject = aoM.Name,
                //自定义超时时间
                timeout_express = "5m",
                //订单描述
                body = aoM.Description,
                //门店编号,很重要的参数,可以用作之后的营销
                store_id = aoM.StoreID,
                //操作员编号,很重要的参数,可以用作之后的营销
                operator_id = aoM.OperatorId
            };
            //传入商品信息详情
            List <GoodsInfo> gList = new List <GoodsInfo>();
            GoodsInfo        goods;

            foreach (AlipayProductModel item in aoM.Items)
            {
                goods = new GoodsInfo
                {
                    goods_id   = item.ID,
                    goods_name = item.Name,
                    price      = item.Price.ToString(),
                    quantity   = item.Nubmer.ToString()
                };
                gList.Add(goods);
            }
            builder.goods_detail = gList;
            //系统商接入可以填此参数用作返佣
            ExtendParams exParam = new ExtendParams
            {
                sys_service_provider_id = aoM.NotifyParams
            };

            builder.extend_params = exParam;
            return(builder);
        }
Esempio n. 9
0
        /// <summary>
        /// 构造支付请求数据
        /// </summary>
        /// <param name="orderName">订单名称</param>
        /// <param name="orderAmount">订单金额</param>
        /// <param name="outTradeNo">订单编号</param>
        /// <returns>请求结果集</returns>
        private AlipayTradePrecreateContentBuilder BuildPrecreateContent(string orderName, string orderAmount, string outTradeNo)
        {
            //线上联调时,请输入真实的外部订单号。
            if (string.IsNullOrEmpty(outTradeNo))
            {
                outTradeNo = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString();
            }

            AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder
            {
                //收款账号
                seller_id = APPID,
                //订单编号
                out_trade_no = outTradeNo,
                //订单总金额
                total_amount = orderAmount,
                //参与优惠计算的金额
                //builder.discountable_amount = "";
                //不参与优惠计算的金额
                //builder.undiscountable_amount = "";
                //订单名称
                subject = orderName,
                //自定义超时时间
                timeout_express = "5m",
                //订单描述
                body = "",
                //门店编号,很重要的参数,可以用作之后的营销
                store_id = "test store id",
                //操作员编号,很重要的参数,可以用作之后的营销
                operator_id = "test"
            };

            //传入商品信息详情
            List <Alipay.AopSdk.F2FPay.Model.GoodsInfo> gList = new List <Alipay.AopSdk.F2FPay.Model.GoodsInfo>();

            Alipay.AopSdk.F2FPay.Model.GoodsInfo goods = new Alipay.AopSdk.F2FPay.Model.GoodsInfo
            {
                goods_id   = "goods id",
                goods_name = "goods name",
                price      = "9.99",
                quantity   = "1"
            };
            gList.Add(goods);
            builder.goods_detail = gList;

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

            return(builder);
        }
Esempio n. 10
0
        //alipay.trade.precreate(统一收单线下交易预创建)
        public bool Alipay_PreCreate(string app_id, string merchant_private_key, string alipay_public_key, string ord_id, string ord_name, decimal total_amt
                                     , string partner_id, out string barcode, 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);

                AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(ord_id, ord_name, total_amt, partner_id);
                string out_trade_no = builder.out_trade_no;

                //如果需要接收扫码支付异步通知,那么请把下面两行注释代替本行。
                //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。
                //AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder);
                string notify_url = Server.Appsetting.ali_notify_url;  //商户接收异步通知的地址
                AlipayF2FPrecreateResult precreateResult = sc.tradePrecreate(builder, notify_url);

                //以下返回结果的处理供参考。
                //payResponse.QrCode即二维码对于的链接
                //将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付。
                msg     = "";
                barcode = "";
                if (precreateResult.Status == ResultEnum.SUCCESS)
                {
                    barcode = precreateResult.response.QrCode;
                    return(true);
                }
                else if (precreateResult.Status == ResultEnum.FAILED)
                {
                    msg = precreateResult.response.Body;
                    return(false);
                }
                else
                {
                    if (precreateResult.response == null)
                    {
                        msg = "配置或网络异常,请检查后重试";
                    }
                    else
                    {
                        msg = "系统异常,请更新外部订单后重新发起请求";
                    }
                    return(false);
                }
            }
            catch (Exception ex)
            {
                Server.LogHelper.writeLog("PreCreate ->Alipay_PreCreate()", ex.ToString(), ord_id, total_amt.ToString());
                throw ex;
            }
        }
Esempio n. 11
0
        /// <summary>
        /// 构造支付请求数据
        /// </summary>
        /// <param name="orderName">订单名称</param>
        /// <param name="orderAmount">订单金额</param>
        /// <param name="outTradeNo">订单编号</param>
        /// <returns>请求结果集</returns>
        private AlipayTradePrecreateContentBuilder BuildPrecreateContent(string orderName, string orderAmount, string outTradeNo)
        {
            //线上联调时,请输入真实的外部订单号。
            if (string.IsNullOrEmpty(outTradeNo))
            {
                outTradeNo = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString();
            }

            AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder();

            //收款账号
            builder.seller_id = _alipayService.Options.Uid;
            //订单编号
            builder.out_trade_no = outTradeNo;
            //订单总金额
            builder.total_amount = orderAmount;
            //参与优惠计算的金额
            //builder.discountable_amount = "";
            //不参与优惠计算的金额
            //builder.undiscountable_amount = "";
            //订单名称
            builder.subject = orderName;
            //自定义超时时间
            builder.timeout_express = "5m";
            //订单描述
            builder.body = "";
            //门店编号,很重要的参数,可以用作之后的营销
            builder.store_id = "tsjkit";
            //操作员编号,很重要的参数,可以用作之后的营销
            builder.operator_id = "admin";

            //传入商品信息详情
            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);
        }
Esempio n. 12
0
        /// <summary>
        /// 构造支付请求数据
        /// </summary>
        /// <returns>请求数据集</returns>
        private AlipayTradePrecreateContentBuilder BuildPrecreateContent(Orders orderInfo)
        {
            //线上联调时,请输入真实的外部订单号。
            string out_trade_no = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString();

            orderInfo.order_id = out_trade_no;

            AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder();

            //收款账号
            builder.seller_id = Config.pid;
            //订单编号
            builder.out_trade_no = out_trade_no;
            //订单总金额
            builder.total_amount = orderInfo.order_price.ToString();
            //参与优惠计算的金额
            //builder.discountable_amount = "";
            //不参与优惠计算的金额
            //builder.undiscountable_amount = "";
            //订单名称
            builder.subject = $"《{orderInfo.order_title}》封面 - {orderInfo.order_price.ToString()}元档";
            //自定义超时时间
            builder.timeout_express = "5m";
            //订单描述
            builder.body = $"《{orderInfo.order_title}》封面 - {orderInfo.order_price.ToString()}元档";
            //门店编号,很重要的参数,可以用作之后的营销
            builder.store_id = Config.pid;
            //操作员编号,很重要的参数,可以用作之后的营销
            builder.operator_id = "docover";

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

            goods.goods_id   = orderInfo.order_id;
            goods.goods_name = orderInfo.order_title;
            goods.price      = orderInfo.order_price.ToString();
            goods.quantity   = "1";
            gList.Add(goods);
            builder.goods_detail = gList;

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

            return(builder);
        }
Esempio n. 13
0
        private void button1_Click(object sender, EventArgs e)
        {
            this.pictureBox1.Visible = true;
            this.lblSuccess.Visible  = false;
            this.lblCz.Visible       = false;
            this.lblBt.Visible       = false;

            AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent();
            string out_trade_no = builder.out_trade_no;

            WIDout_request_no.Text = out_trade_no;

            //如果需要接收扫码支付异步通知,那么请把下面两行注释代替本行。
            //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。
            AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder);
            //string notify_url = "http://10.5.21.14/notify_url.aspx";  //商户接收异步通知的地址
            //AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, notify_url);

            //以下返回结果的处理供参考。
            //payResponse.QrCode即二维码对于的链接
            //将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付。
            string result = "";

            switch (precreateResult.Status)
            {
            case ResultEnum.SUCCESS:
                DoWaitProcess(precreateResult);
                break;

            case ResultEnum.FAILED:
                result = precreateResult.response.Body;
                //Response.Redirect("result.aspx?Text=" + result);
                break;

            case ResultEnum.UNKNOWN:
                if (precreateResult.response == null)
                {
                    result = "配置或网络异常,请检查后重试";
                }
                else
                {
                    result = "系统异常,请更新外部订单后重新发起请求";
                }
                //Response.Redirect("result.aspx?Text=" + result);
                break;
            }
        }
Esempio n. 14
0
        public string PayF2F(EAliPayApplication app, EUserInfo AgentUi, EStoreInfo storeInfo, float TotalAmount, out ResultEnum status)
        {
            string result    = "";
            string NotifyUrl = ConfigurationManager.AppSettings["Main_SiteUrl"] + "AliPay/PayNotify";

            /*
             * IAlipayTradeService serviceClient = F2FBiz.CreateClientInstance(AliPayConfig.serverUrl, AliPayConfig.appId, AliPayConfig.merchant_private_key, AliPayConfig.version,
             *             AliPayConfig.sign_type, AliPayConfig.alipay_public_key, AliPayConfig.charset);
             */
            IAlipayTradeService serviceClient = F2FBiz.CreateClientInstance(app.ServerUrl, app.AppId, app.Merchant_Private_Key, app.Version,
                                                                            app.SignType, app.Merchant_Public_key, app.Charset);

            _handler = new F2FPayHandler();

            AlipayTradePrecreateContentBuilder builder = _handler.BuildPrecreateContent(app, AgentUi, storeInfo.AliPayAccount, TotalAmount.ToString());

            AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, NotifyUrl);

            status = precreateResult.Status;

            switch (precreateResult.Status)
            {
            case ResultEnum.SUCCESS:
                result = _handler.CreateQR(precreateResult);
                result = _handler.DeQR(result);

                break;

            case ResultEnum.FAILED:
                result = precreateResult.response.Body;

                break;

            case ResultEnum.UNKNOWN:
                if (precreateResult.response == null)
                {
                    result = "配置或网络异常,请检查后重试";
                }
                else
                {
                    result = "系统异常,请更新外部订单后重新发起请求";
                }

                break;
            }
            return(result);
        }
Esempio n. 15
0
        public AlipayF2FPrecreateResult tradePrecreate(AlipayTradePrecreateContentBuilder builder)
        {
            AlipayF2FPrecreateResult payResult = new AlipayF2FPrecreateResult();

            try
            {
                AlipayTradePrecreateRequest payRequest = new AlipayTradePrecreateRequest();
                payRequest.BizContent = builder.BuildJson();
                payResult.response    = client.Execute(payRequest);
                return(payResult);
            }
            catch
            {
                payResult.response = null;
                return(payResult);
            }
        }
Esempio n. 16
0
        public String ScanCodeGen(string orderName, string orderAmount, string outTradeNo)
        {
            AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(orderName, orderAmount, outTradeNo);
            //如果需要接收扫码支付异步通知,那么请把下面两行注释代替本行。
            //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。
            AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder);
            //string notify_url = "http://10.5.21.14/Pay/Notify"; //商户接收异步通知的地址
            //AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, notify_url);

            //以下返回结果的处理供参考。
            //payResponse.QrCode即二维码对于的链接
            //将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付。
            String Result = "";

            switch (precreateResult.Status)
            {
            case ResultEnum.SUCCESS:
                Result = "{'code':'1','msg':'";

                Result += precreateResult.response.QrCode + "," + precreateResult.response.OutTradeNo + "'";
                //轮询订单结果
                //根据业务需要,选择是否新起线程进行轮询
                //ParameterizedThreadStart parStart = new ParameterizedThreadStart(LoopQuery);
                //Thread myThread = new Thread(parStart);
                //object o = precreateResult.response.OutTradeNo;
                //myThread.Start(o);
                break;

            case ResultEnum.FAILED:
                Result = "{'code':'2','msg':'";
                // Console.WriteLine("生成二维码失败:" + precreateResult.response.Body);
                Result += "生成二维码失败:" + precreateResult.response.Body + "'}";    //
                break;

            case ResultEnum.UNKNOWN:
                Result  = "{'code':'2','msg':'";
                Result += "生成二维码失败:" + (precreateResult.response == null ? "配置或网络异常,请检查后重试" : "系统异常,请更新外部订单后重新发起请求") + "'}"; break;    //
                                                                                                                                       //Console.WriteLine("生成二维码失败:" + (precreateResult.response == null ? "配置或网络异常,请检查后重试" : "系统异常,请更新外部订单后重新发起请求")); break;
            }

            return(Result);
            //MemoryStream ms = new MemoryStream();
            //bitmap.Save(ms, ImageFormat.Png);
            //byte[] bytes = ms.GetBuffer();
            //return File(bytes, "image/png");
        }
Esempio n. 17
0
        /// <summary>
        /// 构造支付请求数据
        /// </summary>
        /// <returns>请求数据集</returns>
        private AlipayTradePrecreateContentBuilder BuildPrecreateContent(MyOrder order)
        {
            string out_trade_no = order.ORDER_NUMBER;

            AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder();

            //收款账号
            builder.seller_id = AliPayConfig.pid;
            //订单编号
            builder.out_trade_no = out_trade_no;
            //订单总金额
            builder.total_amount = order.PRICE_PAY.Value.ToString();
            //参与优惠计算的金额
            //builder.discountable_amount = "";
            //不参与优惠计算的金额
            //builder.undiscountable_amount = "";
            //订单名称
            builder.subject = order.NAME;
            //自定义超时时间
            builder.timeout_express = "5m";
            //订单描述
            builder.body = "";
            //门店编号,很重要的参数,可以用作之后的营销
            builder.store_id = "001";
            //操作员编号,很重要的参数,可以用作之后的营销
            builder.operator_id = order.Customer.MOBILE;

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

            goods.goods_id   = order.OnlineCourse.id.ToString();
            goods.goods_name = order.OnlineCourse.name;
            goods.price      = order.OnlineCourse.price.ToString();
            goods.quantity   = "1";
            gList.Add(goods);
            builder.goods_detail = gList;

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

            return(builder);
        }
Esempio n. 18
0
        public AlipayF2FPrecreateResult tradePrecreate(AlipayTradePrecreateContentBuilder builder, string notify_url)
        {
            AlipayF2FPrecreateResult payResult = new AlipayF2FPrecreateResult();

            try
            {
                AlipayTradePrecreateRequest payRequest = new AlipayTradePrecreateRequest();
                payRequest.BizContent = builder.BuildJson();
                payRequest.SetNotifyUrl(notify_url);
                payResult.response = client.Execute(payRequest);
                return(payResult);
            }
            catch (Exception ex)
            {
                payResult.response = null;
                return(payResult);
            }
        }
Esempio n. 19
0
        public async Task <IActionResult> ScanCodeGen(string orderName, string orderAmount, string outTradeNo)
        {
            AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(orderName, orderAmount, outTradeNo);

            //如果需要接收扫码支付异步通知,那么请把下面两行注释代替本行。
            //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。
            AlipayF2FPrecreateResult precreateResult =
                _alipayF2FService.TradePrecreate(builder);
            //string notify_url = "http://10.5.21.14/Pay/Notify";  //商户接收异步通知的地址
            //AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, notify_url);

            //以下返回结果的处理供参考。
            //payResponse.QrCode即二维码对于的链接
            //将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付。
            var bitmap = new Bitmap(Path.Combine(_hostingEnvironment.WebRootPath, "FTFPay/images/error.png"));

            switch (precreateResult.Status)
            {
            case ResultEnum.SUCCESS:
                bitmap.Dispose();
                bitmap = RenderQrCode(precreateResult.response.QrCode);
                //轮询订单结果
                //根据业务需要,选择是否新起线程进行轮询
                ParameterizedThreadStart parStart = new ParameterizedThreadStart(LoopQuery);
                Thread myThread = new Thread(parStart);
                object o        = precreateResult.response.OutTradeNo;
                myThread.Start(o);
                break;

            case ResultEnum.FAILED:
                Console.WriteLine("生成二维码失败:" + precreateResult.response.Body);
                break;

            case ResultEnum.UNKNOWN:
                Console.WriteLine("生成二维码失败:" + (precreateResult.response == null ? "配置或网络异常,请检查后重试" : "系统异常,请更新外部订单后重新发起请求"));
                break;
            }
            MemoryStream ms = new MemoryStream();

            bitmap.Save(ms, ImageFormat.Png);
            byte[] bytes = ms.GetBuffer();
            ms.Close();
            return(File(bytes, "image/png"));
        }
        /// <summary>
        /// 构造支付请求数据
        /// </summary>
        /// <param name="orderName">订单名称</param>
        /// <param name="orderAmount">订单金额</param>
        /// <param name="outTradeNo">订单编号</param>
        /// <returns>请求结果集</returns>
        private AlipayTradePrecreateContentBuilder BuildPrecreateContent(string paymentId, string description, decimal amount)
        {
            AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder();

            //收款账号
            //builder.seller_id = _configuration.Uid;
            //订单编号
            builder.out_trade_no = paymentId;
            //订单总金额
            builder.total_amount = amount.ToString();
            //参与优惠计算的金额
            //builder.discountable_amount = "";
            //不参与优惠计算的金额
            //builder.undiscountable_amount = "";
            //订单名称
            builder.subject = description;
            //自定义超时时间
            builder.timeout_express = "2h";
            //订单描述
            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   = description;
            goods.goods_name = description;
            goods.price      = amount.ToString();
            goods.quantity   = "1";
            gList.Add(goods);
            builder.goods_detail = gList;

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

            return(builder);
        }
Esempio n. 21
0
        public async Task <AlipayF2FPrecreateResult> TradePrecreateAsync(AlipayTradePrecreateContentBuilder builder, string notify_url)
        {
            AlipayF2FPrecreateResult payResult = new AlipayF2FPrecreateResult();

            try
            {
                AlipayTradePrecreateRequest payRequest = new AlipayTradePrecreateRequest();
                payRequest.BizContent = builder.BuildJson();
                payRequest.SetNotifyUrl(notify_url);
                payResult.response = await client.ExecuteAsync(payRequest);

                return(payResult);
            }
            catch
            {
                payResult.response = null;
                return(payResult);
            }
        }
Esempio n. 22
0
        /// <summary>
        /// 构造支付请求数据
        /// </summary>
        /// <returns>请求数据集</returns>
        public AlipayTradePrecreateContentBuilder BuildPrecreateContent(Flw_Order order, decimal amount, string subject)
        {
            AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder();

            //收款账号
            builder.seller_id = AliPayConfig.pid;
            //订单编号
            builder.out_trade_no = order.OrderID;
            //订单总金额
            builder.total_amount = amount.ToString("0.00");
            //参与优惠计算的金额
            //builder.discountable_amount = "";
            //不参与优惠计算的金额
            //builder.undiscountable_amount = "";
            //订单名称
            builder.subject = subject;
            //自定义超时时间
            //builder.timeout_express = "5m";
            //订单描述
            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 = "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);
        }
Esempio n. 23
0
        public string PayF2F_ForR(EAliPayApplication app, string SellerId, string amount, ETool_QR qr, out ResultEnum status)
        {
            string result = "";

            IAlipayTradeService serviceClient = F2FBiz.CreateClientInstance(app.ServerUrl, app.AppId, app.Merchant_Private_Key, app.Version,
                                                                            app.SignType, app.Merchant_Public_key, app.Charset);

            _handler = new F2FPayHandler();

            AlipayTradePrecreateContentBuilder builder = _handler.BuildPrecreateContent_ForR(app, "", amount);

            AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder);

            status = precreateResult.Status;

            switch (precreateResult.Status)
            {
            case ResultEnum.SUCCESS:
                result = _handler.CreateQR_ForR(precreateResult, qr);

                break;

            case ResultEnum.FAILED:
                result = precreateResult.response.Body;

                break;

            case ResultEnum.UNKNOWN:
                if (precreateResult.response == null)
                {
                    result = "配置或网络异常,请检查后重试";
                }
                else
                {
                    result = "系统异常,请更新外部订单后重新发起请求";
                }

                break;
            }

            return(result);
        }
Esempio n. 24
0
        protected void Alipay_RSA_Submit(object sender, EventArgs e)
        {
            AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent();
            string out_trade_no = builder.out_trade_no;

            //如果需要接收扫码支付异步通知,那么请把下面两行注释代替本行。
            //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。
            //AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder);
            string notify_url = "http://www.1777ka.com/Zhifu/notify_url.aspx";  //商户接收异步通知的地址
            AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, notify_url);

            //以下返回结果的处理供参考。
            //payResponse.QrCode即二维码对于的链接
            //将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付。
            string result = "";

            switch (precreateResult.Status)
            {
            case ResultEnum.SUCCESS:
                DoWaitProcess(precreateResult);
                break;

            case ResultEnum.FAILED:
                result = precreateResult.response.Body;
                Response.Write("<script>alert('" + result + "')</script>");
                break;

            case ResultEnum.UNKNOWN:
                if (precreateResult.response == null)
                {
                    result = "配置或网络异常,请检查后重试";
                }
                else
                {
                    result = "系统异常,请更新外部订单后重新发起请求";
                }
                Response.Write("<script>alert('" + result + "')</script>");
                break;
            }
        }
Esempio n. 25
0
        /// <summary>
        /// 【统一收单线下交易预创建】构造支付请求数据
        /// </summary>
        /// <returns>请求数据集</returns>
        private AlipayTradePrecreateContentBuilder BuildPrecreateContent(string ord_id, string ord_name, decimal total_amount, string partner_id)
        {
            AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder();

            //收款账号
            builder.seller_id = partner_id;
            //订单编号
            builder.out_trade_no = ord_id;
            //订单总金额
            builder.total_amount = total_amount.ToString();
            //订单名称
            builder.subject = ord_name;
            //自定义超时时间:m表示分钟
            builder.timeout_express = "5m";
            //订单描述
            //builder.body = "";
            //门店编号,很重要的参数,可以用作之后的营销
            //builder.store_id = "";
            //操作员编号,很重要的参数,可以用作之后的营销
            //builder.operator_id = "";

            //传入商品信息详情

            /*
             * 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);
        }
        public async Task <CreatePaymentResponse> CreatePaymentAsync(CreatePaymentRequest request)
        {
            var result = new CreatePaymentResponse();
            AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(request.PaymentId, request.Description, request.Amount);

            //支付回调
            string tenPayNotify = string.Concat(_configuration.ServerAddress, _configuration.NotifyUrl);
            AlipayF2FPrecreateResult precreateResult = _alipayF2FService.TradePrecreate(builder, tenPayNotify);

            //AlipayF2FPrecreateResult precreateResult = _alipayF2FService.TradePrecreate(builder);
            switch (precreateResult.Status)
            {
            case ResultEnum.SUCCESS:
                result.AdditionalData.Add("CodeUrl", precreateResult.response.QrCode);
                break;

            default:
                _logger.Error(L("Payments.Alipay.PayFail", precreateResult.response.SubCode, precreateResult.response.SubMsg));
                break;
            }

            return(await Task.FromResult(result));
        }
Esempio n. 27
0
 public AlipayF2FPrecreateResult TradePrecreate(AlipayTradePrecreateContentBuilder builder, string notify_url)
 {
     return(AsyncHelper.RunSync(async() => await TradePrecreateAsync(builder, notify_url)));
 }
Esempio n. 28
0
        /// <summary>
        /// 构造支付请求数据
        /// </summary>
        /// <returns>请求数据集</returns>
        private AlipayTradePrecreateContentBuilder BuildPrecreateContent()
        {
            //线上联调时,请输入真实的外部订单号。
            string out_trade_no = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString();
            string total_fee    = "1";
            string subject      = "test";

            if (!string.IsNullOrEmpty(Request.QueryString["tid"]))
            {
                out_trade_no = Request.QueryString["tid"];
            }

            OrderViewModel order = BOrder.SearchByTradeNo(out_trade_no);

            if (order != null)
            {
                subject   = BProduct.ExecuteSql("select Name from Products where Id=" + order.Product_Id).ToString();
                total_fee = (order.Price * order.Count).ToString();
            }
            //if (String.IsNullOrEmpty(WIDout_request_no.Text.Trim()))
            //{
            //    out_trade_no = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString();
            //}
            //else
            //{
            //out_trade_no = "WF87212910290";
            //}

            AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder();

            //收款账号
            builder.seller_id = Config.pid;
            //订单编号
            builder.out_trade_no = out_trade_no;
            //订单总金额
            builder.total_amount = total_fee;
            //参与优惠计算的金额
            //builder.discountable_amount = "";
            //不参与优惠计算的金额
            //builder.undiscountable_amount = "";
            //订单名称
            builder.subject = subject;
            //自定义超时时间
            builder.timeout_express = "5m";
            //订单描述
            builder.body = "";
            //门店编号,很重要的参数,可以用作之后的营销
            builder.store_id = "test store id";
            //操作员编号,很重要的参数,可以用作之后的营销
            builder.operator_id = "test";

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

            if (order != null)
            {
                GoodsInfo goods = new GoodsInfo();
                goods.goods_id   = order.Product_Id.ToString();
                goods.goods_name = subject;
                goods.price      = order.Price.ToString();
                goods.quantity   = order.Count.ToString();;
                gList.Add(goods);
            }
            else
            {
                GoodsInfo goods = new GoodsInfo();
                goods.goods_id   = "520";
                goods.goods_name = "捐助";
                goods.price      = "0.1";
                goods.quantity   = "1";
                gList.Add(goods);
            }

            builder.goods_detail = gList;

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

            return(builder);
        }
Esempio n. 29
0
        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;
            }
        }
Esempio n. 30
0
        public string CreateOrder(string data)
        {
            try
            {
                Orders orderInfo = JsonConvert.DeserializeObject <Orders>(data);
                if (orderInfo == null)
                {
                    return(JsonConvert.SerializeObject(new ReturnResponse(21500, "参数错误")));
                }

                AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(orderInfo);
                string out_trade_no = builder.out_trade_no;

                using (var db = new DoCoverEntities())
                {
                    orderInfo.order_status = 2;
                    db.Orders.Add(orderInfo);
                    string a = "";
                    db.Database.Log = (c) => {
                        a = c;
                    };
                    db.SaveChanges();
                }

                AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder);

                //以下返回结果的处理供参考。
                //payResponse.QrCode即二维码对于的链接
                //将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付。
                string result  = "";
                int    code    = 0;
                string message = "";
                switch (precreateResult.Status)
                {
                case ResultEnum.SUCCESS:
                    code    = 200;
                    result  = DoWaitProcess(precreateResult);
                    message = "生成订单成功";
                    break;

                case ResultEnum.FAILED:
                    code    = 500;
                    message = "生成订单失败";
                    break;

                case ResultEnum.UNKNOWN:
                    code = 500;
                    if (precreateResult.response == null)
                    {
                        message = "配置或网络异常,请检查后重试";
                    }
                    else
                    {
                        message = "系统异常,请更新外部订单后重新发起请求";
                    }
                    break;
                }
                return(JsonConvert.SerializeObject(new ReturnResponse()
                {
                    code = code, message = message, result = new { order_id = out_trade_no, money = orderInfo.order_price, data = result }
                }));
            }
            catch (Exception ex)
            {
                return(JsonConvert.SerializeObject(new ReturnResponse()
                {
                    code = 15001, message = ex.Message
                }));
            }
        }