コード例 #1
0
ファイル: AliPay.cs プロジェクト: panda511/PandaDemo
        /// <summary>
        /// 获取扫码支付的二维码图片链接(将链接用二维码工具生成二维码打印出来,顾客可以用支付宝钱包扫码支付)
        /// </summary>
        public string GetQrCodePayLink(decimal amount, string orderNo, string subject, string body, string storeId, string operatorId)
        {
            string link = string.Empty;

            //组装业务参数
            var model = new AlipayTradePrecreateModel()
            {
                Body        = body,
                Subject     = subject,
                TotalAmount = amount.ToString(),
                OutTradeNo  = orderNo,
                StoreId     = storeId, //商户门店编号
                OperatorId  = operatorId
            };

            var request = new AlipayTradePrecreateRequest();

            request.SetBizModel(model);

            //不推荐使用异步通知,避免单边账问题发生。推荐使用轮询撤销机制
            //对所有唤起收银台的交易(支付宝返回状态10003(等待用户支付))发起轮询,并且建议轮询总时间设为30秒,轮询平均间隔设为3秒。在让用户再次支付前,必须通过查询确认当前订单的状态。
            //request.SetNotifyUrl(NotifyUrl);

            AlipayTradePrecreateResponse response = aopClient.Execute(request);

            if (response != null && response.Code == "10000")
            {
                link = response.QrCode;
            }

            //记日志response.ToJson();

            return(link);
        }
コード例 #2
0
ファイル: AlipayController.cs プロジェクト: hua1122/Payment
        public async Task <IActionResult> PreCreate(string out_trade_no, string subject, string total_amount, string body, string notify_url = "")
        {
            var model = new AlipayTradePrecreateModel
            {
                OutTradeNo  = out_trade_no,
                Subject     = subject,
                TotalAmount = total_amount,
                Body        = body
            };
            var req = new AlipayTradePrecreateRequest();

            req.SetBizModel(model);
            req.SetNotifyUrl(notify_url);

            var response = await _client.ExecuteAsync(req);

            ResponseModel responseModel = new ResponseModel()
            {
                code = HTTPResponseCode.PartialContent,
                data = response.Body
            };

            if (response.IsError)
            {
                responseModel.code    = HTTPResponseCode.BadRequest;
                responseModel.message = response.Msg;
            }
            else
            {
                responseModel.code = HTTPResponseCode.Successful;
            }
            return(Json(responseModel));
        }
コード例 #3
0
        public AlipayTradePrecreateResponse BuildNew(EAliPayApplication app, EStoreInfo store, EUserInfo AgentUI, string TotalAmt, bool needNotifyUrl = true, bool needControl = true)
        {
            string NotifyUrl = ConfigurationManager.AppSettings["Main_SiteUrl"] + "AliPay/PayNotify";

            _OrderNo = StringHelper.GenerateOrderNo();

            IAopClient aliyapClient = new DefaultAopClient("https://openapi.alipay.com/gateway.do", app.AppId,
                                                           app.Merchant_Private_Key, "json", "1.0", "RSA2", app.Merchant_Public_key, "GBK", false);

            AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
            AlipayTradePrecreateModel   model   = new AlipayTradePrecreateModel();

            model.SellerId = store.AliPayAccount;
            NLogHelper.InfoTxt("当面付OrderNo:" + _OrderNo);
            model.OutTradeNo   = _OrderNo;
            model.TotalAmount  = TotalAmt;
            model.Subject      = "#" + AgentUI.Name + " 收银台";
            model.Body         = app.AppName + "-商品";
            model.ExtendParams = new Aop.Api.Domain.ExtendParams();
            model.ExtendParams.SysServiceProviderId = app.AppId;
            if (needControl)
            {
                model.DisablePayChannels = "balance,moneyFund,creditCard,creditCardExpress,creditCardCartoon,debitCardExpress,point,bankPay";
            }

            request.SetBizModel(model);
            if (needNotifyUrl)
            {
                request.SetNotifyUrl(NotifyUrl);
            }

            AlipayTradePrecreateResponse response = aliyapClient.Execute(request, null, store.AliPayAuthToke);

            return(response);
        }
