JDPayController.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. using System.Text;
  2. using System.Threading.Tasks;
  3. using Essensoft.AspNetCore.Payment.JDPay;
  4. using Essensoft.AspNetCore.Payment.JDPay.Notify;
  5. using Essensoft.AspNetCore.Payment.JDPay.Request;
  6. using Microsoft.AspNetCore.Mvc;
  7. using Microsoft.Extensions.Options;
  8. using WebApplicationSample.Models;
  9. namespace WebApplicationSample.Controllers
  10. {
  11. public class JDPayController : Controller
  12. {
  13. private readonly IJDPayClient _client;
  14. private readonly IJDPayNotifyClient _notifyClient;
  15. private readonly IOptions<JDPayOptions> _optionsAccessor;
  16. public JDPayController(IJDPayClient client, IJDPayNotifyClient notifyClient, IOptions<JDPayOptions> optionsAccessor)
  17. {
  18. _client = client;
  19. _notifyClient = notifyClient;
  20. _optionsAccessor = optionsAccessor;
  21. }
  22. /// <summary>
  23. /// 京东支付指引页
  24. /// </summary>
  25. /// <returns></returns>
  26. public IActionResult Index()
  27. {
  28. return View();
  29. }
  30. /// <summary>
  31. /// PC在线支付
  32. /// </summary>
  33. /// <returns></returns>
  34. [HttpGet]
  35. public IActionResult SaveOrderPC()
  36. {
  37. return View();
  38. }
  39. /// <summary>
  40. /// PC在线支付
  41. /// </summary>
  42. /// <param name="viewModel"></param>
  43. /// <returns></returns>
  44. [HttpPost]
  45. public async Task<IActionResult> SaveOrderPC(JDPaySaveOrderViewModel viewModel)
  46. {
  47. var request = new JDPaySaveOrderPCRequest
  48. {
  49. TradeNum = viewModel.TradeNum,
  50. TradeName = viewModel.TradeName,
  51. TradeTime = viewModel.TradeTime,
  52. Amount = viewModel.Amount,
  53. OrderType = viewModel.OrderType,
  54. Currency = viewModel.Currency,
  55. CallbackUrl = viewModel.CallbackUrl,
  56. NotifyUrl = viewModel.NotifyUrl,
  57. UserId = viewModel.UserId
  58. };
  59. var response = await _client.PageExecuteAsync(request, _optionsAccessor.Value);
  60. return Content(response.Body, "text/html", Encoding.UTF8);
  61. }
  62. /// <summary>
  63. /// H5在线支付
  64. /// </summary>
  65. /// <returns></returns>
  66. [HttpGet]
  67. public IActionResult SaveOrderH5()
  68. {
  69. return View();
  70. }
  71. /// <summary>
  72. /// H5在线支付
  73. /// </summary>
  74. /// <param name="viewModel"></param>
  75. /// <returns></returns>
  76. [HttpPost]
  77. public async Task<IActionResult> SaveOrderH5(JDPaySaveOrderViewModel viewModel)
  78. {
  79. var request = new JDPaySaveOrderH5Request
  80. {
  81. TradeNum = viewModel.TradeNum,
  82. TradeName = viewModel.TradeName,
  83. TradeTime = viewModel.TradeTime,
  84. Amount = viewModel.Amount,
  85. OrderType = viewModel.OrderType,
  86. Currency = viewModel.Currency,
  87. CallbackUrl = viewModel.CallbackUrl,
  88. NotifyUrl = viewModel.NotifyUrl,
  89. UserId = viewModel.UserId
  90. };
  91. var response = await _client.PageExecuteAsync(request, _optionsAccessor.Value);
  92. return Content(response.Body, "text/html", Encoding.UTF8);
  93. }
  94. /// <summary>
  95. /// 扫码支付
  96. /// </summary>
  97. /// <returns></returns>
  98. [HttpGet]
  99. public IActionResult QrCodePay()
  100. {
  101. return View();
  102. }
  103. /// <summary>
  104. /// 扫码支付
  105. /// </summary>
  106. /// <param name="viewModel"></param>
  107. /// <returns></returns>
  108. [HttpPost]
  109. public async Task<IActionResult> QrCodePay(JDPayUnifiedOrderViewModel viewModel)
  110. {
  111. var request = new JDPayUnifiedOrderRequest
  112. {
  113. TradeNum = viewModel.TradeNum,
  114. TradeName = viewModel.TradeName,
  115. TradeTime = viewModel.TradeTime,
  116. Amount = viewModel.Amount,
  117. OrderType = viewModel.OrderType,
  118. Currency = viewModel.Currency,
  119. NotifyUrl = viewModel.NotifyUrl,
  120. TradeType = viewModel.TradeType
  121. };
  122. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  123. ViewData["qrcode"] = response.QrCode;
  124. ViewData["response"] = response.Body;
  125. return View();
  126. }
  127. /// <summary>
  128. /// 交易查询接口
  129. /// </summary>
  130. /// <returns></returns>
  131. [HttpGet]
  132. public IActionResult Query()
  133. {
  134. return View();
  135. }
  136. /// <summary>
  137. /// 交易查询接口
  138. /// </summary>
  139. /// <param name="viewModel"></param>
  140. /// <returns></returns>
  141. [HttpPost]
  142. public async Task<IActionResult> Query(JDPayQueryViewModel viewModel)
  143. {
  144. var request = new JDPayQueryRequest
  145. {
  146. TradeNum = viewModel.TradeNum,
  147. OTradeNum = viewModel.OTradeNum,
  148. TradeType = viewModel.TradeType
  149. };
  150. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  151. ViewData["response"] = response.Body;
  152. return View();
  153. }
  154. /// <summary>
  155. /// 退款申请接口
  156. /// </summary>
  157. /// <returns></returns>
  158. [HttpGet]
  159. public IActionResult Refund()
  160. {
  161. return View();
  162. }
  163. /// <summary>
  164. /// 退款申请接口
  165. /// </summary>
  166. /// <param name="viewModel"></param>
  167. /// <returns></returns>
  168. [HttpPost]
  169. public async Task<IActionResult> Refund(JDPayRefundViewModel viewModel)
  170. {
  171. var request = new JDPayRefundRequest
  172. {
  173. TradeNum = viewModel.TradeNum,
  174. OTradeNum = viewModel.OTradeNum,
  175. Amount = viewModel.Amount,
  176. Currency = viewModel.Currency,
  177. NotifyUrl = viewModel.NotifyUrl
  178. };
  179. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  180. ViewData["response"] = response.Body;
  181. return View();
  182. }
  183. /// <summary>
  184. /// 退款查询接口
  185. /// </summary>
  186. /// <returns></returns>
  187. [HttpGet]
  188. public IActionResult QueryRefund()
  189. {
  190. return View();
  191. }
  192. /// <summary>
  193. /// 退款查询接口
  194. /// </summary>
  195. /// <param name="viewModel"></param>
  196. /// <returns></returns>
  197. [HttpPost]
  198. public async Task<IActionResult> QueryRefund(JDPayQueryRefundViewModel viewModel)
  199. {
  200. var request = new JDPayQueryRefundRequest
  201. {
  202. TradeNum = viewModel.TradeNum,
  203. OTradeNum = viewModel.OTradeNum,
  204. TradeType = viewModel.TradeType
  205. };
  206. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  207. ViewData["response"] = response.Body;
  208. return View();
  209. }
  210. /// <summary>
  211. /// 代付交易请求
  212. /// </summary>
  213. /// <returns></returns>
  214. [HttpGet]
  215. public IActionResult DefrayPay()
  216. {
  217. return View();
  218. }
  219. /// <summary>
  220. /// 代付交易请求
  221. /// </summary>
  222. /// <param name="viewModel"></param>
  223. /// <returns></returns>
  224. [HttpPost]
  225. public async Task<IActionResult> DefrayPay(JDPayDefrayPayViewModel viewModel)
  226. {
  227. var request = new JDPayDefrayPayRequest
  228. {
  229. RequestDatetime = viewModel.RequestDatetime,
  230. OutTradeNo = viewModel.OutTradeNo,
  231. BizTradeNo = viewModel.BizTradeNo,
  232. OutTradeDate = viewModel.OutTradeDate,
  233. TradeAmount = viewModel.TradeAmount,
  234. TradeCurrency = viewModel.TradeCurrency,
  235. SellerInfo = viewModel.SellerInfo,
  236. TradeSubject = viewModel.TradeSubject,
  237. CategoryCode = viewModel.CategoryCode,
  238. PayTool = viewModel.PayTool,
  239. TradeSource = viewModel.TradeSource,
  240. PayeeBankCode = viewModel.PayeeBankCode,
  241. PayeeBankAssociatedCode = viewModel.PayeeBankAssociatedCode,
  242. PayeeBankFullname = viewModel.PayeeBankFullname,
  243. PayeeBankCountryCode = viewModel.PayeeBankCountryCode,
  244. PayeeBankProvinceCode = viewModel.PayeeBankProvinceCode,
  245. PayeeBankCityCode = viewModel.PayeeBankCityCode,
  246. PayeeCardType = viewModel.PayeeCardType,
  247. PayeeAccountType = viewModel.PayeeAccountType,
  248. PayeeAccountNo = viewModel.PayeeAccountNo,
  249. PayeeAccountName = viewModel.PayeeAccountName,
  250. PayeeIdType = viewModel.PayeeIdType,
  251. PayeeIdNo = viewModel.PayeeIdNo,
  252. PayeeMobile = viewModel.PayeeMobile,
  253. NotifyUrl = viewModel.NotifyUrl,
  254. ReturnParams = viewModel.ReturnParams,
  255. ExtendParams = viewModel.ExtendParams,
  256. BankCardInfoType = viewModel.BankCardInfoType,
  257. BankCardId = viewModel.BankCardId
  258. };
  259. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  260. ViewData["response"] = response.Body;
  261. return View();
  262. }
  263. /// <summary>
  264. /// 代付交易查询
  265. /// </summary>
  266. /// <returns></returns>
  267. [HttpGet]
  268. public IActionResult TradeQuery()
  269. {
  270. return View();
  271. }
  272. /// <summary>
  273. /// 代付交易查询
  274. /// </summary>
  275. /// <param name="viewModel"></param>
  276. /// <returns></returns>
  277. [HttpPost]
  278. public async Task<IActionResult> TradeQuery(JDPayTradeQueryViewModel viewModel)
  279. {
  280. var request = new JDPayTradeQueryRequest
  281. {
  282. RequestDatetime = viewModel.RequestDatetime,
  283. OutTradeNo = viewModel.OutTradeNo,
  284. TradeNo = viewModel.TradeNo,
  285. TradeType = viewModel.TradeType
  286. };
  287. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  288. ViewData["response"] = response.Body;
  289. return View();
  290. }
  291. /// <summary>
  292. /// PC在线支付 / H5在线支付
  293. /// pc post / h5 get
  294. /// </summary>
  295. /// <returns></returns>
  296. [HttpGet]
  297. [HttpPost]
  298. public async Task<IActionResult> Return()
  299. {
  300. try
  301. {
  302. var notify = await _notifyClient.ExecuteAsync<JDPaySyncReturn>(Request, _optionsAccessor.Value);
  303. ViewData["response"] = "支付成功";
  304. return View();
  305. }
  306. catch
  307. {
  308. ViewData["response"] = "出现错误";
  309. return View();
  310. }
  311. }
  312. }
  313. }