using System.Threading.Tasks; using Essensoft.AspNetCore.Payment.QPay; using Essensoft.AspNetCore.Payment.QPay.Request; using Essensoft.AspNetCore.Payment.Security; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using WebApplicationSample.Models; namespace WebApplicationSample.Controllers { public class QPayController : Controller { private readonly IQPayClient _client; private readonly IOptions _optionsAccessor; public QPayController(IQPayClient client, IOptions optionsAccessor) { _client = client; _optionsAccessor = optionsAccessor; } /// /// QQ钱包指引页 /// /// public IActionResult Index() { return View(); } /// /// 付款码支付 /// /// [HttpGet] public IActionResult MicroPay() { return View(); } /// /// 付款码支付 /// /// /// [HttpPost] public async Task MicroPay(QPayMicroPayViewModel viewModel) { var request = new QPayMicroPayRequest { OutTradeNo = viewModel.OutTradeNo, Body = viewModel.Body, FeeType = viewModel.FeeType, TotalFee = viewModel.TotalFee, SpBillCreateIp = viewModel.SpBillCreateIp, DeviceInfo = viewModel.DeviceInfo, AuthCode = viewModel.AuthCode, TradeType = viewModel.TradeType, NotifyUrl = viewModel.NotifyUrl }; var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); ViewData["response"] = response.ResponseBody; return View(); } /// /// 扫码支付 /// /// [HttpGet] public IActionResult QrCodePay() { return View(); } /// /// 扫码支付 /// /// /// [HttpPost] public async Task QrCodePay(QPayUnifiedOrderViewModel viewModel) { var request = new QPayUnifiedOrderRequest { OutTradeNo = viewModel.OutTradeNo, Body = viewModel.Body, FeeType = viewModel.FeeType, TotalFee = viewModel.TotalFee, SpBillCreateIp = viewModel.SpBillCreateIp, TradeType = viewModel.TradeType, NotifyUrl = viewModel.NotifyUrl }; var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); ViewData["qrcode"] = response.CodeUrl; ViewData["response"] = response.ResponseBody; return View(); } /// /// 公众号支付 /// /// [HttpGet] public IActionResult PubPay() { return View(); } /// /// 公众号支付 /// /// /// [HttpPost] public async Task PubPay(QPayUnifiedOrderViewModel viewModel) { var request = new QPayUnifiedOrderRequest { OutTradeNo = viewModel.OutTradeNo, Body = viewModel.Body, FeeType = viewModel.FeeType, TotalFee = viewModel.TotalFee, SpBillCreateIp = viewModel.SpBillCreateIp, TradeType = viewModel.TradeType, NotifyUrl = viewModel.NotifyUrl }; var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); ViewData["response"] = response.ResponseBody; return View(); } /// /// APP支付 /// /// [HttpGet] public IActionResult AppPay() { return View(); } /// /// APP支付 /// /// /// [HttpPost] public async Task AppPay(QPayUnifiedOrderViewModel viewModel) { var request = new QPayUnifiedOrderRequest { OutTradeNo = viewModel.OutTradeNo, Body = viewModel.Body, FeeType = viewModel.FeeType, TotalFee = viewModel.TotalFee, SpBillCreateIp = viewModel.SpBillCreateIp, TradeType = viewModel.TradeType, NotifyUrl = viewModel.NotifyUrl }; var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); ViewData["response"] = response.ResponseBody; return View(); } /// /// 订单查询 /// /// [HttpGet] public IActionResult OrderQuery() { return View(); } /// /// 订单查询 /// /// /// [HttpPost] public async Task OrderQuery(QPayOrderQueryViewModel viewModel) { var request = new QPayOrderQueryRequest { TransactionId = viewModel.TransactionId, OutTradeNo = viewModel.OutTradeNo }; var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); ViewData["response"] = response.ResponseBody; return View(); } /// /// 撤销订单 /// /// [HttpGet] public IActionResult Reverse() { return View(); } /// /// 撤销订单 /// /// /// [HttpPost] public async Task Reverse(QPayReverseViewModel viewModel) { var request = new QPayReverseRequest { OutTradeNo = viewModel.OutTradeNo }; var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); ViewData["response"] = response.ResponseBody; return View(); } /// /// 关闭订单 /// /// [HttpGet] public IActionResult CloseOrder() { return View(); } /// /// 关闭订单 /// /// /// [HttpPost] public async Task CloseOrder(QPayCloseOrderViewModel viewModel) { var request = new QPayCloseOrderRequest { OutTradeNo = viewModel.OutTradeNo }; var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); ViewData["response"] = response.ResponseBody; return View(); } /// /// 申请退款 /// /// [HttpGet] public IActionResult Refund() { return View(); } /// /// 申请退款 /// /// /// [HttpPost] public async Task Refund(QPayRefundViewModel viewModel) { var request = new QPayRefundRequest { OutRefundNo = viewModel.OutRefundNo, TransactionId = viewModel.TransactionId, OutTradeNo = viewModel.OutTradeNo, RefundFee = viewModel.RefundFee, OpUserId = viewModel.OpUserId, OpUserPasswd = MD5.Compute(viewModel.OpUserPasswd).ToUpper(), }; var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); ViewData["response"] = response.ResponseBody; return View(); } /// /// 退款查询 /// /// [HttpGet] public IActionResult RefundQuery() { return View(); } /// /// 退款查询 /// /// /// [HttpPost] public async Task RefundQuery(QPayRefundQueryViewModel viewModel) { var request = new QPayRefundQueryRequest { RefundId = viewModel.RefundId, OutRefundNo = viewModel.OutRefundNo, TransactionId = viewModel.TransactionId, OutTradeNo = viewModel.OutTradeNo }; var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); ViewData["response"] = response.ResponseBody; return View(); } /// /// 对账单下载 /// /// [HttpGet] public IActionResult StatementDown() { return View(); } /// /// 对账单下载 /// /// /// [HttpPost] public async Task StatementDown(QPayStatementDownViewModel viewModel) { var request = new QPaySpDownloadStatementDownRequest { BillDate = viewModel.BillDate, BillType = viewModel.BillType, TarType = viewModel.TarType }; var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); ViewData["response"] = response.ResponseBody; return View(); } /// /// 企业付款 /// /// [HttpGet] public IActionResult B2CPay() { return View(); } /// /// 企业付款 /// /// /// [HttpPost] public async Task B2CPay(QPayB2CPayViewModel viewModel) { var request = new QPayEPayB2CRequest { OpenId = viewModel.OpenId, Uin = viewModel.Uin, OutTradeNo = viewModel.OutTradeNo, TotalFee = viewModel.TotalFee, Memo = viewModel.Memo, CheckRealName = viewModel.CheckRealName, OpUserId = viewModel.OpUserId, OpUserPasswd = MD5.Compute(viewModel.OpUserPasswd).ToUpper(), SpBillCreateIp = viewModel.SpBillCreateIp, NotifyUrl = viewModel.NotifyUrl, }; var response = await _client.ExecuteAsync(request, _optionsAccessor.Value); ViewData["response"] = response.ResponseBody; return View(); } } }