예제 #1
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);
        }
예제 #2
0
        /// <summary>
        /// 生成二维码并展示到页面上
        /// </summary>
        /// <param name="precreateResult">二维码串</param>
        private void DoWaitProcess(AlipayF2FPrecreateResult precreateResult)
        {
            //打印出 preResponse.QrCode 对应的条码
            Bitmap        bt;
            string        enCodeString  = precreateResult.response.QrCode;
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

            qrCodeEncoder.QRCodeEncodeMode   = QRCodeEncoder.ENCODE_MODE.BYTE;
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
            qrCodeEncoder.QRCodeScale        = 3;
            qrCodeEncoder.QRCodeVersion      = 8;
            bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
            string filename = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString()
                              + ".jpg";

            bt.Save(Server.MapPath("~/images/") + filename);
            this.Image1.ImageUrl = "~/images/" + filename;

            //轮询订单结果
            //根据业务需要,选择是否新起线程进行轮询
            //ParameterizedThreadStart ParStart = new ParameterizedThreadStart(LoopQuery);
            //Thread myThread = new Thread(ParStart);
            //object o = precreateResult.response.OutTradeNo;
            //myThread.Start(o);
        }
예제 #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);
        }
예제 #4
0
        public string CreateQR(AlipayF2FPrecreateResult precreateResult, bool ForTool = false)
        {
            Bitmap        bt;
            string        filePath, virtualPath;
            string        enCodeString  = precreateResult.response.QrCode;
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

            qrCodeEncoder.QRCodeEncodeMode   = QRCodeEncoder.ENCODE_MODE.BYTE;
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
            qrCodeEncoder.QRCodeScale        = 3;
            qrCodeEncoder.QRCodeVersion      = 8;
            bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
            string filename = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString()
                              + ".jpg";

            filePath = ConfigurationManager.AppSettings["QR_F2F_FP"] + filename;
            if (ForTool)
            {
                filePath = "/Content/QR/Tools/" + filename;
            }
            virtualPath = filePath;

            filePath = System.Web.HttpContext.Current.Server.MapPath(filePath);
            bt.Save(filePath);

            if (ForTool)
            {
                return(virtualPath);
            }

            // string ds = DeQR(filePath);
            return(filePath);
        }
예제 #5
0
파일: AliPay.cs 프로젝트: hellonlink/sun
        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);
            }
        }
예제 #6
0
        /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="precreateResult">二维码串</param>
        private string DoWaitProcess(AlipayF2FPrecreateResult precreateResult)
        {
            //打印出 preResponse.QrCode 对应的条码
            Bitmap        bt;
            string        enCodeString  = precreateResult.response.QrCode;
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

            qrCodeEncoder.QRCodeEncodeMode   = QRCodeEncoder.ENCODE_MODE.BYTE;
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
            qrCodeEncoder.QRCodeScale        = 3;
            qrCodeEncoder.QRCodeVersion      = 8;
            bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
            //pictureBox1.Image = bt;
            //string filename = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString()
            // + ".jpg";
            //bt.Save(Server.MapPath("~/images/") + filename);
            //this.Image1.ImageUrl = "~/images/" + filename;

            //轮询订单结果
            //根据业务需要,选择是否新起线程进行轮询
            ParameterizedThreadStart ParStart = new ParameterizedThreadStart(LoopQuery);
            Thread myThread = new Thread(ParStart);

            myThread.IsBackground = true;
            object o = precreateResult.response.OutTradeNo;

            myThread.Start(o);

            return("data:image/jpeg;base64," + ImgToBase64String(bt));
        }