コード例 #4
0
        public AlipayTradePrecreateResponse BuildPartyPay(EAliPayApplication app, EStoreInfo store, EUserInfo AgentUI, string TotalAmt, bool needNotifyUrl = true)
        {
            string NotifyUrl = ConfigurationManager.AppSettings["Main_SiteUrl"] + "AliPay/PayNotify";

            _OrderNo = StringHelper.GenerateOrderNo();

            IAopClient aliyapClient = new DefaultAopClient("https://openapi.alipay.com/gateway.do", app.AppId,
                                                           app.Merchant_Private_Key, "json", "1.0", "RSA2", app.Merchant_Public_key, "GBK", false);

            AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
            AlipayTradePrecreateModel   model   = new AlipayTradePrecreateModel();

            model.SellerId                       = store.AliPayAccount;
            model.OutTradeNo                     = _OrderNo;
            model.TotalAmount                    = TotalAmt;
            model.Subject                        = "#" + AgentUI.Name + " 收银台";
            model.Body                           = app.AppName + "-商品";
            model.ExtendParams.HbFqNum           = "3";
            model.ExtendParams.HbFqSellerPercent = "0";


            request.SetBizModel(model);
            if (needNotifyUrl)
            {
                request.SetNotifyUrl(NotifyUrl);
            }

            AlipayTradePrecreateResponse response = aliyapClient.Execute(request, null, store.AliPayAuthToke);

            return(response);
        }
コード例 #5
0
        public async Task <IActionResult> PreCreate(AlipayTradePreCreateViewModel viewModel)
        {
            if (_Interceptor != null)
            {
                return(Ok("this is _Interceptor"));
            }
            var model = new AlipayTradePrecreateModel
            {
                OutTradeNo  = viewModel.OutTradeNo,
                Subject     = viewModel.Subject,
                TotalAmount = viewModel.TotalAmount,
                Body        = viewModel.Body
            };
            var req = new AlipayTradePrecreateRequest();

            req.SetBizModel(model);
            req.SetNotifyUrl(viewModel.NotifyUrl);

            //var response = await _client.CertificateExecuteAsync(req, _optionsAccessor.Value);
            var response = await _client.ExecuteAsync(req, _optionsAccessor.Value);

            ViewData["qrcode"]   = response.QrCode;
            ViewData["response"] = response.Body;
            return(View());
        }
コード例 #6
0
        //扫码支付
        public override async Task <AlipayReponse> ExecuteAsync(TradeModel request, ServerCallContext context)
        {
            var model = new AlipayTradePrecreateModel
            {
                OutTradeNo  = request.OutTradeNo,
                Subject     = request.Subject,
                TotalAmount = request.TotalAmount,
                Body        = request.Body
            };



            var req = new AlipayTradePrecreateRequest();

            req.SetBizModel(model);
            req.SetNotifyUrl("http://domain.com/alipay/notify/precreate");

            var response = await _client.ExecuteAsync(req, _optionsAccessor.Value);

            return(new AlipayReponse
            {
                Message = response.Body,
                Qrcode = response.QrCode
            });

            //return base.ExecuteAsync(request, context);
        }
