WeChatPayController.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604
  1. using System.Threading.Tasks;
  2. using Essensoft.AspNetCore.Payment.WeChatPay;
  3. using Essensoft.AspNetCore.Payment.WeChatPay.Request;
  4. using Microsoft.AspNetCore.Mvc;
  5. using Newtonsoft.Json;
  6. using WebApplicationSample.Models;
  7. namespace WebApplicationSample.Controllers
  8. {
  9. public class WeChatPayController : Controller
  10. {
  11. private readonly IWeChatPayClient _client;
  12. public WeChatPayController(IWeChatPayClient client)
  13. {
  14. _client = client;
  15. }
  16. /// <summary>
  17. /// 微信支付指引页
  18. /// </summary>
  19. /// <returns></returns>
  20. public IActionResult Index()
  21. {
  22. return View();
  23. }
  24. /// <summary>
  25. /// 刷卡支付
  26. /// </summary>
  27. /// <returns></returns>
  28. [HttpGet]
  29. public IActionResult MicroPay()
  30. {
  31. return View();
  32. }
  33. /// <summary>
  34. /// 刷卡支付
  35. /// </summary>
  36. /// <param name="viewModel"></param>
  37. /// <returns></returns>
  38. [HttpPost]
  39. public async Task<IActionResult> MicroPay(WeChatPayMicroPayViewModel viewModel)
  40. {
  41. var request = new WeChatPayMicroPayRequest
  42. {
  43. Body = viewModel.Body,
  44. OutTradeNo = viewModel.OutTradeNo,
  45. TotalFee = viewModel.TotalFee,
  46. SpbillCreateIp = viewModel.SpbillCreateIp,
  47. AuthCode = viewModel.AuthCode
  48. };
  49. var response = await _client.ExecuteAsync(request);
  50. ViewData["response"] = response.Body;
  51. return View();
  52. }
  53. /// <summary>
  54. /// 公众号支付
  55. /// </summary>
  56. /// <returns></returns>
  57. [HttpGet]
  58. public IActionResult PubPay()
  59. {
  60. return View();
  61. }
  62. /// <summary>
  63. /// 公众号支付
  64. /// </summary>
  65. /// <param name="viewModel"></param>
  66. /// <returns></returns>
  67. [HttpPost]
  68. public async Task<IActionResult> PubPay(WeChatPayPubPayViewModel viewModel)
  69. {
  70. var request = new WeChatPayUnifiedOrderRequest
  71. {
  72. Body = viewModel.Body,
  73. OutTradeNo = viewModel.OutTradeNo,
  74. TotalFee = viewModel.TotalFee,
  75. SpbillCreateIp = viewModel.SpbillCreateIp,
  76. NotifyUrl = viewModel.NotifyUrl,
  77. TradeType = viewModel.TradeType,
  78. OpenId = viewModel.OpenId
  79. };
  80. var response = await _client.ExecuteAsync(request);
  81. if (response.ReturnCode == "SUCCESS" && response.ResultCode == "SUCCESS")
  82. {
  83. var req = new WeChatPayH5CallPaymentRequest
  84. {
  85. Package = "prepay_id=" + response.PrepayId
  86. };
  87. var parameter = await _client.ExecuteAsync(req);
  88. // 将参数(parameter)给 公众号前端 让他在微信内H5调起支付(https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6)
  89. ViewData["parameter"] = JsonConvert.SerializeObject(parameter);
  90. ViewData["response"] = response.Body;
  91. return View();
  92. }
  93. ViewData["response"] = response.Body;
  94. return View();
  95. }
  96. /// <summary>
  97. /// 扫码支付
  98. /// </summary>
  99. /// <returns></returns>
  100. [HttpGet]
  101. public IActionResult QrCodePay()
  102. {
  103. return View();
  104. }
  105. /// <summary>
  106. /// 扫码支付
  107. /// </summary>
  108. /// <param name="viewModel"></param>
  109. /// <returns></returns>
  110. [HttpPost]
  111. public async Task<IActionResult> QrCodePay(WeChatPayQrCodePayViewModel viewModel)
  112. {
  113. var request = new WeChatPayUnifiedOrderRequest
  114. {
  115. Body = viewModel.Body,
  116. OutTradeNo = viewModel.OutTradeNo,
  117. TotalFee = viewModel.TotalFee,
  118. SpbillCreateIp = viewModel.SpbillCreateIp,
  119. NotifyUrl = viewModel.NotifyUrl,
  120. TradeType = viewModel.TradeType
  121. };
  122. var response = await _client.ExecuteAsync(request);
  123. // response.CodeUrl 给前端生成二维码
  124. ViewData["qrcode"] = response.CodeUrl;
  125. ViewData["response"] = response.Body;
  126. return View();
  127. }
  128. /// <summary>
  129. /// APP支付
  130. /// </summary>
  131. /// <returns></returns>
  132. [HttpGet]
  133. public IActionResult AppPay()
  134. {
  135. return View();
  136. }
  137. /// <summary>
  138. /// APP支付
  139. /// </summary>
  140. /// <param name="viewModel"></param>
  141. /// <returns></returns>
  142. [HttpPost]
  143. public async Task<IActionResult> AppPay(WeChatPayAppPayViewModel viewModel)
  144. {
  145. var request = new WeChatPayUnifiedOrderRequest
  146. {
  147. Body = viewModel.Body,
  148. OutTradeNo = viewModel.OutTradeNo,
  149. TotalFee = viewModel.TotalFee,
  150. SpbillCreateIp = viewModel.SpbillCreateIp,
  151. NotifyUrl = viewModel.NotifyUrl,
  152. TradeType = viewModel.TradeType
  153. };
  154. var response = await _client.ExecuteAsync(request);
  155. if (response.ReturnCode == "SUCCESS" && response.ResultCode == "SUCCESS")
  156. {
  157. var req = new WeChatPayAppCallPaymentRequest
  158. {
  159. PrepayId = response.PrepayId
  160. };
  161. var parameter = await _client.ExecuteAsync(req);
  162. // 将参数(parameter)给 ios/android端 让他调起微信APP(https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5)
  163. ViewData["parameter"] = JsonConvert.SerializeObject(parameter);
  164. ViewData["response"] = response.Body;
  165. return View();
  166. }
  167. ViewData["response"] = response.Body;
  168. return View();
  169. }
  170. /// <summary>
  171. /// H5支付
  172. /// </summary>
  173. /// <returns></returns>
  174. [HttpGet]
  175. public IActionResult H5Pay()
  176. {
  177. return View();
  178. }
  179. /// <summary>
  180. /// H5支付
  181. /// </summary>
  182. /// <param name="viewModel"></param>
  183. /// <returns></returns>
  184. [HttpPost]
  185. public async Task<IActionResult> H5Pay(WeChatPayH5PayViewModel viewModel)
  186. {
  187. var request = new WeChatPayUnifiedOrderRequest
  188. {
  189. Body = viewModel.Body,
  190. OutTradeNo = viewModel.OutTradeNo,
  191. TotalFee = viewModel.TotalFee,
  192. SpbillCreateIp = viewModel.SpbillCreateIp,
  193. NotifyUrl = viewModel.NotifyUrl,
  194. TradeType = viewModel.TradeType
  195. };
  196. var response = await _client.ExecuteAsync(request);
  197. // mweb_url为拉起微信支付收银台的中间页面,可通过访问该url来拉起微信客户端,完成支付,mweb_url的有效期为5分钟。
  198. return Redirect(response.MwebUrl);
  199. }
  200. /// <summary>
  201. /// 小程序支付
  202. /// </summary>
  203. /// <returns></returns>
  204. [HttpGet]
  205. public IActionResult LiteAppPay()
  206. {
  207. return View();
  208. }
  209. /// <summary>
  210. /// 小程序支付
  211. /// </summary>
  212. /// <param name="viewModel"></param>
  213. /// <returns></returns>
  214. [HttpPost]
  215. public async Task<IActionResult> LiteAppPay(WeChatPayLiteAppPayViewModel viewModel)
  216. {
  217. var request = new WeChatPayUnifiedOrderRequest
  218. {
  219. Body = viewModel.Body,
  220. OutTradeNo = viewModel.OutTradeNo,
  221. TotalFee = viewModel.TotalFee,
  222. SpbillCreateIp = viewModel.SpbillCreateIp,
  223. NotifyUrl = viewModel.NotifyUrl,
  224. TradeType = viewModel.TradeType,
  225. OpenId = viewModel.OpenId
  226. };
  227. var response = await _client.ExecuteAsync(request);
  228. if (response.ReturnCode == "SUCCESS" && response.ResultCode == "SUCCESS")
  229. {
  230. var req = new WeChatPayLiteAppCallPaymentRequest
  231. {
  232. Package = "prepay_id=" + response.PrepayId
  233. };
  234. var parameter = await _client.ExecuteAsync(req);
  235. // 将参数(parameter)给 小程序前端 让他调起支付API(https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5)
  236. ViewData["parameter"] = JsonConvert.SerializeObject(parameter);
  237. ViewData["response"] = response.Body;
  238. return View();
  239. }
  240. ViewData["response"] = response.Body;
  241. return View();
  242. }
  243. /// <summary>
  244. /// 查询订单
  245. /// </summary>
  246. /// <returns></returns>
  247. [HttpGet]
  248. public IActionResult OrderQuery()
  249. {
  250. return View();
  251. }
  252. /// <summary>
  253. /// 查询订单
  254. /// </summary>
  255. /// <param name="viewModel"></param>
  256. /// <returns></returns>
  257. [HttpPost]
  258. public async Task<IActionResult> OrderQuery(WeChatPayOrderQueryViewModel viewModel)
  259. {
  260. var request = new WeChatPayOrderQueryRequest
  261. {
  262. TransactionId = viewModel.TransactionId,
  263. OutTradeNo = viewModel.OutTradeNo
  264. };
  265. var response = await _client.ExecuteAsync(request);
  266. ViewData["response"] = response.Body;
  267. return View();
  268. }
  269. /// <summary>
  270. /// 撤销订单
  271. /// </summary>
  272. /// <returns></returns>
  273. [HttpGet]
  274. public IActionResult Reverse()
  275. {
  276. return View();
  277. }
  278. /// <summary>
  279. /// 撤销订单
  280. /// </summary>
  281. /// <param name="viewModel"></param>
  282. /// <returns></returns>
  283. [HttpPost]
  284. public async Task<IActionResult> Reverse(WeChatPayReverseViewModel viewModel)
  285. {
  286. var request = new WeChatPayReverseRequest
  287. {
  288. TransactionId = viewModel.TransactionId,
  289. OutTradeNo = viewModel.OutTradeNo
  290. };
  291. var response = await _client.ExecuteAsync(request, "wechatpayCertificateName");
  292. ViewData["response"] = response.Body;
  293. return View();
  294. }
  295. /// <summary>
  296. /// 关闭订单
  297. /// </summary>
  298. /// <returns></returns>
  299. [HttpGet]
  300. public IActionResult CloseOrder()
  301. {
  302. return View();
  303. }
  304. /// <summary>
  305. /// 关闭订单
  306. /// </summary>
  307. /// <param name="viewModel"></param>
  308. /// <returns></returns>
  309. [HttpPost]
  310. public async Task<IActionResult> CloseOrder(WeChatPayCloseOrderViewModel viewModel)
  311. {
  312. var request = new WeChatPayCloseOrderRequest
  313. {
  314. OutTradeNo = viewModel.OutTradeNo
  315. };
  316. var response = await _client.ExecuteAsync(request);
  317. ViewData["response"] = response.Body;
  318. return View();
  319. }
  320. /// <summary>
  321. /// 申请退款
  322. /// </summary>
  323. /// <returns></returns>
  324. [HttpGet]
  325. public IActionResult Refund()
  326. {
  327. return View();
  328. }
  329. /// <summary>
  330. /// 申请退款
  331. /// </summary>
  332. /// <param name="viewModel"></param>
  333. /// <returns></returns>
  334. [HttpPost]
  335. public async Task<IActionResult> Refund(WeChatPayRefundViewModel viewModel)
  336. {
  337. var request = new WeChatPayRefundRequest
  338. {
  339. OutRefundNo = viewModel.OutRefundNo,
  340. TransactionId = viewModel.TransactionId,
  341. OutTradeNo = viewModel.OutTradeNo,
  342. TotalFee = viewModel.TotalFee,
  343. RefundFee = viewModel.RefundFee,
  344. RefundDesc = viewModel.RefundDesc,
  345. NotifyUrl = viewModel.NotifyUrl
  346. };
  347. var response = await _client.ExecuteAsync(request, "wechatpayCertificateName");
  348. ViewData["response"] = response.Body;
  349. return View();
  350. }
  351. /// <summary>
  352. /// 查询退款
  353. /// </summary>
  354. /// <returns></returns>
  355. [HttpGet]
  356. public IActionResult RefundQuery()
  357. {
  358. return View();
  359. }
  360. /// <summary>
  361. /// 查询退款
  362. /// </summary>
  363. /// <param name="viewModel"></param>
  364. /// <returns></returns>
  365. [HttpPost]
  366. public async Task<IActionResult> RefundQuery(WeChatPayRefundQueryViewModel viewModel)
  367. {
  368. var request = new WeChatPayRefundQueryRequest
  369. {
  370. RefundId = viewModel.RefundId,
  371. OutRefundNo = viewModel.OutRefundNo,
  372. TransactionId = viewModel.TransactionId,
  373. OutTradeNo = viewModel.OutTradeNo
  374. };
  375. var response = await _client.ExecuteAsync(request);
  376. ViewData["response"] = response.Body;
  377. return View();
  378. }
  379. /// <summary>
  380. /// 下载对账单
  381. /// </summary>
  382. /// <returns></returns>
  383. [HttpGet]
  384. public IActionResult DownloadBill()
  385. {
  386. return View();
  387. }
  388. /// <summary>
  389. /// 下载对账单
  390. /// </summary>
  391. /// <param name="viewModel"></param>
  392. /// <returns></returns>
  393. [HttpPost]
  394. public async Task<IActionResult> DownloadBill(WeChatPayDownloadBillViewModel viewModel)
  395. {
  396. var request = new WeChatPayDownloadBillRequest
  397. {
  398. BillDate = viewModel.BillDate,
  399. BillType = viewModel.BillType,
  400. TarType = viewModel.TarType
  401. };
  402. var response = await _client.ExecuteAsync(request);
  403. ViewData["response"] = response.Body;
  404. return View();
  405. }
  406. /// <summary>
  407. /// 下载资金账单
  408. /// </summary>
  409. /// <returns></returns>
  410. [HttpGet]
  411. public IActionResult DownloadFundFlow()
  412. {
  413. return View();
  414. }
  415. /// <summary>
  416. /// 下载资金账单
  417. /// </summary>
  418. /// <param name="viewModel"></param>
  419. /// <returns></returns>
  420. [HttpPost]
  421. public async Task<IActionResult> DownloadFundFlow(WeChatPayDownloadFundFlowViewModel viewModel)
  422. {
  423. var request = new WeChatPayDownloadFundFlowRequest
  424. {
  425. BillDate = viewModel.BillDate,
  426. AccountType = viewModel.AccountType,
  427. TarType = viewModel.TarType
  428. };
  429. var response = await _client.ExecuteAsync(request, "wechatpayCertificateName");
  430. ViewData["response"] = response.Body;
  431. return View();
  432. }
  433. /// <summary>
  434. /// 企业付款到零钱
  435. /// </summary>
  436. /// <returns></returns>
  437. [HttpGet]
  438. public IActionResult Transfers()
  439. {
  440. return View();
  441. }
  442. /// <summary>
  443. /// 企业付款到零钱
  444. /// </summary>
  445. /// <param name="viewModel"></param>
  446. /// <returns></returns>
  447. [HttpPost]
  448. public async Task<IActionResult> Transfers(WeChatPayTransfersViewModel viewModel)
  449. {
  450. var request = new WeChatPayTransfersRequest
  451. {
  452. PartnerTradeNo = viewModel.PartnerTradeNo,
  453. OpenId = viewModel.OpenId,
  454. CheckName = viewModel.CheckName,
  455. ReUserName = viewModel.ReUserName,
  456. Amount = viewModel.Amount,
  457. Desc = viewModel.Desc,
  458. SpbillCreateIp = viewModel.SpbillCreateIp
  459. };
  460. var response = await _client.ExecuteAsync(request, "wechatpayCertificateName");
  461. ViewData["response"] = response.Body;
  462. return View();
  463. }
  464. /// <summary>
  465. /// 查询企业付款
  466. /// </summary>
  467. /// <returns></returns>
  468. [HttpGet]
  469. public IActionResult GetTransferInfo()
  470. {
  471. return View();
  472. }
  473. /// <summary>
  474. /// 查询企业付款
  475. /// </summary>
  476. /// <param name="viewModel"></param>
  477. /// <returns></returns>
  478. [HttpPost]
  479. public async Task<IActionResult> GetTransferInfo(WeChatPayGetTransferInfoViewModel viewModel)
  480. {
  481. var request = new WeChatPayGetTransferInfoRequest
  482. {
  483. PartnerTradeNo = viewModel.PartnerTradeNo
  484. };
  485. var response = await _client.ExecuteAsync(request, "wechatpayCertificateName");
  486. ViewData["response"] = response.Body;
  487. return View();
  488. }
  489. /// <summary>
  490. /// 企业付款到银行卡
  491. /// </summary>
  492. /// <returns></returns>
  493. [HttpGet]
  494. public IActionResult PayBank()
  495. {
  496. return View();
  497. }
  498. /// <summary>
  499. /// 企业付款到银行卡
  500. /// </summary>
  501. /// <param name="viewModel"></param>
  502. /// <returns></returns>
  503. [HttpPost]
  504. public async Task<IActionResult> PayBank(WeChatPayPayBankViewModel viewModel)
  505. {
  506. var request = new WeChatPayPayBankRequest
  507. {
  508. PartnerTradeNo = viewModel.PartnerTradeNo,
  509. EncBankNo = viewModel.EncBankNo,
  510. EncTrueName = viewModel.EncTrueName,
  511. BankCode = viewModel.BankCode,
  512. Amount = viewModel.Amount,
  513. Desc = viewModel.Desc
  514. };
  515. var response = await _client.ExecuteAsync(request, "wechatpayCertificateName");
  516. ViewData["response"] = response.Body;
  517. return View();
  518. }
  519. /// <summary>
  520. /// 查询企业付款银行卡
  521. /// </summary>
  522. /// <returns></returns>
  523. [HttpGet]
  524. public IActionResult QueryBank()
  525. {
  526. return View();
  527. }
  528. /// <summary>
  529. /// 查询企业付款银行卡
  530. /// </summary>
  531. /// <param name="viewModel"></param>
  532. /// <returns></returns>
  533. [HttpPost]
  534. public async Task<IActionResult> QueryBank(WeChatPayQueryBankViewModel viewModel)
  535. {
  536. var request = new WeChatPayQueryBankRequest
  537. {
  538. PartnerTradeNo = viewModel.PartnerTradeNo
  539. };
  540. var response = await _client.ExecuteAsync(request, "wechatpayCertificateName");
  541. ViewData["response"] = response.Body;
  542. return View();
  543. }
  544. /// <summary>
  545. /// 获取RSA加密公钥
  546. /// </summary>
  547. /// <returns></returns>
  548. [HttpGet]
  549. [HttpPost]
  550. public async Task<IActionResult> GetPublicKey()
  551. {
  552. if (Request.Method == "POST")
  553. {
  554. var request = new WeChatPayGetPublicKeyRequest();
  555. var response = await _client.ExecuteAsync(request, "wechatpayCertificateName");
  556. ViewData["response"] = response.Body;
  557. return View();
  558. }
  559. return View();
  560. }
  561. }
  562. }