예제 #7
0
파일: AliPay.cs 프로젝트: hellonlink/sun
        /// <summary>
        /// 生成二维码并展示到页面上
        /// </summary>
        /// <param name="precreateResult">二维码串</param>
        private void DoWaitProcess(AlipayF2FPrecreateResult precreateResult)
        {
            //打印出 preResponse.QrCode 对应的条码
            Bitmap        bt;
            string        enCodeString  = precreateResult.response.QrCode;
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

            qrCodeEncoder.QRCodeEncodeMode   = QRCodeEncoder.ENCODE_MODE.BYTE;
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
            qrCodeEncoder.QRCodeScale        = 3;
            qrCodeEncoder.QRCodeVersion      = 8;
            bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);

            string filename = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString() + ".jpg";
            string vPath    = string.Format("/Images/QrCode/AliPay/{0}/{1}", DateTime.Now.ToString("yyyy-MM-dd"), filename);
            string pPath    = WebFunctions.MapServerResourcePath(vPath);

            WebFunctions.CreateDirectory(pPath);

            bt.Save(pPath);

            var relativelyPath = WebFunctions.ResourceMapRoot + vPath;

            qrCodeUrl = WebFunctions.ToAbsoluteResourceUrl(relativelyPath.TrimStart('~'));

            //轮询订单结果
            //根据业务需要,选择是否新起线程进行轮询
            //ParameterizedThreadStart ParStart = new ParameterizedThreadStart(LoopQuery);
            //Thread myThread = new Thread(ParStart);
            //object o = precreateResult.response.OutTradeNo;
            //myThread.Start(o);
        }
예제 #8
0
파일: Form1.cs 프로젝트: xiaoFeiLang/pay
        /// <summary>
        /// 生成二维码并展示到页面上
        /// </summary>
        /// <param name="precreateResult">二维码串</param>
        private void DoWaitProcess(AlipayF2FPrecreateResult precreateResult)
        {
            //打印出 preResponse.QrCode 对应的条码
            Bitmap        bt;
            string        enCodeString  = precreateResult.response.QrCode;
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

            qrCodeEncoder.QRCodeEncodeMode   = QRCodeEncoder.ENCODE_MODE.BYTE;
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
            qrCodeEncoder.QRCodeScale        = 3;
            qrCodeEncoder.QRCodeVersion      = 8;
            bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
            string filename = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString()
                              + ".jpg";
            string path   = System.Windows.Forms.Application.StartupPath;
            string folder = System.IO.Path.Combine(path, "images");

            bt.Save(folder + filename);
            this.pictureBox1.Image = Image.FromFile(folder + filename);//"~/images/" + filename;

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

            myThread.Start(o);
        }
예제 #9
0
        public string CreateQR_ForR(AlipayF2FPrecreateResult precreateResult, ETool_QR qr)
        {
            Bitmap        bt;
            string        filePath, virtualPath;
            string        enCodeString  = precreateResult.response.QrCode;
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

            qrCodeEncoder.QRCodeEncodeMode   = QRCodeEncoder.ENCODE_MODE.BYTE;
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
            qrCodeEncoder.QRCodeScale        = 3;
            qrCodeEncoder.QRCodeVersion      = 8;
            bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
            string filename = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString()
                              + ".jpg";

            filePath = "/Content/QR/Tools/" + filename;

            Bitmap bkImg = new Bitmap(160, 180);


            Graphics g = Graphics.FromImage(bkImg);

            //获取水印位置设置
            ArrayList loca = new ArrayList();
            int       x    = 0;
            int       y    = 0;

            x = 5;
            y = 6;
            //   x = bkImg.Width / 2 - waterimg.Width / 2 - 90;
            //   y = MainImg.Height / 2 - 260;
            loca.Add(x);
            loca.Add(y);


            g.DrawImage(bt, new Rectangle(int.Parse(loca[0].ToString()), int.Parse(loca[1].ToString()), 149, 149));

            string     s  = "输入金额:" + qr.InputAmt;
            FontFamily ff = new FontFamily("黑体");
            Font       f  = new Font(ff, 10);
            SolidBrush b  = new SolidBrush(Color.Black);

            g.DrawString(s, f, b, 5, 155);
            //  Bitmap finImg = ImgHelper.ImageWatermark(bkImg, bt);

            virtualPath = filePath;



            filePath = System.Web.HttpContext.Current.Server.MapPath(filePath);
            bkImg.Save(filePath);

            bkImg.Dispose();
            bt.Dispose();
            return(virtualPath);
        }
