WeChatPayController.cs 9.7 KB

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