Ejemplo n.º 1
0
        /// <summary>
        /// 条码支付
        /// </summary>
        public void BarCodePay(decimal amount, string orderNo, string authCode, string subject, string storeId, string terminalId)
        {
            bool success = false;

            //组装业务参数
            var model = new AlipayTradePayModel()
            {
                OutTradeNo     = orderNo,
                TotalAmount    = amount.ToString(),
                Scene          = "bar_code",
                AuthCode       = authCode,
                Subject        = subject,
                StoreId        = storeId,
                TerminalId     = terminalId,
                TimeoutExpress = "2m"
            };

            var request = new AlipayTradePayRequest();

            request.SetBizModel(model);

            AlipayTradePayResponse response = aopClient.Execute(request);

            if (response != null && response.Code == "10000")
            {
                success = true;

                //response.TradeNo 支付宝28位交易号
            }

            //记日志response.ToJson();

            //return success;
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> Pay(string out_trade_no, string subject, string total_amount, string body, string scene, string auth_code)
        {
            var model = new AlipayTradePayModel
            {
                OutTradeNo  = out_trade_no,
                Subject     = subject,
                Scene       = scene,
                AuthCode    = auth_code,
                TotalAmount = total_amount,
                Body        = body
            };
            var req = new AlipayTradePayRequest();

            req.SetBizModel(model);

            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));
        }
Ejemplo n.º 3
0
		public AlipayOrderCreationResult GenerateAlipayPaymentUrl(AlipayOrderModel payment) {
			var payModel = new AlipayTradePayModel {
				Subject = payment.Subject,
				Body = payment.Body,
				OutTradeNo = payment.OrderNo,
				TotalAmount = payment.Amount.ToString("f2"),
				DisablePayChannels = payment.AllowCreditCard ? null : "credit_group",
				ProductCode = "FAST_INSTANT_TRADE_PAY"
			};

			var wapPayRequest = new AlipayTradeWapPayRequest();
			wapPayRequest.SetNotifyUrl(payment.NotifyUrl ?? _options.DefaultNotifyUrl);
			wapPayRequest.SetReturnUrl(payment.ReturnUrl);
			wapPayRequest.SetBizModel(payModel);
			var wapPayResponse = _alipay.SdkExecute(wapPayRequest);

			var pagePayRequest = new AlipayTradePagePayRequest();
			pagePayRequest.SetNotifyUrl(payment.NotifyUrl ?? _options.DefaultNotifyUrl);
			pagePayRequest.SetReturnUrl(payment.ReturnUrl);
			pagePayRequest.SetBizModel(payModel);
			var pagePayResponse = _alipay.SdkExecute(pagePayRequest);

			return new AlipayOrderCreationResult {
				MobileWebPaymentUrl = _options.GatewayUrl + "?" + wapPayResponse.Body,
				DesktopPagePaymentUrl = _options.GatewayUrl + "?" + pagePayResponse.Body
			};
		}
Ejemplo n.º 4
0
        /// <summary>
        /// 统一收单交易支付接口
        /// </summary>
        /// <param name="request">提交给统一下单API的参数</param>
        /// <param name="config"></param>
        /// <param name="timeOut">超时时间</param>
        /// <returns>成功时返回,其他抛异常</returns>
        public static async Task <AlipayTradePayResponse> CreateOrder(AlipayTradePayModel request, AlipayConfig config, 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 AlipayTradePayRequest();

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

            return(await client.ExecuteAsync(requestData));
        }
Ejemplo n.º 5
0
        public async Task <IActionResult> Pay(AlipayTradePayViewModel viewModel)
        {
            var model = new AlipayTradePayModel
            {
                OutTradeNo  = viewModel.OutTradeNo,
                Subject     = viewModel.Subject,
                Scene       = viewModel.Scene,
                AuthCode    = viewModel.AuthCode,
                TotalAmount = viewModel.TotalAmount,
                Body        = viewModel.Body
            };
            var req = new AlipayTradePayRequest();

            req.SetBizModel(model);

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

            return(Ok(response.Body));
        }