예제 #10
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);
        }
예제 #11
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;
            }
        }
예제 #12
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);
        }
예제 #13
0
파일: Form1.cs 프로젝트: xiaoFeiLang/pay
        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;
            }
        }
예제 #14
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);
            }
        }
예제 #15
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");
        }
예제 #16
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);
            }
        }
예제 #17
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"));
        }
예제 #18
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);
        }
예제 #19
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;
            }
        }
예제 #20
0
        /// <summary>
        /// 生成二维码并展示到页面上
        /// </summary>
        /// <param name="precreateResult">二维码串</param>
        private void DoWaitProcess(AlipayF2FPrecreateResult precreateResult)
        {
            //打印出 preResponse.QrCode 对应的条码
            Bitmap        bt;
            string        enCodeString  = precreateResult.response.QrCode;
            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

            qrCodeEncoder.QRCodeEncodeMode   = QRCodeEncoder.ENCODE_MODE.BYTE;
            qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
            qrCodeEncoder.QRCodeScale        = 3;
            qrCodeEncoder.QRCodeVersion      = 8;
            bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
            string filename = System.DateTime.Now.ToString("yyyyMMddHHmmss") + "0000" + (new Random()).Next(1, 10000).ToString()
                              + ".jpg";

            bt.Save(Server.MapPath("images/") + filename);
            //this.Image1.ImageUrl = "images/" + filename;
            Bitmap image = new Bitmap(Server.MapPath("images/") + filename);

            //清除该页输出缓存,设置该页无缓存
            Response.Buffer          = true;
            Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0);
            Response.Expires         = 0;
            Response.CacheControl    = "no-cache";
            Response.AppendHeader("Pragma", "No-Cache");
            //将验证码图片写入内存流,并将其以"image/Jpeg" 格式输出
            MemoryStream ms = new MemoryStream();

            image.Save(ms, ImageFormat.Jpeg);
            Response.ClearContent();
            Response.ContentType = "image/Jpeg";
            Response.BinaryWrite(ms.ToArray());
            //轮询订单结果
            //根据业务需要,选择是否新起线程进行轮询
            //ParameterizedThreadStart ParStart = new ParameterizedThreadStart(LoopQuery);
            //Thread myThread = new Thread(ParStart);
            //object o = precreateResult.response.OutTradeNo;
            //myThread.Start(o);
        }
        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));
        }
