WeChatPayV3Controller.cs 31 KB

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