AlipayController.cs 14 KB

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