예제 #22
0
        public ActionResult FaceToPay(string orderName, string orderAmount, string outTradeNo, bool pin = false)
        {   //域名
            IAopClient client = new DefaultAopClient(URL, APPID, APP_PRIVATE_KEY, FORMAT, "1.0", "RSA2", ALIPAY_PUBLIC_KEY, CHARSET, false);

            //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:
            AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();//创建API对应的request类


            //SDK已经封装掉了公共参数,这里只需要传入业务参数

            Random ran     = new Random();
            int    RandKey = ran.Next(100, 999);

            AlipayTradePayModel model = new AlipayTradePayModel
            {
                OutTradeNo  = outTradeNo + RandKey,
                TotalAmount = orderAmount,
                Subject     = orderName,
                //StoreId = "NJ_001",
                TimeoutExpress = "90m"
            };

            request.SetBizModel(model);

            //此次只是参数展示,未进行字符串转义,实际情况下请转义
            //request.BizContent = "{" +
            //                    "    \"out_trade_no\":\"20150320010101002\"," +
            //                    "    \"total_amount\":\"88.88\"," +
            //                    "    \"subject\":\"Iphone6 16G\"," +
            //                    "    \"store_id\":\"NJ_001\"," +
            //                    "    \"timeout_express\":\"90m\"}";

            AlipayTradePrecreateResponse response = client.Execute(request);

            AlipayTradePrecreateContentBuilder builder = BuildPrecreateContent(model.Subject, model.TotalAmount, model.OutTradeNo);
            //如果需要接收扫码支付异步通知,那么请把下面两行注释代替本行。
            //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。
            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即二维码对于的链接
            //将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付。
            var bitmap = new Bitmap(Path.Combine(_hostingEnvironment.WebRootPath, "images/error.png"));

            //调用成功,则处理业务逻辑
            if (!response.IsError)
            {
                bitmap.Dispose();
                bitmap = RenderQrCode(response.QrCode);

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

                var res = new
                {
                    success      = true,
                    out_trade_no = response.OutTradeNo,
                    tot          = model.TotalAmount,
                    suj          = model.Subject,
                    qr_code      = response.QrCode //发现返回的是一个网址,后续需要用这个网址字符串创建二维码
                };

                if (pin)
                {
                    return(Json(res));
                }
                else
                {
                    MemoryStream ms = new MemoryStream();
                    bitmap.Save(ms, ImageFormat.Png);
                    byte[] bytes = ms.GetBuffer();
                    return(File(bytes, "image/png"));
                }
            }
            else
            {
                //return Content("调用失败,原因:" + response.Msg + "," + response.SubMsg);
                var res = new
                {
                    success = false,
                };
                return(Json(res));
            }

            ////以下返回结果的处理供参考。
            ////payResponse.QrCode即二维码对于的链接
            ////将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付
            //var bitmap = new Bitmap(Path.Combine(_hostingEnvironment.WebRootPath, "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();
            //return File(bytes, "image/png");
        }
예제 #23
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;
            }
        }
