AlipayController.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. using System.Text;
  2. using System.Threading.Tasks;
  3. using Essensoft.AspNetCore.Payment.Alipay;
  4. using Essensoft.AspNetCore.Payment.Alipay.Domain;
  5. using Essensoft.AspNetCore.Payment.Alipay.Notify;
  6. using Essensoft.AspNetCore.Payment.Alipay.Request;
  7. using Microsoft.AspNetCore.Mvc;
  8. using Microsoft.Extensions.Options;
  9. using WebApplicationSample.Models;
  10. namespace WebApplicationSample.Controllers
  11. {
  12. public class AlipayController : Controller
  13. {
  14. private readonly IAlipayClient _client;
  15. private readonly IAlipayNotifyClient _notifyClient;
  16. private readonly IOptions<AlipayOptions> _optionsAccessor;
  17. public AlipayController(IAlipayClient client, IAlipayNotifyClient notifyClient, IOptions<AlipayOptions> optionsAccessor)
  18. {
  19. _client = client;
  20. _notifyClient = notifyClient;
  21. _optionsAccessor = optionsAccessor;
  22. }
  23. /// <summary>
  24. /// 支付宝指引页
  25. /// </summary>
  26. [HttpGet]
  27. public IActionResult Index()
  28. {
  29. return View();
  30. }
  31. /// <summary>
  32. /// 当面付-扫码支付
  33. /// </summary>
  34. [HttpGet]
  35. public IActionResult PreCreate()
  36. {
  37. return View();
  38. }
  39. /// <summary>
  40. /// 当面付-扫码支付
  41. /// </summary>
  42. [HttpPost]
  43. public async Task<IActionResult> PreCreate(AlipayTradePreCreateViewModel viewModel)
  44. {
  45. var model = new AlipayTradePrecreateModel
  46. {
  47. OutTradeNo = viewModel.OutTradeNo,
  48. Subject = viewModel.Subject,
  49. TotalAmount = viewModel.TotalAmount,
  50. Body = viewModel.Body
  51. };
  52. var req = new AlipayTradePrecreateRequest();
  53. req.SetBizModel(model);
  54. req.SetNotifyUrl(viewModel.NotifyUrl);
  55. var response = await _client.ExecuteAsync(req, _optionsAccessor.Value);
  56. ViewData["qrcode"] = response.QrCode;
  57. ViewData["response"] = response.ResponseBody;
  58. return View();
  59. }
  60. /// <summary>
  61. /// 当面付-二维码/条码/声波支付
  62. /// </summary>
  63. [HttpGet]
  64. public IActionResult Pay()
  65. {
  66. return View();
  67. }
  68. /// <summary>
  69. /// 当面付-二维码/条码/声波支付
  70. /// </summary>
  71. [HttpPost]
  72. public async Task<IActionResult> Pay(AlipayTradePayViewModel viewModel)
  73. {
  74. var model = new AlipayTradePayModel
  75. {
  76. OutTradeNo = viewModel.OutTradeNo,
  77. Subject = viewModel.Subject,
  78. Scene = viewModel.Scene,
  79. AuthCode = viewModel.AuthCode,
  80. TotalAmount = viewModel.TotalAmount,
  81. Body = viewModel.Body
  82. };
  83. var req = new AlipayTradePayRequest();
  84. req.SetBizModel(model);
  85. var response = await _client.ExecuteAsync(req, _optionsAccessor.Value);
  86. ViewData["response"] = response.ResponseBody;
  87. return View();
  88. }
  89. /// <summary>
  90. /// APP支付
  91. /// </summary>
  92. [HttpGet]
  93. public IActionResult AppPay()
  94. {
  95. return View();
  96. }
  97. /// <summary>
  98. /// APP支付
  99. /// </summary>
  100. [HttpPost]
  101. public async Task<IActionResult> AppPay(AlipayTradeAppPayViewModel viewModel)
  102. {
  103. var model = new AlipayTradeAppPayModel
  104. {
  105. OutTradeNo = viewModel.OutTradeNo,
  106. Subject = viewModel.Subject,
  107. ProductCode = viewModel.ProductCode,
  108. TotalAmount = viewModel.TotalAmount,
  109. Body = viewModel.Body
  110. };
  111. var req = new AlipayTradeAppPayRequest();
  112. req.SetBizModel(model);
  113. req.SetNotifyUrl(viewModel.NotifyUrl);
  114. var response = await _client.SdkExecuteAsync(req, _optionsAccessor.Value);
  115. //将response.Body给 ios/android端 由其去调起支付宝APP(https://docs.open.alipay.com/204/105296/ https://docs.open.alipay.com/204/105295/)
  116. ViewData["response"] = response.ResponseBody;
  117. return View();
  118. }
  119. /// <summary>
  120. /// 电脑网站支付
  121. /// </summary>
  122. [HttpGet]
  123. public IActionResult PagePay()
  124. {
  125. return View();
  126. }
  127. /// <summary>
  128. /// 电脑网站支付
  129. /// </summary>
  130. /// <param name="viewModel"></param>
  131. [HttpPost]
  132. public async Task<IActionResult> PagePay(AlipayTradePagePayViewModel viewModel)
  133. {
  134. var model = new AlipayTradePagePayModel
  135. {
  136. Body = viewModel.Body,
  137. Subject = viewModel.Subject,
  138. TotalAmount = viewModel.TotalAmount,
  139. OutTradeNo = viewModel.OutTradeNo,
  140. ProductCode = viewModel.ProductCode
  141. };
  142. var req = new AlipayTradePagePayRequest();
  143. req.SetBizModel(model);
  144. req.SetNotifyUrl(viewModel.NotifyUrl);
  145. req.SetReturnUrl(viewModel.ReturnUrl);
  146. var response = await _client.PageExecuteAsync(req, _optionsAccessor.Value);
  147. return Content(response.ResponseBody, "text/html", Encoding.UTF8);
  148. }
  149. /// <summary>
  150. /// 手机网站支付
  151. /// </summary>
  152. [HttpGet]
  153. public IActionResult WapPay()
  154. {
  155. return View();
  156. }
  157. /// <summary>
  158. /// 手机网站支付
  159. /// </summary>
  160. [HttpPost]
  161. public async Task<IActionResult> WapPay(AlipayTradeWapPayViewModel viewMode)
  162. {
  163. var model = new AlipayTradeWapPayModel
  164. {
  165. Body = viewMode.Body,
  166. Subject = viewMode.Subject,
  167. TotalAmount = viewMode.TotalAmount,
  168. OutTradeNo = viewMode.OutTradeNo,
  169. ProductCode = viewMode.ProductCode
  170. };
  171. var req = new AlipayTradeWapPayRequest();
  172. req.SetBizModel(model);
  173. req.SetNotifyUrl(viewMode.NotifyUrl);
  174. req.SetReturnUrl(viewMode.ReturnUrl);
  175. var response = await _client.PageExecuteAsync(req, _optionsAccessor.Value);
  176. return Content(response.ResponseBody, "text/html", Encoding.UTF8);
  177. }
  178. /// <summary>
  179. /// 交易查询
  180. /// </summary>
  181. [HttpGet]
  182. public IActionResult Query()
  183. {
  184. return View();
  185. }
  186. /// <summary>
  187. /// 交易查询
  188. /// </summary>
  189. [HttpPost]
  190. public async Task<IActionResult> Query(AlipayTradeQueryViewModel viewMode)
  191. {
  192. var model = new AlipayTradeQueryModel
  193. {
  194. OutTradeNo = viewMode.OutTradeNo,
  195. TradeNo = viewMode.TradeNo
  196. };
  197. var req = new AlipayTradeQueryRequest();
  198. req.SetBizModel(model);
  199. var response = await _client.ExecuteAsync(req, _optionsAccessor.Value);
  200. ViewData["response"] = response.ResponseBody;
  201. return View();
  202. }
  203. /// <summary>
  204. /// 交易退款
  205. /// </summary>
  206. [HttpGet]
  207. public IActionResult Refund()
  208. {
  209. return View();
  210. }
  211. /// <summary>
  212. /// 交易退款
  213. /// </summary>
  214. [HttpPost]
  215. public async Task<IActionResult> Refund(AlipayTradeRefundViewModel viewMode)
  216. {
  217. var model = new AlipayTradeRefundModel
  218. {
  219. OutTradeNo = viewMode.OutTradeNo,
  220. TradeNo = viewMode.TradeNo,
  221. RefundAmount = viewMode.RefundAmount,
  222. OutRequestNo = viewMode.OutRequestNo,
  223. RefundReason = viewMode.RefundReason
  224. };
  225. var req = new AlipayTradeRefundRequest();
  226. req.SetBizModel(model);
  227. var response = await _client.ExecuteAsync(req, _optionsAccessor.Value);
  228. ViewData["response"] = response.ResponseBody;
  229. return View();
  230. }
  231. /// <summary>
  232. /// 退款查询
  233. /// </summary>
  234. [HttpGet]
  235. public IActionResult RefundQuery()
  236. {
  237. return View();
  238. }
  239. /// <summary>
  240. /// 退款查询
  241. /// </summary>
  242. [HttpPost]
  243. public async Task<IActionResult> RefundQuery(AlipayTradeRefundQueryViewModel viewMode)
  244. {
  245. var model = new AlipayTradeFastpayRefundQueryModel
  246. {
  247. OutTradeNo = viewMode.OutTradeNo,
  248. TradeNo = viewMode.TradeNo,
  249. OutRequestNo = viewMode.OutRequestNo
  250. };
  251. var req = new AlipayTradeFastpayRefundQueryRequest();
  252. req.SetBizModel(model);
  253. var response = await _client.ExecuteAsync(req, _optionsAccessor.Value);
  254. ViewData["response"] = response.ResponseBody;
  255. return View();
  256. }
  257. /// <summary>
  258. /// 单笔转账到支付宝账户
  259. /// </summary>
  260. [HttpGet]
  261. public IActionResult Transfer()
  262. {
  263. return View();
  264. }
  265. /// <summary>
  266. /// 单笔转账到支付宝账户
  267. /// </summary>
  268. [HttpPost]
  269. public async Task<IActionResult> Transfer(AlipayTransferViewModel viewMode)
  270. {
  271. var model = new AlipayFundTransToaccountTransferModel
  272. {
  273. OutBizNo = viewMode.OutBizNo,
  274. PayeeType = viewMode.PayeeType,
  275. PayeeAccount = viewMode.PayeeAccount,
  276. Amount = viewMode.Amount,
  277. Remark = viewMode.Remark
  278. };
  279. var req = new AlipayFundTransToaccountTransferRequest();
  280. req.SetBizModel(model);
  281. var response = await _client.ExecuteAsync(req, _optionsAccessor.Value);
  282. ViewData["response"] = response.ResponseBody;
  283. return View();
  284. }
  285. /// <summary>
  286. /// 查询转账订单
  287. /// </summary>
  288. [HttpGet]
  289. public IActionResult TransQuery()
  290. {
  291. return View();
  292. }
  293. /// <summary>
  294. /// 查询转账订单
  295. /// </summary>
  296. [HttpPost]
  297. public async Task<IActionResult> TransQuery(AlipayTransQueryViewModel viewMode)
  298. {
  299. var model = new AlipayFundTransOrderQueryModel
  300. {
  301. OutBizNo = viewMode.OutBizNo,
  302. OrderId = viewMode.OrderId
  303. };
  304. var req = new AlipayFundTransOrderQueryRequest();
  305. req.SetBizModel(model);
  306. var response = await _client.ExecuteAsync(req, _optionsAccessor.Value);
  307. ViewData["response"] = response.ResponseBody;
  308. return View();
  309. }
  310. /// <summary>
  311. /// 查询对账单下载地址
  312. /// </summary>
  313. [HttpGet]
  314. public IActionResult BillDownloadurlQuery()
  315. {
  316. return View();
  317. }
  318. /// <summary>
  319. /// 查询对账单下载地址
  320. /// </summary>
  321. [HttpPost]
  322. public async Task<IActionResult> BillDownloadurlQuery(AlipayBillDownloadurlQueryViewModel viewModel)
  323. {
  324. var model = new AlipayDataDataserviceBillDownloadurlQueryModel
  325. {
  326. BillDate = viewModel.BillDate,
  327. BillType = viewModel.BillType
  328. };
  329. var req = new AlipayDataDataserviceBillDownloadurlQueryRequest();
  330. req.SetBizModel(model);
  331. var response = await _client.ExecuteAsync(req, _optionsAccessor.Value);
  332. ViewData["response"] = response.ResponseBody;
  333. return View();
  334. }
  335. /// <summary>
  336. /// 电脑网站支付 - 同步跳转
  337. /// </summary>
  338. [HttpGet]
  339. public async Task<IActionResult> PagePayReturn()
  340. {
  341. try
  342. {
  343. var notify = await _notifyClient.ExecuteAsync<AlipayTradePagePayReturn>(Request, _optionsAccessor.Value);
  344. ViewData["response"] = "支付成功";
  345. return View();
  346. }
  347. catch
  348. {
  349. ViewData["response"] = "出现错误";
  350. return View();
  351. }
  352. }
  353. /// <summary>
  354. /// 手机网站支付 - 同步跳转
  355. /// </summary>
  356. [HttpGet]
  357. public async Task<IActionResult> WapPayReturn()
  358. {
  359. try
  360. {
  361. var notify = await _notifyClient.ExecuteAsync<AlipayTradeWapPayReturn>(Request, _optionsAccessor.Value);
  362. ViewData["response"] = "支付成功";
  363. return View();
  364. }
  365. catch
  366. {
  367. ViewData["response"] = "出现错误";
  368. return View();
  369. }
  370. }
  371. }
  372. }