using System.Text; using System.Threading.Tasks; using Essensoft.Paylink.Alipay; using Essensoft.Paylink.Alipay.Domain; using Essensoft.Paylink.Alipay.Request; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using WebApplicationSample.Models; namespace WebApplicationSample.Controllers { public class AlipayController : Controller { private readonly ILogger _logger; private readonly IAlipayClient _client; private readonly IOptions _optionsAccessor; public AlipayController(ILogger logger, IAlipayClient client, IOptions optionsAccessor) { _logger = logger; _client = client; _optionsAccessor = optionsAccessor; } /// /// 支付宝指引页 /// [HttpGet] public IActionResult Index() { return View(); } /// /// 当面付-扫码支付 /// [HttpGet] public IActionResult PreCreate() { return View(); } /// /// 当面付-扫码支付 /// [HttpPost] public async Task 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.CertificateExecuteAsync(req, _optionsAccessor.Value.Alipay); if (!response.IsError) { ViewData["qrcode"] = response.QrCode; } ViewData["response"] = response.Body; return View(); } /// /// 当面付-二维码/条码/声波支付 /// [HttpGet] public IActionResult Pay() { return View(); } /// /// 当面付-二维码/条码/声波支付 /// [HttpPost] public async Task 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.Alipay); ViewData["response"] = response.Body; return View(); } /// /// APP支付 /// [HttpGet] public IActionResult AppPay() { return View(); } /// /// APP支付 /// [HttpPost] public async Task AppPay(AlipayTradeAppPayViewModel viewModel) { var model = new AlipayTradeAppPayModel { OutTradeNo = viewModel.OutTradeNo, Subject = viewModel.Subject, ProductCode = viewModel.ProductCode, TotalAmount = viewModel.TotalAmount, Body = viewModel.Body }; var req = new AlipayTradeAppPayRequest(); req.SetBizModel(model); req.SetNotifyUrl(viewModel.NotifyUrl); var response = await _client.SdkExecuteAsync(req, _optionsAccessor.Value.Alipay); // 将response.Body给 ios、android端,由其去完成调起支付宝APP。 // 客户端 Android 集成流程: https://opendocs.alipay.com/open/204/105296/ // 客户端 iOS 集成流程: https://opendocs.alipay.com/open/204/105295/ ViewData["response"] = response.Body; return View(); } /// /// 电脑网站支付 /// [HttpGet] public IActionResult PagePay() { return View(); } /// /// 电脑网站支付 /// /// [HttpPost] public async Task PagePay(AlipayTradePagePayViewModel viewModel) { var model = new AlipayTradePagePayModel { Body = viewModel.Body, Subject = viewModel.Subject, TotalAmount = viewModel.TotalAmount, OutTradeNo = viewModel.OutTradeNo, ProductCode = viewModel.ProductCode }; var req = new AlipayTradePagePayRequest(); req.SetBizModel(model); req.SetNotifyUrl(viewModel.NotifyUrl); req.SetReturnUrl(viewModel.ReturnUrl); var response = await _client.PageExecuteAsync(req, _optionsAccessor.Value.Alipay); return Content(response.Body, "text/html", Encoding.UTF8); } /// /// 手机网站支付 /// [HttpGet] public IActionResult WapPay() { return View(); } /// /// 手机网站支付 /// [HttpPost] public async Task WapPay(AlipayTradeWapPayViewModel viewMode) { var model = new AlipayTradeWapPayModel { Body = viewMode.Body, Subject = viewMode.Subject, TotalAmount = viewMode.TotalAmount, OutTradeNo = viewMode.OutTradeNo, ProductCode = viewMode.ProductCode }; var req = new AlipayTradeWapPayRequest(); req.SetBizModel(model); req.SetNotifyUrl(viewMode.NotifyUrl); req.SetReturnUrl(viewMode.ReturnUrl); var response = await _client.PageExecuteAsync(req, _optionsAccessor.Value.Alipay); return Content(response.Body, "text/html", Encoding.UTF8); } /// /// 交易查询 /// [HttpGet] public IActionResult Query() { return View(); } /// /// 交易查询 /// [HttpPost] public async Task Query(AlipayTradeQueryViewModel viewMode) { var model = new AlipayTradeQueryModel { OutTradeNo = viewMode.OutTradeNo, TradeNo = viewMode.TradeNo }; var req = new AlipayTradeQueryRequest(); req.SetBizModel(model); var response = await _client.CertificateExecuteAsync(req, _optionsAccessor.Value.Alipay); ViewData["response"] = ((AlipayResponse)response).Body; return View(); } /// /// 交易退款 /// [HttpGet] public IActionResult Refund() { return View(); } /// /// 交易退款 /// [HttpPost] public async Task Refund(AlipayTradeRefundViewModel viewMode) { var model = new AlipayTradeRefundModel { OutTradeNo = viewMode.OutTradeNo, TradeNo = viewMode.TradeNo, RefundAmount = viewMode.RefundAmount, OutRequestNo = viewMode.OutRequestNo, RefundReason = viewMode.RefundReason }; var req = new AlipayTradeRefundRequest(); req.SetBizModel(model); var response = await _client.CertificateExecuteAsync(req, _optionsAccessor.Value.Alipay); ViewData["response"] = response.Body; return View(); } /// /// 退款查询 /// [HttpGet] public IActionResult RefundQuery() { return View(); } /// /// 退款查询 /// [HttpPost] public async Task RefundQuery(AlipayTradeRefundQueryViewModel viewMode) { var model = new AlipayTradeFastpayRefundQueryModel { OutTradeNo = viewMode.OutTradeNo, TradeNo = viewMode.TradeNo, OutRequestNo = viewMode.OutRequestNo }; var req = new AlipayTradeFastpayRefundQueryRequest(); req.SetBizModel(model); var response = await _client.CertificateExecuteAsync(req, _optionsAccessor.Value.Alipay); ViewData["response"] = response.Body; return View(); } /// /// 交易关闭 /// [HttpGet] public IActionResult Close() { return View(); } /// /// 交易关闭 /// [HttpPost] public async Task Close(AlipayTradeCloseViewModel viewMode) { var model = new AlipayTradeCloseModel { OutTradeNo = viewMode.OutTradeNo, TradeNo = viewMode.TradeNo, }; var req = new AlipayTradeCloseRequest(); req.SetBizModel(model); req.SetNotifyUrl(viewMode.NotifyUrl); var response = await _client.CertificateExecuteAsync(req, _optionsAccessor.Value.Alipay); ViewData["response"] = response.Body; return View(); } /// /// 统一转账 /// [HttpGet] public IActionResult Transfer() { return View(); } /// /// 统一转账 /// [HttpPost] public async Task Transfer(AlipayTransferViewModel viewMode) { var model = new AlipayFundTransUniTransferModel { OutBizNo = viewMode.OutBizNo, TransAmount = viewMode.TransAmount, ProductCode = viewMode.ProductCode, BizScene = viewMode.BizScene, PayeeInfo = new Participant { Identity = viewMode.PayeeIdentity, IdentityType = viewMode.PayeeIdentityType, Name = viewMode.PayeeName }, Remark = viewMode.Remark }; var req = new AlipayFundTransUniTransferRequest(); req.SetBizModel(model); var response = await _client.CertificateExecuteAsync(req, _optionsAccessor.Value.Alipay); ViewData["response"] = response.Body; return View(); } /// /// 查询统一转账订单 /// [HttpGet] public IActionResult TransQuery() { return View(); } /// /// 查询统一转账订单 /// [HttpPost] public async Task TransQuery(AlipayTransQueryViewModel viewMode) { var model = new AlipayFundTransCommonQueryModel { OutBizNo = viewMode.OutBizNo, OrderId = viewMode.OrderId }; var req = new AlipayFundTransCommonQueryRequest(); req.SetBizModel(model); var response = await _client.CertificateExecuteAsync(req, _optionsAccessor.Value.Alipay); ViewData["response"] = response.Body; return View(); } /// /// 余额查询 /// [HttpGet] public IActionResult AccountQuery() { return View(); } /// /// 余额查询 /// [HttpPost] public async Task AccountQuery(AlipayAccountQueryViewModel viewModel) { var model = new AlipayFundAccountQueryModel { AlipayUserId = viewModel.AlipayUserId, AccountType = viewModel.AccountType }; var req = new AlipayFundAccountQueryRequest(); req.SetBizModel(model); var response = await _client.CertificateExecuteAsync(req, _optionsAccessor.Value.Alipay); ViewData["response"] = response.Body; return View(); } } }