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 QrCodePay()
{
return View();
}
///
/// 扫码支付
///
///
///
[HttpPost]
public async Task QrCodePay(WeChatPayQrCodePayViewModel 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();
}
///
/// APP支付
///
///
[HttpGet]
public IActionResult AppPay()
{
return View();
}
///
/// APP支付
///
///
///
[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();
}
///
/// H5支付
///
///
[HttpGet]
public IActionResult H5Pay()
{
return View();
}
///
/// H5支付
///
///
///
[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();
}
///
/// 获取RSA加密公钥
///
///
[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();
}
}
}