Ejemplo n.º 6
0
        public async Task <IActionResult> Pay(string out_trade_no, string scene, string auth_code, string subject, string total_amount, string body, string notify_url)
        {
            var model = new AlipayTradePayModel()
            {
                Scene       = scene,
                AuthCode    = auth_code,
                Body        = body,
                Subject     = subject,
                TotalAmount = total_amount,
                OutTradeNo  = out_trade_no,
            };
            var req = new AlipayTradePayRequest();

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

            var response = await _client.ExecuteAsync(req);

            return(Ok(response.Body));
        }
        public async Task <IActionResult> Pay(AlipayTradePayViewModel viewModel)
        {
            var model = new AlipayTradePayModel
            {
                OutTradeNo  = viewModel.OutTradeNo,
                Subject     = viewModel.Subject,
                Scene       = viewModel.Scene,
                AuthCode    = viewModel.AuthCode,
                TotalAmount = viewModel.TotalAmount,
                Body        = viewModel.Body
            };
            var req = new AlipayTradePayRequest();

            req.SetBizModel(model);

            var response = await _client.ExecuteAsync(req);

            ViewData["response"] = response.Body;
            return(View());
        }
Ejemplo n.º 8
0
        // 条码/声波支付
        public async Task <AlipayTradePayResponse> Pay(PayRequest request)
        {
            var order = OrderService.Get(request.Id);
            var model = new AlipayTradePayModel
            {
                OutTradeNo  = order.Order_SN,
                Subject     = order.Name,
                Scene       = "bar_code", //wave_code
                AuthCode    = request.AuthCode,
                TotalAmount = order.Order_Money.ToString("n"),
                Body        = order.Remark,
                ProductCode = request.ProduceCode ?? "FACE_TO_FACE_PAYMENT"
            };

            var req = new AlipayTradePayRequest();

            req.SetBizModel(model);

            return(await client.ExecuteAsync(req, options.Value));
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 网页版 提交支付即可
        /// </summary>
        public void PostAlipay(string orderNo, string totalFee, string subject, string body)
        {
            // pr单号,即为订单编号;
            //var url = AliPayHelper.CreateRSASignedOrderString(entity.BPR_CODE, 0.01, entity.BPR_CODE);
            //FileLogHelper.WriteLog("signal:"+ url);

            AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();

            request.SetReturnUrl(AlipayConfig.ReturnUrl);
            request.SetNotifyUrl(AlipayConfig.NotifyUrl);
            AlipayTradePayModel model = new AlipayTradePayModel();

            model.Body        = body;
            model.Subject     = subject;
            model.TotalAmount = totalFee;
            model.ProductCode = "FAST_INSTANT_TRADE_PAY";
            model.OutTradeNo  = orderNo;

            request.SetBizModel(model);
            AlipayTradePagePayResponse response = null;

            try
            {
                System.Web.HttpContext.Current.Response.Write("正在跳转支付宝支付");
                IAopClient client = new DefaultAopClient(AlipayConfig.GatewayUrl, AlipayConfig.AppId,
                                                         AlipayConfig.MerchantPrivateKey, "json", "1.0",
                                                         AlipayConfig.SignType, AlipayConfig.AlipayPublicKey, "utf-8");

                response = client.pageExecute(request);
                System.Web.HttpContext.Current.Response.Clear();
                System.Web.HttpContext.Current.Response.ContentType = "text/html";
                System.Web.HttpContext.Current.Response.Write(response.Body);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Ejemplo n.º 10
0
        public async Task <IActionResult> Pay(AlipayTradePayViewModel viewModel)
        {
            if (_Interceptor != null)
            {
                return(Ok("this is _Interceptor"));
            }
            var model = new AlipayTradePayModel
            {
                OutTradeNo  = viewModel.OutTradeNo,
                Subject     = viewModel.Subject,
                Scene       = viewModel.Scene,
                AuthCode    = viewModel.AuthCode,
                TotalAmount = viewModel.TotalAmount,
                Body        = viewModel.Body
            };
            var req = new AlipayTradePayRequest();

            req.SetBizModel(model);

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

            ViewData["response"] = response.Body;
            return(View());
        }
Ejemplo n.º 11
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");
        }