1
0

WeChatPayV3Controller.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922
  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.StatusCode == 200)
  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.StatusCode == 200)
  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.StatusCode == 200)
  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. /// 微信支付订单号查询
  189. /// </summary>
  190. [HttpGet]
  191. public IActionResult QueryByTransactionId()
  192. {
  193. return View();
  194. }
  195. /// <summary>
  196. /// 微信支付订单号查询
  197. /// </summary>
  198. /// <param name="viewModel"></param>
  199. [HttpPost]
  200. public async Task<IActionResult> QueryByTransactionId(WeChatPayQueryByTransactionIdViewModel viewModel)
  201. {
  202. var model = new WeChatPayTransactionsIdQueryModel
  203. {
  204. MchId = _optionsAccessor.Value.MchId,
  205. };
  206. var request = new WeChatPayTransactionsIdRequest
  207. {
  208. TransactionId = viewModel.TransactionId
  209. };
  210. request.SetQueryModel(model);
  211. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  212. ViewData["response"] = response.Body;
  213. return View();
  214. }
  215. /// <summary>
  216. /// 商户订单号查询
  217. /// </summary>
  218. [HttpGet]
  219. public IActionResult QueryByOutTradeNo()
  220. {
  221. return View();
  222. }
  223. /// <summary>
  224. /// 商户订单号查询
  225. /// </summary>
  226. /// <param name="viewModel"></param>
  227. [HttpPost]
  228. public async Task<IActionResult> QueryByOutTradeNo(WeChatPayQueryByOutTradeNoViewModel viewModel)
  229. {
  230. var model = new WeChatPayTransactionsOutTradeNoQueryModel
  231. {
  232. MchId = _optionsAccessor.Value.MchId,
  233. };
  234. var request = new WeChatPayTransactionsOutTradeNoRequest
  235. {
  236. OutTradeNo = viewModel.OutTradeNo,
  237. };
  238. request.SetQueryModel(model);
  239. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  240. ViewData["response"] = response.Body;
  241. return View();
  242. }
  243. /// <summary>
  244. /// 关闭订单
  245. /// </summary>
  246. [HttpGet]
  247. public IActionResult OutTradeNoClose()
  248. {
  249. return View();
  250. }
  251. /// <summary>
  252. /// 关闭订单
  253. /// </summary>
  254. /// <param name="viewModel"></param>
  255. [HttpPost]
  256. public async Task<IActionResult> OutTradeNoClose(WeChatPayOutTradeNoCloseViewModel viewModel)
  257. {
  258. var model = new WeChatPayTransactionsOutTradeNoCloseBodyModel
  259. {
  260. MchId = _optionsAccessor.Value.MchId,
  261. };
  262. var request = new WeChatPayTransactionsOutTradeNoCloseRequest
  263. {
  264. OutTradeNo = viewModel.OutTradeNo,
  265. };
  266. request.SetBodyModel(model);
  267. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  268. ViewData["response"] = response.Body;
  269. return View();
  270. }
  271. /// <summary>
  272. /// 申请交易账单
  273. /// </summary>
  274. [HttpGet]
  275. public IActionResult TradeBill()
  276. {
  277. return View();
  278. }
  279. /// <summary>
  280. /// 申请交易账单
  281. /// </summary>
  282. /// <param name="viewModel"></param>
  283. [HttpPost]
  284. public async Task<IActionResult> TradeBill(WeChatPayTradeBillViewModel viewModel)
  285. {
  286. var model = new WeChatPayBillTradeBillQueryModel
  287. {
  288. BillDate = viewModel.BillDate
  289. };
  290. var request = new WeChatPayBillTradeBillRequest();
  291. request.SetQueryModel(model);
  292. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  293. ViewData["response"] = response.Body;
  294. return View();
  295. }
  296. /// <summary>
  297. /// 申请资金账单
  298. /// </summary>
  299. [HttpGet]
  300. public IActionResult FundflowBill()
  301. {
  302. return View();
  303. }
  304. /// <summary>
  305. /// 申请资金账单
  306. /// </summary>
  307. /// <param name="viewModel"></param>
  308. [HttpPost]
  309. public async Task<IActionResult> FundflowBill(WeChatPayFundflowBillViewModel viewModel)
  310. {
  311. var model = new WeChatPayBillFundflowBillQueryModel
  312. {
  313. BillDate = viewModel.BillDate
  314. };
  315. var request = new WeChatPayBillFundflowBillRequest();
  316. request.SetQueryModel(model);
  317. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  318. ViewData["response"] = response.Body;
  319. return View();
  320. }
  321. /// <summary>
  322. /// 下载账单
  323. /// </summary>
  324. [HttpGet]
  325. public IActionResult BillDownload()
  326. {
  327. return View();
  328. }
  329. /// <summary>
  330. /// 下载账单
  331. /// </summary>
  332. /// <param name="viewModel"></param>
  333. [HttpPost]
  334. public async Task<IActionResult> BillDownload(WeChatPayBillDownloadViewModel viewModel)
  335. {
  336. var request = new WeChatPayBillDownloadRequest();
  337. request.SetRequestUrl(viewModel.DownloadUrl);
  338. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  339. ViewData["response"] = response.Body;
  340. return View();
  341. }
  342. /// <summary>
  343. /// 退款申请
  344. /// </summary>
  345. [HttpGet]
  346. public IActionResult Refund()
  347. {
  348. return View();
  349. }
  350. /// <summary>
  351. /// 退款申请
  352. /// </summary>
  353. /// <param name="viewModel"></param>
  354. [HttpPost]
  355. public async Task<IActionResult> Refund(WeChatPayV3RefundViewModel viewModel)
  356. {
  357. var model = new WeChatPayRefundDomesticRefundsBodyModel()
  358. {
  359. TransactionId = viewModel.TransactionId,
  360. OutTradeNo = viewModel.OutTradeNo,
  361. OutRefundNo = viewModel.OutRefundNo,
  362. NotifyUrl = viewModel.NotifyUrl,
  363. Amount = new RefundAmount { Refund = viewModel.RefundAmount, Total = viewModel.TotalAmount, Currency = viewModel.Currency }
  364. };
  365. var request = new WeChatPayRefundDomesticRefundsRequest();
  366. request.SetBodyModel(model);
  367. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  368. ViewData["response"] = response.Body;
  369. return View();
  370. }
  371. /// <summary>
  372. /// 查询单笔退款
  373. /// </summary>
  374. [HttpGet]
  375. public IActionResult RefundQuery()
  376. {
  377. return View();
  378. }
  379. /// <summary>
  380. /// 查询单笔退款
  381. /// </summary>
  382. /// <param name="viewModel"></param>
  383. [HttpPost]
  384. public async Task<IActionResult> RefundQuery(WeChatPayV3RefundQueryViewModel viewModel)
  385. {
  386. var request = new WeChatPayRefundDomesticRefundsOutRefundNoRequest
  387. {
  388. OutRefundNo = viewModel.OutRefundNo
  389. };
  390. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  391. ViewData["response"] = response.Body;
  392. return View();
  393. }
  394. #region 微信支付分
  395. /// <summary>
  396. /// 支付分-创建支付分订单
  397. /// </summary>
  398. public IActionResult ServiceOrder()
  399. {
  400. return View();
  401. }
  402. /// <summary>
  403. /// 支付分-创建支付分订单
  404. /// </summary>
  405. [HttpPost]
  406. public async Task<IActionResult> ServiceOrder(WeChatPayScoreServiceOrderViewModel viewModel)
  407. {
  408. var model = new WeChatPayScoreServiceOrderBodyModel
  409. {
  410. AppId = _optionsAccessor.Value.AppId,
  411. ServiceId = viewModel.ServiceId,
  412. OutOrderNo = viewModel.OutOrderNo,
  413. ServiceIntroduction = viewModel.ServiceIntroduction,
  414. TimeRange = new TimeRange
  415. {
  416. StartTime = viewModel.StartTime,
  417. EndTime = viewModel.EndTime
  418. },
  419. RiskFund = new RiskFund
  420. {
  421. Name = viewModel.RiskFundName,
  422. Amount = viewModel.RiskFundAmount
  423. },
  424. NotifyUrl = viewModel.NotifyUrl,
  425. OpenId = viewModel.OpenId
  426. };
  427. var request = new WeChatPayScoreServiceOrderRequest();
  428. request.SetBodyModel(model);
  429. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  430. ViewData["response"] = response.Body;
  431. return View();
  432. }
  433. /// <summary>
  434. /// 支付分-查询支付分订单
  435. /// </summary>
  436. public IActionResult ServiceOrderQuery()
  437. {
  438. return View();
  439. }
  440. /// <summary>
  441. /// 支付分-查询支付分订单
  442. /// </summary>
  443. [HttpPost]
  444. public async Task<IActionResult> ServiceOrderQuery(WeChatPayScoreServiceOrderQueryViewModel viewModel)
  445. {
  446. var model = new WeChatPayScoreServiceOrderQueryModel
  447. {
  448. AppId = _optionsAccessor.Value.AppId,
  449. ServiceId = viewModel.ServiceId,
  450. OutOrderNo = viewModel.OutOrderNo,
  451. QueryId = viewModel.QueryId
  452. };
  453. var request = new WeChatPayScoreServiceOrderQueryRequest();
  454. request.SetQueryModel(model);
  455. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  456. ViewData["response"] = response.Body;
  457. return View();
  458. }
  459. /// <summary>
  460. /// 支付分-取消支付分订单
  461. /// </summary>
  462. public IActionResult ServiceOrderCancel()
  463. {
  464. return View();
  465. }
  466. /// <summary>
  467. /// 支付分-取消支付分订单
  468. /// </summary>
  469. [HttpPost]
  470. public async Task<IActionResult> ServiceOrderCancel(WeChatPayScoreServiceOrderCancelViewModel viewModel)
  471. {
  472. var model = new WeChatPayScoreServiceOrderOutOrderNoCancelBodyModel
  473. {
  474. AppId = _optionsAccessor.Value.AppId,
  475. ServiceId = viewModel.ServiceId,
  476. Reason = viewModel.Reason
  477. };
  478. var request = new WeChatPayScoreServiceOrderOutOrderNoCancelRequest
  479. {
  480. OutOrderNo = viewModel.OutOrderNo
  481. };
  482. request.SetBodyModel(model);
  483. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  484. ViewData["response"] = response.Body;
  485. return View();
  486. }
  487. /// <summary>
  488. /// 支付分-修改支付分订单金额
  489. /// </summary>
  490. public IActionResult ServiceOrderModify()
  491. {
  492. return View();
  493. }
  494. /// <summary>
  495. /// 支付分-修改支付分订单金额
  496. /// </summary>
  497. [HttpPost]
  498. public async Task<IActionResult> ServiceOrderModify(WeChatPayScoreServiceOrderModifyViewModel viewModel)
  499. {
  500. var model = new WeChatPayScoreServiceOrderOutOrderNoModifyBodyModel
  501. {
  502. AppId = _optionsAccessor.Value.AppId,
  503. ServiceId = viewModel.ServiceId,
  504. PostPayments = new List<PostPayment> {
  505. new PostPayment{
  506. Name = viewModel.Name,
  507. Amount = viewModel.Amount,
  508. Count = viewModel.Count
  509. }
  510. },
  511. TotalAmount = viewModel.TotalAmount,
  512. Reason = viewModel.Reason
  513. };
  514. var request = new WeChatPayScoreServiceOrderOutOrderNoModifyRequest
  515. {
  516. OutOrderNo = viewModel.OutOrderNo
  517. };
  518. request.SetBodyModel(model);
  519. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  520. ViewData["response"] = response.Body;
  521. return View();
  522. }
  523. /// <summary>
  524. /// 支付分-完结支付分订单
  525. /// </summary>
  526. public IActionResult ServiceOrderComplete()
  527. {
  528. return View();
  529. }
  530. /// <summary>
  531. /// 支付分-完结支付分订单
  532. /// </summary>
  533. [HttpPost]
  534. public async Task<IActionResult> ServiceOrderComplete(WeChatPayScoreServiceOrderCompleteViewModel viewModel)
  535. {
  536. var model = new WeChatPayScoreServiceOrderOutOrderNoCompleteBodyModel
  537. {
  538. AppId = _optionsAccessor.Value.AppId,
  539. ServiceId = viewModel.ServiceId,
  540. PostPayments = new List<PostPayment>
  541. {
  542. new PostPayment
  543. {
  544. Name = viewModel.Name,
  545. Amount = viewModel.Amount,
  546. Count = viewModel.Count
  547. }
  548. },
  549. TotalAmount = viewModel.TotalAmount
  550. };
  551. var request = new WeChatPayScoreServiceOrderOutOrderNoCompleteRequest
  552. {
  553. OutOrderNo = viewModel.OutOrderNo
  554. };
  555. request.SetBodyModel(model);
  556. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  557. ViewData["response"] = response.Body;
  558. return View();
  559. }
  560. /// <summary>
  561. /// 支付分-商户发起催收扣款
  562. /// </summary>
  563. public IActionResult ServiceOrderPay()
  564. {
  565. return View();
  566. }
  567. /// <summary>
  568. /// 支付分-商户发起催收扣款
  569. /// </summary>
  570. [HttpPost]
  571. public async Task<IActionResult> ServiceOrderPay(WeChatPayScoreServiceOrderPayViewModel viewModel)
  572. {
  573. var model = new WeChatPayScoreServiceOrderPayBodyModel
  574. {
  575. AppId = _optionsAccessor.Value.AppId,
  576. ServiceId = viewModel.ServiceId,
  577. };
  578. var request = new WeChatPayScoreServiceOrderPayRequest
  579. {
  580. OutOrderNo = viewModel.OutOrderNo
  581. };
  582. request.SetBodyModel(model);
  583. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  584. ViewData["response"] = response.Body;
  585. return View();
  586. }
  587. /// <summary>
  588. /// 支付分-同步服务订单信息
  589. /// </summary>
  590. public IActionResult ServiceOrderSync()
  591. {
  592. return View();
  593. }
  594. /// <summary>
  595. /// 支付分-同步服务订单信息
  596. /// </summary>
  597. [HttpPost]
  598. public async Task<IActionResult> ServiceOrderSync(WeChatPayScoreServiceOrderSyncViewModel viewModel)
  599. {
  600. var model = new WeChatPayScoreServiceOrderSyncBodyModel
  601. {
  602. AppId = _optionsAccessor.Value.AppId,
  603. ServiceId = viewModel.ServiceId,
  604. Type = viewModel.Type,
  605. Detail = new SyncDetail
  606. {
  607. PaidTime = viewModel.PaidTime
  608. }
  609. };
  610. var request = new WeChatPayScoreServiceOrderSyncRequest
  611. {
  612. OutOrderNo = viewModel.OutOrderNo
  613. };
  614. request.SetBodyModel(model);
  615. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  616. ViewData["response"] = response.Body;
  617. return View();
  618. }
  619. /// <summary>
  620. /// 支付分-创单结单合并
  621. /// </summary>
  622. public IActionResult ServiceOrderDirectComplete()
  623. {
  624. return View();
  625. }
  626. /// <summary>
  627. /// 支付分-创单结单合并
  628. /// </summary>
  629. [HttpPost]
  630. public async Task<IActionResult> ServiceOrderDirectComplete(WeChatPayScoreServiceOrderDirectCompleteViewModel viewModel)
  631. {
  632. var model = new WeChatPayScoreServiceOrderDirectCompleteBodyModel
  633. {
  634. AppId = _optionsAccessor.Value.AppId,
  635. ServiceId = viewModel.ServiceId,
  636. OutOrderNo = viewModel.OutOrderNo,
  637. ServiceIntroduction = viewModel.ServiceIntroduction,
  638. PostPayments = new List<PostPayment> {
  639. new PostPayment{
  640. Name = viewModel.PostPaymentName,
  641. Amount = viewModel.PostPaymentAmount,
  642. Description = viewModel.PostPaymentDescription,
  643. Count = viewModel.PostPaymentCount
  644. }
  645. },
  646. TimeRange = new TimeRange
  647. {
  648. StartTime = viewModel.StartTime,
  649. EndTime = viewModel.EndTime
  650. },
  651. TotalAmount = viewModel.TotalAmount,
  652. NotifyUrl = viewModel.NotifyUrl,
  653. OpenId = viewModel.OpenId
  654. };
  655. var request = new WeChatPayScoreServiceOrderDirectCompleteRequest();
  656. request.SetBodyModel(model);
  657. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  658. ViewData["response"] = response.Body;
  659. return View();
  660. }
  661. /// <summary>
  662. /// 支付分-商户预授权
  663. /// </summary>
  664. public IActionResult Permissions()
  665. {
  666. return View();
  667. }
  668. /// <summary>
  669. /// 支付分-商户预授权
  670. /// </summary>
  671. [HttpPost]
  672. public async Task<IActionResult> Permissions(PermissionsViewModel viewModel)
  673. {
  674. var model = new WeChatPayScorePermissionsBodyModel
  675. {
  676. AppId = _optionsAccessor.Value.AppId,
  677. ServiceId = viewModel.ServiceId,
  678. AuthorizationCode = viewModel.AuthorizationCode,
  679. NotifyUrl = viewModel.NotifyUrl
  680. };
  681. var request = new WeChatPayScorePermissionsRequest();
  682. request.SetBodyModel(model);
  683. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  684. ViewData["response"] = response.Body;
  685. return View();
  686. }
  687. /// <summary>
  688. /// 支付分-查询用户授权记录(授权协议号)
  689. /// </summary>
  690. public IActionResult PermissionsQueryForAuthCode()
  691. {
  692. return View();
  693. }
  694. /// <summary>
  695. /// 支付分-查询用户授权记录(授权协议号)
  696. /// </summary>
  697. [HttpPost]
  698. public async Task<IActionResult> PermissionsQueryForAuthCode(PermissionsQueryForAuthCodeViewModel viewModel)
  699. {
  700. var model = new WeChatPayScorePermissionsQueryForAuthCodeQueryModel
  701. {
  702. ServiceId = viewModel.ServiceId,
  703. };
  704. var request = new WeChatPayScorePermissionsQueryForAuthCodeRequest
  705. {
  706. AuthorizationCode = viewModel.AuthorizationCode
  707. };
  708. request.SetQueryModel(model);
  709. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  710. ViewData["response"] = response.Body;
  711. return View();
  712. }
  713. /// <summary>
  714. /// 支付分-解除用户授权关系(授权协议号)
  715. /// </summary>
  716. public IActionResult PermissionsTerminateForAuthCode()
  717. {
  718. return View();
  719. }
  720. /// <summary>
  721. /// 支付分-解除用户授权关系(授权协议号)
  722. /// </summary>
  723. [HttpPost]
  724. public async Task<IActionResult> PermissionsTerminateForAuthCode(PermissionsTerminateForAuthCodeViewModel viewModel)
  725. {
  726. var model = new WeChatPayScorePermissionsTerminateForAuthCodeBodyModel
  727. {
  728. ServiceId = viewModel.ServiceId,
  729. Reason = viewModel.Reason
  730. };
  731. var request = new WeChatPayScorePermissionsTerminateForAuthCodeRequest
  732. {
  733. AuthorizationCode = viewModel.AuthorizationCode
  734. };
  735. request.SetBodyModel(model);
  736. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  737. ViewData["response"] = response.Body;
  738. return View();
  739. }
  740. /// <summary>
  741. /// 支付分-查询用户授权记录(openid)
  742. /// </summary>
  743. public IActionResult PermissionsQueryForOpenId()
  744. {
  745. return View();
  746. }
  747. /// <summary>
  748. /// 支付分-查询用户授权记录(openid)
  749. /// </summary>
  750. [HttpPost]
  751. public async Task<IActionResult> PermissionsQueryForOpenId(PermissionsQueryForOpenIdViewModel viewModel)
  752. {
  753. var model = new WeChatPayScorePermissionsQueryForOpenIdQueryModel
  754. {
  755. AppId = _optionsAccessor.Value.AppId,
  756. ServiceId = viewModel.ServiceId,
  757. };
  758. var request = new WeChatPayScorePermissionsQueryForOpenIdRequest
  759. {
  760. OpenId = viewModel.OpenId
  761. };
  762. request.SetQueryModel(model);
  763. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  764. ViewData["response"] = response.Body;
  765. return View();
  766. }
  767. /// <summary>
  768. /// 支付分-解除用户授权关系(OpenId)
  769. /// </summary>
  770. public IActionResult PermissionsTerminateForOpenId()
  771. {
  772. return View();
  773. }
  774. /// <summary>
  775. /// 支付分-解除用户授权关系(OpenId)
  776. /// </summary>
  777. [HttpPost]
  778. public async Task<IActionResult> PermissionsTerminateForOpenId(PermissionsTerminateForOpenIdViewModel viewModel)
  779. {
  780. var model = new WeChatPayScorePermissionsTerminateForOpenIdBodyModel
  781. {
  782. AppId = _optionsAccessor.Value.AppId,
  783. ServiceId = viewModel.ServiceId,
  784. Reason = viewModel.Reason
  785. };
  786. var request = new WeChatPayScorePermissionsTerminateForOpenIdRequest
  787. {
  788. OpenId = viewModel.OpenId
  789. };
  790. request.SetBodyModel(model);
  791. var response = await _client.ExecuteAsync(request, _optionsAccessor.Value);
  792. ViewData["response"] = response.Body;
  793. return View();
  794. }
  795. #endregion
  796. }
  797. }