예제 #24
0
        /// <summary>
        /// 面对面支付生成支付二维码
        /// </summary>
        /// <param name="input">支付数据</param>
        /// <param name="asyncNotifyUrl">异步通知地址,为空则表示为同步轮询模式</param>
        /// <param name="loopQueryAction">同步轮询回调函数</param>
        /// <param name="fTFConfig">面对面支付其它配置</param>
        /// <returns></returns>
        private async Task <FTFOutput> FTFGenQRCode(AlipayTradePrecreateContentBuilder input, string asyncNotifyUrl, Action <AlipayF2FPrecreateResult> loopQueryAction, FTFConfig fTFConfig)
        {
            // 参数检测
            var isAsyncNotify = !asyncNotifyUrl.IsNullOrWhiteSpace();

            if (!isAsyncNotify && loopQueryAction == null)
            {
                throw new NullReferenceException("轮询模式下 loopQueryAction 不能为空!");
            }
            // 收款账号检测,如果为空则默认填入全局配置的Uid
            if (input.seller_id.IsNullOrWhiteSpace())
            {
                input.seller_id = this._alipayService.Options.Uid;
            }



            Bitmap       bitmap       = null;
            MemoryStream memoryStream = null;
            var          message      = string.Empty;

            //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。
            AlipayF2FPrecreateResult precreateResult = null;

            // 异步通知
            if (isAsyncNotify)
            {
                precreateResult = await _alipayF2FService.TradePrecreateAsync(input, asyncNotifyUrl);
            }// 同步轮询
            else
            {
                precreateResult = await _alipayF2FService.TradePrecreateAsync(input);
            }

            switch (precreateResult.Status)
            {
            case F2FResultEnum.SUCCESS:
                // 将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付。
                bitmap = RenderQrCode(precreateResult.response.QrCode);
                // 同步轮询模式,触发轮询回调函数
                if (!isAsyncNotify)
                {
                    loopQueryAction.Invoke(precreateResult);
                }
                break;

            case F2FResultEnum.FAILED:
                message = $"生成二维码失败: {precreateResult.response.Body}";
                break;

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

            // 如果位图为空,则生成错误提示二维码
            if (bitmap == null)
            {
                bitmap = new Bitmap(fTFConfig == null ? this._fTFConfig?.QRCodeGenErrorImageFullPath : fTFConfig.QRCodeGenErrorImageFullPath);
            }

            // 转换成字节数组
            memoryStream = new MemoryStream();
            bitmap.Save(memoryStream, ImageFormat.Png);
            var imgBuffer = memoryStream.GetBuffer();

            // 释放资源
            memoryStream.Dispose();
            bitmap.Dispose();

            return(new FTFOutput()
            {
                QRCodeImageBuffer = imgBuffer,
                IsSuccess = precreateResult.Status == F2FResultEnum.SUCCESS,
                Message = message
            });
        }
예제 #25
0
파일: AliPay.cs 프로젝트: iJzFan/backup
        //获取支付宝账号的基本信息
        /// <summary>
        /// 获取支付宝支付二维码
        /// </summary>
        /// <param name="nonce_str">本次支付的随机字符串 注意,如果是同一次支付,则随机字符串固定32位</param>
        /// <param name="body">药品描述</param>
        /// <param name="out_trade_no">商户系统内部的订单号 需要保持唯一性</param>
        /// <param name="total_fee">订单总金额,单位为分</param>
        /// <param name="notify_url">接收支付宝支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数</param>
        ///
        /// <param name="detail">药品详情</param>
        /// <param name="fee_type">符合ISO 4217标准的三位字母代码,默认人民币:CNY</param>
        /// <returns></returns>
        public async Task <dynamic> Get2DCodeAsync(string nonce_str, string body,
                                                   string out_trade_no, int total_fee,
                                                   string notify_url,
                                                   IEnumerable <GoodsInfo> detail = null,
                                                   string fee_type = "CNY")
        {
            try
            {
                AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder();
                //收款账号
                builder.seller_id = _alipayService.Options.Uid;
                //订单编号
                builder.out_trade_no = out_trade_no + "_ALIQR";
                //订单总金额
                builder.total_amount = (total_fee / 100m).ToString("#0.00");//注意支付宝的总金额是元为基准的,腾讯是分为基准的
                //参与优惠计算的金额
                //builder.discountable_amount = "";
                //不参与优惠计算的金额
                //builder.undiscountable_amount = "";
                //订单名称
                builder.subject = "东莞天使健康平台账单";
                //自定义超时时间
                builder.timeout_express = "5m";
                //订单描述
                builder.body = body;
                //门店编号,很重要的参数,可以用作之后的营销
                builder.store_id = "tsjkit";
                //操作员编号,很重要的参数,可以用作之后的营销
                builder.operator_id = "admin";

                //传入商品信息详情
                if (detail != null && detail.Count() > 0)
                {
                    builder.goods_detail = detail.ToList();
                }


                AlipayF2FPrecreateResult precreateResult = _alipayF2FService.TradePrecreate(builder, notify_url);
                await Task.Delay(10);

                switch (precreateResult.Status)
                {
                case ResultEnum.SUCCESS:
                    return(new
                    {
                        rlt = true,
                        msg = "",
                        code_url = precreateResult.response.QrCode,
                        //prepay_id = precreateResult.response.sub,
                        //trade_type = precreateResult.response.,
                        payOrderId = precreateResult.response.OutTradeNo.Replace("_ALIQR", ""),
                        total_fee = total_fee
                    });

                case ResultEnum.FAILED:
                    throw new Exception(precreateResult.response.Msg);

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

                default: throw new Exception("未知返回状态");
                }
            }
            catch (Exception ex)
            {
                if (ex is PayException)
                {
                    var exx = ex as PayException;
                    return(new { rlt = false, msg = ex.Message, errId = exx.ExceptionId, payOrderId = out_trade_no });
                }
                return(new { rlt = false, msg = ex.Message });
            }
        }
예제 #26
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
                }));
            }
        }