WeChatPayV3Controller.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934
  1. using System.Collections.Generic;
  2. using System.Text.Json;
  3. using System.Threading.Tasks;
  4. using Essensoft.AspNetCore.Payment.WeChatPay;
  5. using Essensoft.AspNetCore.Payment.WeChatPay.V3;
  6. using Essensoft.AspNetCore.Payment.WeChatPay.V3.Domain;
  7. using Essensoft.AspNetCore.Payment.WeChatPay.V3.Request;
  8. using Microsoft.AspNetCore.Mvc;
  9. using Microsoft.Extensions.Options;
  10. using WebApplicationSample.Models;
  11. namespace WebApplicationSample.Controllers
  12. {
  13. public class WeChatPayV3Controller : Controller
  14. {
  15. private readonly IWeChatPayClient _client;
  16. private readonly IOptions<WeChatPayOptions> _optionsAccessor;
  17. public WeChatPayV3Controller(IWeChatPayClient client, IOptions<WeChatPayOptions> optionsAccessor)
  18. {
  19. _client = client;
  20. _optionsAccessor = optionsAccessor;
  21. }
  22. /// <summary>
  23. /// 微信支付指引页
  24. /// </summary>
  25. public IActionResult Index()
  26. {
  27. return View();
  28. }
  29. /// <summary>
  30. /// 获取平台证书列表
  31. /// </summary>
  32. [HttpGet]
  33. [HttpPost]
  34. public async Task<IActionResult> GetCertificates()
  35. {
  36. if (Request.Method == "POST")
  37. {
  38. var request = new WeChatPayCertificatesRequest();
  39. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  40. ViewData["response"] = response.Body;
  41. return View();
  42. }
  43. return View();
  44. }
  45. /// <summary>
  46. /// APP支付-App下单API
  47. /// </summary>
  48. [HttpGet]
  49. public IActionResult AppPay()
  50. {
  51. return View();
  52. }
  53. /// <summary>
  54. /// APP支付-App下单API
  55. /// </summary>
  56. /// <param name="viewModel"></param>
  57. [HttpPost]
  58. public async Task<IActionResult> AppPay(WeChatPayAppPayV3ViewModel viewModel)
  59. {
  60. var model = new WeChatPayTransactionsAppBodyModel
  61. {
  62. AppId = _optionsAccessor.Value.AppId,
  63. MchId = _optionsAccessor.Value.MchId,
  64. Amount = new Amount { Total = viewModel.Total, Currency = "CNY" },
  65. Description = viewModel.Description,
  66. NotifyUrl = viewModel.NotifyUrl,
  67. OutTradeNo = viewModel.OutTradeNo,
  68. };
  69. var request = new WeChatPayTransactionsAppRequest();
  70. request.SetBodyModel(model);
  71. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  72. if (response.StatusCode == 200)
  73. {
  74. var req = new WeChatPayAppSdkRequest
  75. {
  76. PrepayId = response.PrepayId
  77. };
  78. var parameter = await _client.ExecuteAsync(req, _optionsAccessor.Value);
  79. // 将参数(parameter)给 ios/android端
  80. // https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_4.shtml
  81. ViewData["parameter"] = JsonSerializer.Serialize(parameter);
  82. ViewData["response"] = response.Body;
  83. return View();
  84. }
  85. ViewData["response"] = response.Body;
  86. return View();
  87. }
  88. /// <summary>
  89. /// 公众号支付-JSAPI下单
  90. /// </summary>
  91. [HttpGet]
  92. public IActionResult PubPay()
  93. {
  94. return View();
  95. }
  96. /// <summary>
  97. /// 公众号支付-JSAPI下单
  98. /// </summary>
  99. /// <param name="viewModel"></param>
  100. [HttpPost]
  101. public async Task<IActionResult> PubPay(WeChatPayPubPayV3ViewModel viewModel)
  102. {
  103. var model = new WeChatPayTransactionsJsApiBodyModel
  104. {
  105. AppId = _optionsAccessor.Value.AppId,
  106. MchId = _optionsAccessor.Value.MchId,
  107. Amount = new Amount { Total = viewModel.Total, Currency = "CNY" },
  108. Description = viewModel.Description,
  109. NotifyUrl = viewModel.NotifyUrl,
  110. OutTradeNo = viewModel.OutTradeNo,
  111. Payer = new PayerInfo { OpenId = viewModel.OpenId }
  112. };
  113. var request = new WeChatPayTransactionsJsApiRequest();
  114. request.SetBodyModel(model);
  115. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  116. if (response.StatusCode == 200)
  117. {
  118. var req = new WeChatPayJsApiSdkRequest
  119. {
  120. Package = "prepay_id=" + response.PrepayId
  121. };
  122. var parameter = await _client.ExecuteAsync(req, _optionsAccessor.Value);
  123. // 将参数(parameter)给 公众号前端
  124. // https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_1_4.shtml
  125. ViewData["parameter"] = JsonSerializer.Serialize(parameter);
  126. ViewData["response"] = response.Body;
  127. return View();
  128. }
  129. ViewData["response"] = response.Body;
  130. return View();
  131. }
  132. /// <summary>
  133. /// 扫码支付-Native下单API
  134. /// </summary>
  135. [HttpGet]
  136. public IActionResult QrCodePay()
  137. {
  138. return View();
  139. }
  140. /// <summary>
  141. /// 扫码支付-Native下单API
  142. /// </summary>
  143. /// <param name="viewModel"></param>
  144. [HttpPost]
  145. public async Task<IActionResult> QrCodePay(WeChatPayQrCodePayV3ViewModel viewModel)
  146. {
  147. var model = new WeChatPayTransactionsNativeBodyModel
  148. {
  149. AppId = _optionsAccessor.Value.AppId,
  150. MchId = _optionsAccessor.Value.MchId,
  151. Amount = new Amount { Total = viewModel.Total, Currency = "CNY" },
  152. Description = viewModel.Description,
  153. NotifyUrl = viewModel.NotifyUrl,
  154. OutTradeNo = viewModel.OutTradeNo,
  155. };
  156. var request = new WeChatPayTransactionsNativeRequest();
  157. request.SetBodyModel(model);
  158. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  159. // response.CodeUrl 给前端生成二维码
  160. ViewData["qrcode"] = response.CodeUrl;
  161. ViewData["response"] = response.Body;
  162. return View();
  163. }
  164. /// <summary>
  165. /// H5支付-H5下单API
  166. /// </summary>
  167. [HttpGet]
  168. public IActionResult H5Pay()
  169. {
  170. return View();
  171. }
  172. /// <summary>
  173. /// H5支付-H5下单API
  174. /// </summary>
  175. /// <param name="viewModel"></param>
  176. [HttpPost]
  177. public async Task<IActionResult> H5Pay(WeChatPayH5PayV3ViewModel viewModel)
  178. {
  179. var model = new WeChatPayTransactionsH5BodyModel
  180. {
  181. AppId = _optionsAccessor.Value.AppId,
  182. MchId = _optionsAccessor.Value.MchId,
  183. Amount = new Amount { Total = viewModel.Total, Currency = "CNY" },
  184. Description = viewModel.Description,
  185. NotifyUrl = viewModel.NotifyUrl,
  186. OutTradeNo = viewModel.OutTradeNo,
  187. SceneInfo = new SceneInfo { PayerClientIp = "127.0.0.1" }
  188. };
  189. var request = new WeChatPayTransactionsH5Request();
  190. request.SetBodyModel(model);
  191. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  192. // h5_url为拉起微信支付收银台的中间页面,可通过访问该url来拉起微信客户端,完成支付,h5_url的有效期为5分钟。
  193. // https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_3_4.shtml
  194. ViewData["response"] = response.Body;
  195. return View();
  196. }
  197. /// <summary>
  198. /// 微信支付订单号查询
  199. /// </summary>
  200. [HttpGet]
  201. public IActionResult QueryByTransactionId()
  202. {
  203. return View();
  204. }
  205. /// <summary>
  206. /// 微信支付订单号查询
  207. /// </summary>
  208. /// <param name="viewModel"></param>
  209. [HttpPost]
  210. public async Task<IActionResult> QueryByTransactionId(WeChatPayQueryByTransactionIdViewModel viewModel)
  211. {
  212. var model = new WeChatPayTransactionsIdQueryModel
  213. {
  214. MchId = _optionsAccessor.Value.MchId,
  215. };
  216. var request = new WeChatPayTransactionsIdRequest
  217. {
  218. TransactionId = viewModel.TransactionId
  219. };
  220. request.SetQueryModel(model);
  221. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  222. ViewData["response"] = response.Body;
  223. return View();
  224. }
  225. /// <summary>
  226. /// 商户订单号查询
  227. /// </summary>
  228. [HttpGet]
  229. public IActionResult QueryByOutTradeNo()
  230. {
  231. return View();
  232. }
  233. /// <summary>
  234. /// 商户订单号查询
  235. /// </summary>
  236. /// <param name="viewModel"></param>
  237. [HttpPost]
  238. public async Task<IActionResult> QueryByOutTradeNo(WeChatPayQueryByOutTradeNoViewModel viewModel)
  239. {
  240. var model = new WeChatPayTransactionsOutTradeNoQueryModel
  241. {
  242. MchId = _optionsAccessor.Value.MchId,
  243. };
  244. var request = new WeChatPayTransactionsOutTradeNoRequest
  245. {
  246. OutTradeNo = viewModel.OutTradeNo,
  247. };
  248. request.SetQueryModel(model);
  249. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  250. ViewData["response"] = response.Body;
  251. return View();
  252. }
  253. /// <summary>
  254. /// 关闭订单
  255. /// </summary>
  256. [HttpGet]
  257. public IActionResult OutTradeNoClose()
  258. {
  259. return View();
  260. }
  261. /// <summary>
  262. /// 关闭订单
  263. /// </summary>
  264. /// <param name="viewModel"></param>
  265. [HttpPost]
  266. public async Task<IActionResult> OutTradeNoClose(WeChatPayOutTradeNoCloseViewModel viewModel)
  267. {
  268. var model = new WeChatPayTransactionsOutTradeNoCloseBodyModel
  269. {
  270. MchId = _optionsAccessor.Value.MchId,
  271. };
  272. var request = new WeChatPayTransactionsOutTradeNoCloseRequest
  273. {
  274. OutTradeNo = viewModel.OutTradeNo,
  275. };
  276. request.SetBodyModel(model);
  277. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  278. ViewData["response"] = response.Body;
  279. return View();
  280. }
  281. /// <summary>
  282. /// 申请交易账单
  283. /// </summary>
  284. [HttpGet]
  285. public IActionResult TradeBill()
  286. {
  287. return View();
  288. }
  289. /// <summary>
  290. /// 申请交易账单
  291. /// </summary>
  292. /// <param name="viewModel"></param>
  293. [HttpPost]
  294. public async Task<IActionResult> TradeBill(WeChatPayTradeBillViewModel viewModel)
  295. {
  296. var model = new WeChatPayBillTradeBillQueryModel
  297. {
  298. BillDate = viewModel.BillDate
  299. };
  300. var request = new WeChatPayBillTradeBillRequest();
  301. request.SetQueryModel(model);
  302. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  303. ViewData["response"] = response.Body;
  304. return View();
  305. }
  306. /// <summary>
  307. /// 申请资金账单
  308. /// </summary>
  309. [HttpGet]
  310. public IActionResult FundflowBill()
  311. {
  312. return View();
  313. }
  314. /// <summary>
  315. /// 申请资金账单
  316. /// </summary>
  317. /// <param name="viewModel"></param>
  318. [HttpPost]
  319. public async Task<IActionResult> FundflowBill(WeChatPayFundflowBillViewModel viewModel)
  320. {
  321. var model = new WeChatPayBillFundflowBillQueryModel
  322. {
  323. BillDate = viewModel.BillDate
  324. };
  325. var request = new WeChatPayBillFundflowBillRequest();
  326. request.SetQueryModel(model);
  327. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  328. ViewData["response"] = response.Body;
  329. return View();
  330. }
  331. /// <summary>
  332. /// 下载账单
  333. /// </summary>
  334. [HttpGet]
  335. public IActionResult BillDownload()
  336. {
  337. return View();
  338. }
  339. /// <summary>
  340. /// 下载账单
  341. /// </summary>
  342. /// <param name="viewModel"></param>
  343. [HttpPost]
  344. public async Task<IActionResult> BillDownload(WeChatPayBillDownloadViewModel viewModel)
  345. {
  346. var request = new WeChatPayBillDownloadRequest();
  347. request.SetDownloadUrl(viewModel.DownloadUrl);
  348. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  349. ViewData["response"] = response.Body;
  350. return View();
  351. }
  352. /// <summary>
  353. /// 退款申请
  354. /// </summary>
  355. [HttpGet]
  356. public IActionResult Refund()
  357. {
  358. return View();
  359. }
  360. /// <summary>
  361. /// 退款申请
  362. /// </summary>
  363. /// <param name="viewModel"></param>
  364. [HttpPost]
  365. public async Task<IActionResult> Refund(WeChatPayV3RefundViewModel viewModel)
  366. {
  367. var model = new WeChatPayRefundDomesticRefundsBodyModel()
  368. {
  369. TransactionId = viewModel.TransactionId,
  370. OutTradeNo = viewModel.OutTradeNo,
  371. OutRefundNo = viewModel.OutRefundNo,
  372. NotifyUrl = viewModel.NotifyUrl,
  373. Amount = new RefundAmount { Refund = viewModel.RefundAmount, Total = viewModel.TotalAmount, Currency = viewModel.Currency }
  374. };
  375. var request = new WeChatPayRefundDomesticRefundsRequest();
  376. request.SetBodyModel(model);
  377. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  378. ViewData["response"] = response.Body;
  379. return View();
  380. }
  381. /// <summary>
  382. /// 查询单笔退款
  383. /// </summary>
  384. [HttpGet]
  385. public IActionResult RefundQuery()
  386. {
  387. return View();
  388. }
  389. /// <summary>
  390. /// 查询单笔退款
  391. /// </summary>
  392. /// <param name="viewModel"></param>
  393. [HttpPost]
  394. public async Task<IActionResult> RefundQuery(WeChatPayV3RefundQueryViewModel viewModel)
  395. {
  396. var request = new WeChatPayRefundDomesticRefundsOutRefundNoRequest
  397. {
  398. OutRefundNo = viewModel.OutRefundNo
  399. };
  400. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  401. ViewData["response"] = response.Body;
  402. return View();
  403. }
  404. #region 微信支付分
  405. /// <summary>
  406. /// 支付分-创建支付分订单
  407. /// </summary>
  408. public IActionResult ServiceOrder()
  409. {
  410. return View();
  411. }
  412. /// <summary>
  413. /// 支付分-创建支付分订单
  414. /// </summary>
  415. [HttpPost]
  416. public async Task<IActionResult> ServiceOrder(WeChatPayScoreServiceOrderViewModel viewModel)
  417. {
  418. var model = new WeChatPayScoreServiceOrderBodyModel
  419. {
  420. AppId = _optionsAccessor.Value.AppId,
  421. ServiceId = viewModel.ServiceId,
  422. OutOrderNo = viewModel.OutOrderNo,
  423. ServiceIntroduction = viewModel.ServiceIntroduction,
  424. TimeRange = new TimeRange
  425. {
  426. StartTime = viewModel.StartTime,
  427. EndTime = viewModel.EndTime
  428. },
  429. RiskFund = new RiskFund
  430. {
  431. Name = viewModel.RiskFundName,
  432. Amount = viewModel.RiskFundAmount
  433. },
  434. NotifyUrl = viewModel.NotifyUrl,
  435. OpenId = viewModel.OpenId
  436. };
  437. var request = new WeChatPayScoreServiceOrderRequest();
  438. request.SetBodyModel(model);
  439. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  440. ViewData["response"] = response.Body;
  441. return View();
  442. }
  443. /// <summary>
  444. /// 支付分-查询支付分订单
  445. /// </summary>
  446. public IActionResult ServiceOrderQuery()
  447. {
  448. return View();
  449. }
  450. /// <summary>
  451. /// 支付分-查询支付分订单
  452. /// </summary>
  453. [HttpPost]
  454. public async Task<IActionResult> ServiceOrderQuery(WeChatPayScoreServiceOrderQueryViewModel viewModel)
  455. {
  456. var model = new WeChatPayScoreServiceOrderQueryModel
  457. {
  458. AppId = _optionsAccessor.Value.AppId,
  459. ServiceId = viewModel.ServiceId,
  460. OutOrderNo = viewModel.OutOrderNo,
  461. QueryId = viewModel.QueryId
  462. };
  463. var request = new WeChatPayScoreServiceOrderQueryRequest();
  464. request.SetQueryModel(model);
  465. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  466. ViewData["response"] = response.Body;
  467. return View();
  468. }
  469. /// <summary>
  470. /// 支付分-取消支付分订单
  471. /// </summary>
  472. public IActionResult ServiceOrderCancel()
  473. {
  474. return View();
  475. }
  476. /// <summary>
  477. /// 支付分-取消支付分订单
  478. /// </summary>
  479. [HttpPost]
  480. public async Task<IActionResult> ServiceOrderCancel(WeChatPayScoreServiceOrderCancelViewModel viewModel)
  481. {
  482. var model = new WeChatPayScoreServiceOrderOutOrderNoCancelBodyModel
  483. {
  484. AppId = _optionsAccessor.Value.AppId,
  485. ServiceId = viewModel.ServiceId,
  486. Reason = viewModel.Reason
  487. };
  488. var request = new WeChatPayScoreServiceOrderOutOrderNoCancelRequest
  489. {
  490. OutOrderNo = viewModel.OutOrderNo
  491. };
  492. request.SetBodyModel(model);
  493. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  494. ViewData["response"] = response.Body;
  495. return View();
  496. }
  497. /// <summary>
  498. /// 支付分-修改支付分订单金额
  499. /// </summary>
  500. public IActionResult ServiceOrderModify()
  501. {
  502. return View();
  503. }
  504. /// <summary>
  505. /// 支付分-修改支付分订单金额
  506. /// </summary>
  507. [HttpPost]
  508. public async Task<IActionResult> ServiceOrderModify(WeChatPayScoreServiceOrderModifyViewModel viewModel)
  509. {
  510. var model = new WeChatPayScoreServiceOrderOutOrderNoModifyBodyModel
  511. {
  512. AppId = _optionsAccessor.Value.AppId,
  513. ServiceId = viewModel.ServiceId,
  514. PostPayments = new List<PostPayment> {
  515. new PostPayment{
  516. Name = viewModel.Name,
  517. Amount = viewModel.Amount,
  518. Count = viewModel.Count
  519. }
  520. },
  521. TotalAmount = viewModel.TotalAmount,
  522. Reason = viewModel.Reason
  523. };
  524. var request = new WeChatPayScoreServiceOrderOutOrderNoModifyRequest
  525. {
  526. OutOrderNo = viewModel.OutOrderNo
  527. };
  528. request.SetBodyModel(model);
  529. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  530. ViewData["response"] = response.Body;
  531. return View();
  532. }
  533. /// <summary>
  534. /// 支付分-完结支付分订单
  535. /// </summary>
  536. public IActionResult ServiceOrderComplete()
  537. {
  538. return View();
  539. }
  540. /// <summary>
  541. /// 支付分-完结支付分订单
  542. /// </summary>
  543. [HttpPost]
  544. public async Task<IActionResult> ServiceOrderComplete(WeChatPayScoreServiceOrderCompleteViewModel viewModel)
  545. {
  546. var model = new WeChatPayScoreServiceOrderOutOrderNoCompleteBodyModel
  547. {
  548. AppId = _optionsAccessor.Value.AppId,
  549. ServiceId = viewModel.ServiceId,
  550. PostPayments = new List<PostPayment>
  551. {
  552. new PostPayment
  553. {
  554. Name = viewModel.Name,
  555. Amount = viewModel.Amount,
  556. Count = viewModel.Count
  557. }
  558. },
  559. TotalAmount = viewModel.TotalAmount
  560. };
  561. var request = new WeChatPayScoreServiceOrderOutOrderNoCompleteRequest
  562. {
  563. OutOrderNo = viewModel.OutOrderNo
  564. };
  565. request.SetBodyModel(model);
  566. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  567. ViewData["response"] = response.Body;
  568. return View();
  569. }
  570. /// <summary>
  571. /// 支付分-商户发起催收扣款
  572. /// </summary>
  573. public IActionResult ServiceOrderPay()
  574. {
  575. return View();
  576. }
  577. /// <summary>
  578. /// 支付分-商户发起催收扣款
  579. /// </summary>
  580. [HttpPost]
  581. public async Task<IActionResult> ServiceOrderPay(WeChatPayScoreServiceOrderPayViewModel viewModel)
  582. {
  583. var model = new WeChatPayScoreServiceOrderPayBodyModel
  584. {
  585. AppId = _optionsAccessor.Value.AppId,
  586. ServiceId = viewModel.ServiceId,
  587. };
  588. var request = new WeChatPayScoreServiceOrderPayRequest
  589. {
  590. OutOrderNo = viewModel.OutOrderNo
  591. };
  592. request.SetBodyModel(model);
  593. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  594. ViewData["response"] = response.Body;
  595. return View();
  596. }
  597. /// <summary>
  598. /// 支付分-同步服务订单信息
  599. /// </summary>
  600. public IActionResult ServiceOrderSync()
  601. {
  602. return View();
  603. }
  604. /// <summary>
  605. /// 支付分-同步服务订单信息
  606. /// </summary>
  607. [HttpPost]
  608. public async Task<IActionResult> ServiceOrderSync(WeChatPayScoreServiceOrderSyncViewModel viewModel)
  609. {
  610. var model = new WeChatPayScoreServiceOrderSyncBodyModel
  611. {
  612. AppId = _optionsAccessor.Value.AppId,
  613. ServiceId = viewModel.ServiceId,
  614. Type = viewModel.Type,
  615. Detail = new SyncDetail
  616. {
  617. PaidTime = viewModel.PaidTime
  618. }
  619. };
  620. var request = new WeChatPayScoreServiceOrderSyncRequest
  621. {
  622. OutOrderNo = viewModel.OutOrderNo
  623. };
  624. request.SetBodyModel(model);
  625. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  626. ViewData["response"] = response.Body;
  627. return View();
  628. }
  629. /// <summary>
  630. /// 支付分-创单结单合并
  631. /// </summary>
  632. public IActionResult ServiceOrderDirectComplete()
  633. {
  634. return View();
  635. }
  636. /// <summary>
  637. /// 支付分-创单结单合并
  638. /// </summary>
  639. [HttpPost]
  640. public async Task<IActionResult> ServiceOrderDirectComplete(WeChatPayScoreServiceOrderDirectCompleteViewModel viewModel)
  641. {
  642. var model = new WeChatPayScoreServiceOrderDirectCompleteBodyModel
  643. {
  644. AppId = _optionsAccessor.Value.AppId,
  645. ServiceId = viewModel.ServiceId,
  646. OutOrderNo = viewModel.OutOrderNo,
  647. ServiceIntroduction = viewModel.ServiceIntroduction,
  648. PostPayments = new List<PostPayment> {
  649. new PostPayment{
  650. Name = viewModel.PostPaymentName,
  651. Amount = viewModel.PostPaymentAmount,
  652. Description = viewModel.PostPaymentDescription,
  653. Count = viewModel.PostPaymentCount
  654. }
  655. },
  656. TimeRange = new TimeRange
  657. {
  658. StartTime = viewModel.StartTime,
  659. EndTime = viewModel.EndTime
  660. },
  661. TotalAmount = viewModel.TotalAmount,
  662. NotifyUrl = viewModel.NotifyUrl,
  663. OpenId = viewModel.OpenId
  664. };
  665. var request = new WeChatPayScoreServiceOrderDirectCompleteRequest();
  666. request.SetBodyModel(model);
  667. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  668. ViewData["response"] = response.Body;
  669. return View();
  670. }
  671. /// <summary>
  672. /// 支付分-商户预授权
  673. /// </summary>
  674. public IActionResult Permissions()
  675. {
  676. return View();
  677. }
  678. /// <summary>
  679. /// 支付分-商户预授权
  680. /// </summary>
  681. [HttpPost]
  682. public async Task<IActionResult> Permissions(PermissionsViewModel viewModel)
  683. {
  684. var model = new WeChatPayScorePermissionsBodyModel
  685. {
  686. AppId = _optionsAccessor.Value.AppId,
  687. ServiceId = viewModel.ServiceId,
  688. AuthorizationCode = viewModel.AuthorizationCode,
  689. NotifyUrl = viewModel.NotifyUrl
  690. };
  691. var request = new WeChatPayScorePermissionsRequest();
  692. request.SetBodyModel(model);
  693. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  694. ViewData["response"] = response.Body;
  695. return View();
  696. }
  697. /// <summary>
  698. /// 支付分-查询用户授权记录(授权协议号)
  699. /// </summary>
  700. public IActionResult PermissionsQueryForAuthCode()
  701. {
  702. return View();
  703. }
  704. /// <summary>
  705. /// 支付分-查询用户授权记录(授权协议号)
  706. /// </summary>
  707. [HttpPost]
  708. public async Task<IActionResult> PermissionsQueryForAuthCode(PermissionsQueryForAuthCodeViewModel viewModel)
  709. {
  710. var model = new WeChatPayScorePermissionsQueryForAuthCodeQueryModel
  711. {
  712. ServiceId = viewModel.ServiceId,
  713. };
  714. var request = new WeChatPayScorePermissionsQueryForAuthCodeRequest
  715. {
  716. AuthorizationCode = viewModel.AuthorizationCode
  717. };
  718. request.SetQueryModel(model);
  719. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  720. ViewData["response"] = response.Body;
  721. return View();
  722. }
  723. /// <summary>
  724. /// 支付分-解除用户授权关系(授权协议号)
  725. /// </summary>
  726. public IActionResult PermissionsTerminateForAuthCode()
  727. {
  728. return View();
  729. }
  730. /// <summary>
  731. /// 支付分-解除用户授权关系(授权协议号)
  732. /// </summary>
  733. [HttpPost]
  734. public async Task<IActionResult> PermissionsTerminateForAuthCode(PermissionsTerminateForAuthCodeViewModel viewModel)
  735. {
  736. var model = new WeChatPayScorePermissionsTerminateForAuthCodeBodyModel
  737. {
  738. ServiceId = viewModel.ServiceId,
  739. Reason = viewModel.Reason
  740. };
  741. var request = new WeChatPayScorePermissionsTerminateForAuthCodeRequest
  742. {
  743. AuthorizationCode = viewModel.AuthorizationCode
  744. };
  745. request.SetBodyModel(model);
  746. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  747. ViewData["response"] = response.Body;
  748. return View();
  749. }
  750. /// <summary>
  751. /// 支付分-查询用户授权记录(openid)
  752. /// </summary>
  753. public IActionResult PermissionsQueryForOpenId()
  754. {
  755. return View();
  756. }
  757. /// <summary>
  758. /// 支付分-查询用户授权记录(openid)
  759. /// </summary>
  760. [HttpPost]
  761. public async Task<IActionResult> PermissionsQueryForOpenId(PermissionsQueryForOpenIdViewModel viewModel)
  762. {
  763. var model = new WeChatPayScorePermissionsQueryForOpenIdQueryModel
  764. {
  765. AppId = _optionsAccessor.Value.AppId,
  766. ServiceId = viewModel.ServiceId,
  767. };
  768. var request = new WeChatPayScorePermissionsQueryForOpenIdRequest
  769. {
  770. OpenId = viewModel.OpenId
  771. };
  772. request.SetQueryModel(model);
  773. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  774. ViewData["response"] = response.Body;
  775. return View();
  776. }
  777. /// <summary>
  778. /// 支付分-解除用户授权关系(OpenId)
  779. /// </summary>
  780. public IActionResult PermissionsTerminateForOpenId()
  781. {
  782. return View();
  783. }
  784. /// <summary>
  785. /// 支付分-解除用户授权关系(OpenId)
  786. /// </summary>
  787. [HttpPost]
  788. public async Task<IActionResult> PermissionsTerminateForOpenId(PermissionsTerminateForOpenIdViewModel viewModel)
  789. {
  790. var model = new WeChatPayScorePermissionsTerminateForOpenIdBodyModel
  791. {
  792. AppId = _optionsAccessor.Value.AppId,
  793. ServiceId = viewModel.ServiceId,
  794. Reason = viewModel.Reason
  795. };
  796. var request = new WeChatPayScorePermissionsTerminateForOpenIdRequest
  797. {
  798. OpenId = viewModel.OpenId
  799. };
  800. request.SetBodyModel(model);
  801. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  802. ViewData["response"] = response.Body;
  803. return View();
  804. }
  805. #endregion
  806. }
  807. }