コード例 #7
0
ファイル: AliPay.cs プロジェクト: BigMaJx/OOPDemo
        /// <summary>
        /// 获取扫码支付的二维码图片链接
        /// </summary>
        /// <param name="orderNo">商户订单号,64个字符以内、只能包含字母、数字、下划线;需保证在商户端不重复</param>
        /// <param name="amount">订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000] 如果同时传入了【打折金额】,【不可打折金额】,【订单总金额】三者,则必须满足如下条件:【订单总金额】=【打折金额】+【不可打折金额】</param>
        /// <param name="subject">订单标题</param>
        /// <param name="body">商品描述信息</param>
        /// <param name="storeId">商户门店编号</param>
        /// <returns></returns>
        public string GetQrCodeUrl(string orderNo, decimal amount, string subject, string body, string storeId)
        {
            string link = string.Empty;

            //组装业务参数
            var model = new AlipayTradePrecreateModel()
            {
                Body        = body,
                Subject     = subject,
                TotalAmount = amount.ToString(),
                OutTradeNo  = orderNo,
                StoreId     = storeId //商户门店编号
            };

            var request = new AlipayTradePrecreateRequest();

            request.SetBizModel(model);
            request.SetNotifyUrl(NotifyUrl);

            AlipayTradePrecreateResponse response = aopClient.Execute(request);

            if (response != null && response.Code == "10000")
            {
                link = response.QrCode;
            }
            return(link);
        }
コード例 #8
0
        /// <summary>
        /// 预付统一下单
        /// </summary>
        /// <param name="request">提交给统一下单API的参数</param>
        /// <param name="config"></param>
        /// <param name="accessToken">用户授权码</param>
        /// <param name="timeOut">超时时间</param>
        /// <returns>成功时返回,其他抛异常</returns>
        public static async Task <AlipayTradePrecreateResponse> CreateOrderAsync(AlipayTradePrecreateModel request, AlipayConfig config, string accessToken = null, int timeOut = 6)
        {
            IAopClient client      = new AopClient(AlipayConstants.GATEWAYURL, config.AppId, config.PrivateKey, config.Format, config.Version, config.SignType, config.AliPublicKey, config.Charset, config.KeyFromFile);
            var        requestData = new AlipayTradePrecreateRequest();

            requestData.SetNotifyUrl(config.NotifyUrl);
            requestData.SetBizModel(request);

            return(await client.ExecuteAsync(requestData, accessToken));
        }
コード例 #9
0
        public async Task <IActionResult> PreCreate(string out_trade_no, string subject, string total_amount, string body, string notify_url)
        {
            var model = new AlipayTradePrecreateModel()
            {
                Body        = body,
                Subject     = subject,
                TotalAmount = total_amount,
                OutTradeNo  = out_trade_no,
            };
            var req = new AlipayTradePrecreateRequest();

            req.SetBizModel(model);
            req.SetNotifyUrl(notify_url);

            var response = await _client.ExecuteAsync(req);

            return(Ok(response.Body));
        }
コード例 #10
0
ファイル: AlipayService.cs プロジェクト: ym1100/AceSaaS
        // 当面付/扫码支付
        public async Task <AlipayTradePrecreateResponse> PreCreate(PayRequest request)
        {
            var order = OrderService.Get(request.Id);
            var model = new AlipayTradePrecreateModel
            {
                OutTradeNo  = order.Order_SN,
                Subject     = order.Name,
                TotalAmount = order.Order_Money.ToString("n"),
                Body        = order.Remark
            };

            var req = new AlipayTradePrecreateRequest();

            req.SetBizModel(model);
            req.SetNotifyUrl(request.NotifyUrl);

            return(await client.ExecuteAsync(req, options.Value));
        }
コード例 #11
0
        public async Task <IActionResult> PreCreate(AlipayTradePreCreateViewModel viewModel)
        {
            var model = new AlipayTradePrecreateModel()
            {
                OutTradeNo  = viewModel.OutTradeNo,
                Subject     = viewModel.Subject,
                TotalAmount = viewModel.TotalAmount,
                Body        = viewModel.Body,
            };
            var req = new AlipayTradePrecreateRequest();

            req.SetBizModel(model);
            req.SetNotifyUrl(viewModel.NotifyUrl);

            var response = await _client.ExecuteAsync(req);

            ViewData["qrcode"]   = response.QrCode;
            ViewData["response"] = response.Body;
            return(View());
        }
コード例 #12
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");
        }