using System.Threading.Tasks; using Essensoft.AspNetCore.Payment.WeChatPay; using Essensoft.AspNetCore.Payment.WeChatPay.Request; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using WebApplicationSample.Models; namespace WebApplicationSample.Controllers { public class WeChatPayController : Controller { private readonly IWeChatPayClient _client; public WeChatPayController(IWeChatPayClient client) { _client = client; } public IActionResult Index() { return View(); } [HttpGet] public IActionResult MicroPay() { return View(); } [HttpPost] public async Task MicroPay(WeChatPayMicroPayViewModel viewModel) { var request = new WeChatPayMicroPayRequest { Body = viewModel.Body, OutTradeNo = viewModel.OutTradeNo, TotalFee = viewModel.TotalFee, SpbillCreateIp = viewModel.SpbillCreateIp, AuthCode = viewModel.AuthCode }; var response = await _client.ExecuteAsync(request); ViewData["response"] = response.Body; return View(); } [HttpGet] public IActionResult PubPay() { return View(); } [HttpPost] public async Task PubPay(WeChatPayPubPayViewModel viewModel) { var request = new WeChatPayUnifiedOrderRequest { Body = viewModel.Body, OutTradeNo = viewModel.OutTradeNo, TotalFee = viewModel.TotalFee, SpbillCreateIp = viewModel.SpbillCreateIp, NotifyUrl = viewModel.NotifyUrl, TradeType = viewModel.TradeType, OpenId = viewModel.OpenId }; var response = await _client.ExecuteAsync(request); if (response.ReturnCode == "SUCCESS" && response.ResultCode == "SUCCESS") { var req = new WeChatPayH5CallPaymentRequest { Package = "prepay_id=" + response.PrepayId }; var parameter = await _client.ExecuteAsync(req); // 将参数(parameter)给 公众号前端 让他在微信内H5调起支付(https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6) ViewData["parameter"] = JsonConvert.SerializeObject(parameter); ViewData["response"] = response.Body; return View(); } ViewData["response"] = response.Body; return View(); } [HttpGet] public IActionResult QRPay() { return View(); } [HttpPost] public async Task QRPay(WeChatPayQRPayViewModel viewModel) { var request = new WeChatPayUnifiedOrderRequest { Body = viewModel.Body, OutTradeNo = viewModel.OutTradeNo, TotalFee = viewModel.TotalFee, SpbillCreateIp = viewModel.SpbillCreateIp, NotifyUrl = viewModel.NotifyUrl, TradeType = viewModel.TradeType }; var response = await _client.ExecuteAsync(request); // response.CodeUrl 给前端生成二维码 ViewData["qrcode"] = response.CodeUrl; ViewData["response"] = response.Body; return View(); } [HttpGet] public IActionResult AppPay() { return View(); } [HttpPost] public async Task AppPay(WeChatPayAppPayViewModel viewModel) { var request = new WeChatPayUnifiedOrderRequest { Body = viewModel.Body, OutTradeNo = viewModel.OutTradeNo, TotalFee = viewModel.TotalFee, SpbillCreateIp = viewModel.SpbillCreateIp, NotifyUrl = viewModel.NotifyUrl, TradeType = viewModel.TradeType }; var response = await _client.ExecuteAsync(request); if (response.ReturnCode == "SUCCESS" && response.ResultCode == "SUCCESS") { var req = new WeChatPayAppCallPaymentRequest { PrepayId = response.PrepayId }; var parameter = await _client.ExecuteAsync(req); // 将参数(parameter)给 ios/android端 让他调起微信APP(https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5) ViewData["parameter"] = JsonConvert.SerializeObject(parameter); ViewData["response"] = response.Body; return View(); } ViewData["response"] = response.Body; return View(); } [HttpGet] public IActionResult H5Pay() { return View(); } [HttpPost] public async Task H5Pay(WeChatPayH5PayViewModel viewModel) { var request = new WeChatPayUnifiedOrderRequest { Body = viewModel.Body, OutTradeNo = viewModel.OutTradeNo, TotalFee = viewModel.TotalFee, SpbillCreateIp = viewModel.SpbillCreateIp, NotifyUrl = viewModel.NotifyUrl, TradeType = viewModel.TradeType }; var response = await _client.ExecuteAsync(request); // mweb_url为拉起微信支付收银台的中间页面,可通过访问该url来拉起微信客户端,完成支付,mweb_url的有效期为5分钟。 return Redirect(response.MwebUrl); } [HttpGet] public IActionResult LiteAppPay() { return View(); } [HttpPost] public async Task LiteAppPay(WeChatPayLiteAppPayViewModel viewModel) { var request = new WeChatPayUnifiedOrderRequest { Body = viewModel.Body, OutTradeNo = viewModel.OutTradeNo, TotalFee = viewModel.TotalFee, SpbillCreateIp = viewModel.SpbillCreateIp, NotifyUrl = viewModel.NotifyUrl, TradeType = viewModel.TradeType, OpenId = viewModel.OpenId }; var response = await _client.ExecuteAsync(request); if (response.ReturnCode == "SUCCESS" && response.ResultCode == "SUCCESS") { var req = new WeChatPayLiteAppCallPaymentRequest { Package = "prepay_id=" + response.PrepayId }; var parameter = await _client.ExecuteAsync(req); // 将参数(parameter)给 小程序前端 让他调起支付API(https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5) ViewData["parameter"] = JsonConvert.SerializeObject(parameter); ViewData["response"] = response.Body; return View(); } ViewData["response"] = response.Body; return View(); } [HttpGet] public IActionResult OrderQuery() { return View(); } [HttpPost] public async Task OrderQuery(WeChatPayOrderQueryViewModel viewModel) { var request = new WeChatPayOrderQueryRequest { TransactionId = viewModel.TransactionId, OutTradeNo = viewModel.OutTradeNo }; var response = await _client.ExecuteAsync(request); ViewData["response"] = response.Body; return View(); } [HttpGet] public IActionResult Reverse() { return View(); } [HttpPost] public async Task Reverse(WeChatPayReverseViewModel viewModel) { var request = new WeChatPayReverseRequest { TransactionId = viewModel.TransactionId, OutTradeNo = viewModel.OutTradeNo }; var response = await _client.ExecuteAsync(request, "wechatpayCertificateName"); ViewData["response"] = response.Body; return View(); } [HttpGet] public IActionResult CloseOrder() { return View(); } [HttpPost] public async Task CloseOrder(WeChatPayCloseOrderViewModel viewModel) { var request = new WeChatPayCloseOrderRequest { OutTradeNo = viewModel.OutTradeNo }; var response = await _client.ExecuteAsync(request); ViewData["response"] = response.Body; return View(); } [HttpGet] public IActionResult Refund() { return View(); } [HttpPost] public async Task Refund(WeChatPayRefundViewModel viewModel) { var request = new WeChatPayRefundRequest { OutRefundNo = viewModel.OutRefundNo, TransactionId = viewModel.TransactionId, OutTradeNo = viewModel.OutTradeNo, TotalFee = viewModel.TotalFee, RefundFee = viewModel.RefundFee, RefundDesc = viewModel.RefundDesc, NotifyUrl = viewModel.NotifyUrl }; var response = await _client.ExecuteAsync(request, "wechatpayCertificateName"); ViewData["response"] = response.Body; return View(); } [HttpGet] public IActionResult RefundQuery() { return View(); } [HttpPost] public async Task RefundQuery(WeChatPayRefundQueryViewModel viewModel) { var request = new WeChatPayRefundQueryRequest { RefundId = viewModel.RefundId, OutRefundNo = viewModel.OutRefundNo, TransactionId = viewModel.TransactionId, OutTradeNo = viewModel.OutTradeNo }; var response = await _client.ExecuteAsync(request); ViewData["response"] = response.Body; return View(); } [HttpGet] public IActionResult DownloadBill() { return View(); } [HttpPost] public async Task DownloadBill(WeChatPayDownloadBillViewModel viewModel) { var request = new WeChatPayDownloadBillRequest { BillDate = viewModel.BillDate, BillType = viewModel.BillType, TarType = viewModel.TarType }; var response = await _client.ExecuteAsync(request); ViewData["response"] = response.Body; return View(); } [HttpGet] public IActionResult DownloadFundFlow() { return View(); } [HttpPost] public async Task DownloadFundFlow(WeChatPayDownloadFundFlowViewModel viewModel) { var request = new WeChatPayDownloadFundFlowRequest { BillDate = viewModel.BillDate, AccountType = viewModel.AccountType, TarType = viewModel.TarType }; var response = await _client.ExecuteAsync(request, "wechatpayCertificateName"); ViewData["response"] = response.Body; return View(); } [HttpGet] public IActionResult Transfers() { return View(); } [HttpPost] public async Task Transfers(WeChatPayTransfersViewModel viewModel) { var request = new WeChatPayTransfersRequest { PartnerTradeNo = viewModel.PartnerTradeNo, OpenId = viewModel.OpenId, CheckName = viewModel.CheckName, ReUserName = viewModel.ReUserName, Amount = viewModel.Amount, Desc = viewModel.Desc, SpbillCreateIp = viewModel.SpbillCreateIp }; var response = await _client.ExecuteAsync(request, "wechatpayCertificateName"); ViewData["response"] = response.Body; return View(); } [HttpGet] public IActionResult GetTransferInfo() { return View(); } [HttpPost] public async Task GetTransferInfo(WeChatPayGetTransferInfoViewModel viewModel) { var request = new WeChatPayGetTransferInfoRequest { PartnerTradeNo = viewModel.PartnerTradeNo }; var response = await _client.ExecuteAsync(request, "wechatpayCertificateName"); ViewData["response"] = response.Body; return View(); } [HttpGet] public IActionResult PayBank() { return View(); } [HttpPost] public async Task PayBank(WeChatPayPayBankViewModel viewModel) { var request = new WeChatPayPayBankRequest { PartnerTradeNo = viewModel.PartnerTradeNo, EncBankNo = viewModel.EncBankNo, EncTrueName = viewModel.EncTrueName, BankCode = viewModel.BankCode, Amount = viewModel.Amount, Desc = viewModel.Desc }; var response = await _client.ExecuteAsync(request, "wechatpayCertificateName"); ViewData["response"] = response.Body; return View(); } [HttpGet] public IActionResult QueryBank() { return View(); } [HttpPost] public async Task QueryBank(WeChatPayQueryBankViewModel viewModel) { var request = new WeChatPayQueryBankRequest { PartnerTradeNo = viewModel.PartnerTradeNo }; var response = await _client.ExecuteAsync(request, "wechatpayCertificateName"); ViewData["response"] = response.Body; return View(); } [HttpGet] [HttpPost] public async Task GetPublicKey() { if (Request.Method == "POST") { var request = new WeChatPayGetPublicKeyRequest(); var response = await _client.ExecuteAsync(request, "wechatpayCertificateName"); ViewData["response"] = response.Body; return View(); } return View(); } } }