WeChatPayV3Controller.cs 29 KB

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