JsapiPrepay.cshtml.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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 JsapiPrepayModel(IWeChatPayClient client, IOptions<PaylinksOptions> options) : PageModel
  11. {
  12. private readonly WeChatPayClientOptions _options = options.Value.WeChatPay;
  13. [BindProperty]
  14. public WeChatPayTransactionsJsapiBodyModel Input { get; set; }
  15. public void OnGet()
  16. {
  17. Input = new WeChatPayTransactionsJsapiBodyModel
  18. {
  19. AppId = _options.AppId,
  20. MchId = _options.MchId,
  21. Description = "JSAPI下单测试",
  22. OutTradeNo = DateTimeOffset.Now.ToString("yyyyMMddHHmmssfff"),
  23. NotifyUrl = "https://www.domain.com/WeChatPay/Payments/Notify/TransactionSuccess",
  24. Amount = new CommReqAmountInfo { Total = 1 },
  25. Payer = new JsapiReqPayerInfo { OpenId = string.Empty }
  26. };
  27. }
  28. public async Task OnPostAsync()
  29. {
  30. var request = new WeChatPayTransactionsJsapiRequest();
  31. request.SetBodyModel(Input);
  32. var response = await client.ExecuteAsync(request, _options);
  33. ViewData["response"] = response.Body;
  34. if (response.IsSuccessful)
  35. {
  36. var sdkRequest = new WeChatPayJsapiTransferPaymentRequest { AppId = Input.AppId, Package = "prepay_id=" + response.PrepayId };
  37. var sdkResponse = await client.SdkExecuteAsync(sdkRequest, _options);
  38. ViewData["parameter"] = JsonSerializer.Serialize(sdkResponse);
  39. }
  40. }
  41. }