AppPrepay.cshtml.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using System.Text.Json;
  2. using Essensoft.Paylinks.WeChatPay.Client;
  3. using Essensoft.Paylinks.WeChatPay.Payments.Domain;
  4. using Essensoft.Paylinks.WeChatPay.Payments.Model;
  5. using Essensoft.Paylinks.WeChatPay.Payments.Request;
  6. using Microsoft.AspNetCore.Mvc;
  7. using Microsoft.AspNetCore.Mvc.RazorPages;
  8. using Microsoft.Extensions.Options;
  9. namespace Essensoft.Paylinks.Sample.Web.Pages.WeChatPay.Payments;
  10. public class AppPrepayModel(IWeChatPayClient client, IOptions<PaylinksOptions> options) : PageModel
  11. {
  12. private readonly WeChatPayClientOptions _options = options.Value.WeChatPay;
  13. [BindProperty]
  14. public WeChatPayTransactionsAppBodyModel Input { get; set; }
  15. public void OnGet()
  16. {
  17. Input = new WeChatPayTransactionsAppBodyModel
  18. {
  19. AppId = _options.AppId,
  20. MchId = _options.MchId,
  21. Description = "APP下单测试",
  22. OutTradeNo = DateTimeOffset.Now.ToString("yyyyMMddHHmmssfff"),
  23. NotifyUrl = "https://www.domain.com/WeChatPay/Payments/Notify/TransactionSuccess",
  24. Amount = new CommReqAmountInfo { Total = 1 }
  25. };
  26. }
  27. public async Task OnPostAsync()
  28. {
  29. var request = new WeChatPayTransactionsAppRequest();
  30. request.SetBodyModel(Input);
  31. var response = await client.ExecuteAsync(request, _options);
  32. ViewData["response"] = response.Body;
  33. if (response.IsSuccessful)
  34. {
  35. var sdkRequest = new WeChatPayAppTransferPaymentRequest { AppId = Input.AppId, PartnerId = Input.MchId, PrepayId = response.PrepayId };
  36. var sdkResponse = await client.SdkExecuteAsync(sdkRequest, _options);
  37. ViewData["parameter"] = JsonSerializer.Serialize(sdkResponse);
  38. }
  39. }
  40. }