WeChatPayController.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. using Essensoft.AspNetCore.Payment.WeChatPay;
  2. using Essensoft.AspNetCore.Payment.WeChatPay.Request;
  3. using Essensoft.AspNetCore.Payment.WeChatPay.Utility;
  4. using Microsoft.AspNetCore.Mvc;
  5. using System;
  6. using System.Threading.Tasks;
  7. namespace WebApplicationSample.Controllers
  8. {
  9. public class WeChatPayController : Controller
  10. {
  11. private readonly WeChatPayClient _client = null;
  12. public WeChatPayController(WeChatPayClient client)
  13. {
  14. _client = client;
  15. }
  16. [HttpPost]
  17. public async Task<IActionResult> UnifiedOrder(string out_trade_no, string body, int total_fee, string spbill_create_ip, string notify_url, string trade_type, string openid)
  18. {
  19. var request = new WeChatPayUnifiedOrderRequest()
  20. {
  21. OutTradeNo = out_trade_no,
  22. Body = body,
  23. TotalFee = total_fee,
  24. SpbillCreateIp = spbill_create_ip,
  25. NotifyUrl = notify_url,
  26. TradeType = trade_type,
  27. OpenId = openid,
  28. };
  29. var response = await _client.ExecuteAsync(request);
  30. return Ok(response.Body);
  31. }
  32. [HttpPost]
  33. public async Task<IActionResult> AppOrder(string out_trade_no, string body, int total_fee, string spbill_create_ip, string notify_url, string trade_type)
  34. {
  35. var request = new WeChatPayUnifiedOrderRequest()
  36. {
  37. OutTradeNo = out_trade_no,
  38. Body = body,
  39. TotalFee = total_fee,
  40. SpbillCreateIp = spbill_create_ip,
  41. NotifyUrl = notify_url,
  42. TradeType = trade_type,
  43. };
  44. var response = await _client.ExecuteAsync(request);
  45. // 组合"调起支付接口"所需参数 :
  46. var unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
  47. var timeStamp = (long)((DateTime.Now - unixEpoch).TotalSeconds);
  48. var dic = new WeChatPayDictionary
  49. {
  50. { "appid", _client.Options.AppId },
  51. { "partnerid",_client.Options.MchId },
  52. { "prepayid", response.PrepayId },
  53. { "package", "Sign=WXPay" },
  54. { "noncestr", Guid.NewGuid().ToString("N") },
  55. { "timestamp", timeStamp.ToString() }
  56. };
  57. // 将这些参数签名
  58. dic.Add("sign", WeChatPaySignature.SignWithKey(dic, _client.Options.Key));
  59. // 将签名后的参数(dic)给 ios/android端 由其去调起微信APP(https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5)
  60. return Ok(dic);
  61. }
  62. [HttpPost]
  63. public async Task<IActionResult> OrderQuery(string transaction_id, string out_trade_no)
  64. {
  65. var request = new WeChatPayOrderQueryRequest()
  66. {
  67. TransactionId = transaction_id,
  68. OutTradeNo = out_trade_no,
  69. };
  70. var response = await _client.ExecuteAsync(request);
  71. return Ok(response.Body);
  72. }
  73. [HttpPost]
  74. public async Task<IActionResult> CloseOrder(string out_trade_no)
  75. {
  76. var request = new WeChatPayCloseOrderRequest()
  77. {
  78. OutTradeNo = out_trade_no,
  79. };
  80. var response = await _client.ExecuteAsync(request);
  81. return Ok(response.Body);
  82. }
  83. [HttpPost]
  84. public async Task<IActionResult> Refund(string out_refund_no, string transaction_id, string out_trade_no, int total_fee, int refund_fee, string refund_desc, string notify_url)
  85. {
  86. var request = new WeChatPayRefundRequest()
  87. {
  88. OutRefundNo = out_refund_no,
  89. TransactionId = transaction_id,
  90. OutTradeNo = out_trade_no,
  91. TotalFee = total_fee,
  92. RefundFee = refund_fee,
  93. RefundDesc = refund_desc,
  94. NotifyUrl = notify_url,
  95. };
  96. var response = await _client.ExecuteAsync(request);
  97. return Ok(response.Body);
  98. }
  99. [HttpPost]
  100. public async Task<IActionResult> RefundQuery(string refund_id, string out_refund_no, string transaction_id, string out_trade_no)
  101. {
  102. var request = new WeChatPayRefundQueryRequest()
  103. {
  104. RefundId = refund_id,
  105. OutRefundNo = out_refund_no,
  106. TransactionId = transaction_id,
  107. OutTradeNo = out_trade_no,
  108. };
  109. var response = await _client.ExecuteAsync(request);
  110. return Ok(response.Body);
  111. }
  112. [HttpPost]
  113. public async Task<IActionResult> DownloadBill(string bill_date, string bill_type, string tar_type)
  114. {
  115. var request = new WeChatPayDownloadBillRequest()
  116. {
  117. BillDate = bill_date,
  118. BillType = bill_type,
  119. TarType = tar_type,
  120. };
  121. var response = await _client.ExecuteAsync(request);
  122. return Ok(response.Body);
  123. }
  124. [HttpPost]
  125. public async Task<IActionResult> Transfers(string partner_trade_no, string openid, string check_name, string re_user_name, int amount, string desc, string spbill_create_ip)
  126. {
  127. var request = new WeChatPayTransfersRequest()
  128. {
  129. PartnerTradeNo = partner_trade_no,
  130. OpenId = openid,
  131. CheckName = check_name,
  132. ReUserName = re_user_name,
  133. Amount = amount,
  134. Desc = desc,
  135. SpbillCreateIp = spbill_create_ip
  136. };
  137. var response = await _client.ExecuteAsync(request);
  138. return Ok(response.Body);
  139. }
  140. [HttpPost]
  141. public async Task<IActionResult> GetTransferInfo(string partner_trade_no)
  142. {
  143. var request = new WeChatPayGetTransferInfoRequest()
  144. {
  145. PartnerTradeNo = partner_trade_no,
  146. };
  147. var response = await _client.ExecuteAsync(request);
  148. return Ok(response.Body);
  149. }
  150. [HttpPost]
  151. public async Task<IActionResult> GetPublicKey()
  152. {
  153. var request = new WeChatPayGetPublicKeyRequest();
  154. var response = await _client.ExecuteAsync(request);
  155. return Ok(response.Body);
  156. }
  157. [HttpPost]
  158. public async Task<IActionResult> PayBank(string partner_trade_no, string bank_no, string true_name, string bank_code, int amount, string desc)
  159. {
  160. var request = new WeChatPayPayBankRequest()
  161. {
  162. PartnerTradeNo = partner_trade_no,
  163. EncBankNo = bank_no,
  164. EncTrueName = true_name,
  165. BankCode = bank_code,
  166. Amount = amount,
  167. Desc = desc,
  168. };
  169. var response = await _client.ExecuteAsync(request);
  170. return Ok(response.Body);
  171. }
  172. [HttpPost]
  173. public async Task<IActionResult> QueryBank(string partner_trade_no)
  174. {
  175. var request = new WeChatPayQueryBankRequest()
  176. {
  177. PartnerTradeNo = partner_trade_no,
  178. };
  179. var response = await _client.ExecuteAsync(request);
  180. return Ok(response.Body);
  181. }
  182. [HttpPost]
  183. public async Task<IActionResult> DownloadFundFlow(string bill_date, string account_type, string tar_type)
  184. {
  185. var request = new WeChatPayDownloadFundFlowRequest()
  186. {
  187. BillDate = bill_date,
  188. AccountType = account_type,
  189. TarType = tar_type,
  190. };
  191. var response = await _client.ExecuteAsync(request);
  192. return Ok(response.Body);
  193. }
  194. }
  195. }