Muszę dodać iframe wewnątrz formularza internetowego. Muszę uzyskać adres URL z API wezwanie do usługi strony trzeciej, która serwis płatności i wyświetla iframe. Używam wersji ASP.NET 4.5 i C # 6.0.

Jest to kod Webform. Kod Iframe jest kopiowany z kodu MVC ASP.NET, gdzie jest to również implementacja iframe. Próbuję wdrożyć coś podobnego w stronach internetowych. Wiem, że nie ma modeli w sieci webbromów.

Mywebform.aspx.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="MyWebform.aspx.cs" Inherits="MyWebform" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
   
<div class="row ">
         <div class="col-md-12">
            <div class="panel panel-primary panel-title">
            <div class="panel-heading text-bold">My Component Iframe</div>
            <div class="panel-body">
                <iframe id="thirdPartyiframe" name="client" style="width: 100%; height: 600px; position: center; left: 0; top: 0; border: thick"></iframe>
                <form action="@MyModel.IframeUrl" id="initForm" target="client" method="POST" style="display:none">
                    <input name="BEARER-TOKEN" value="@MyModel.AgentAccessToken"/>
                    <input name="REFRESH-TOKEN" value="@MyModel.AgentRefreshToken"/>
                </form>
            </div>
        </div>

    </div>
</div>
 
    
    <script>
        document.getElementById("initForm").submit();
    </script>
</body>
</html>

Kod kodu za stroną. Mywebform.aspx.cs.

public partial class MyWebform : System.Web.UI.Page
{
   
    private MyClient _apiClient;

    public MyWebform()
    {
    }


    protected async Task Page_Load(object sender, EventArgs e)
    {
        var model = new PaymentRequestModel
        {
            FirstName = "John",
            Surname = "Smith",
            Email = "smith.john@gmail.com",
            Street1 = "",
            City = "Indianapolis",
            State = "IN",
            Country = "USA",
            Zip = "",
            Currency = "USD",
            Amount = 100.00,
            AgentId = "5551",
            AccountConfigurationId = 1,
                    
        };
        CreateSessionResponse paymentSessionResponse  = await _apiClient.MakePaymentSession(model);

        //assign iframe url - TO DO
        string url = paymentSessionResponse.IframeUrl;  
  
        //assign tokens
        string accToken =  paymentSessionResponse.accToken;
        string refToken = paymentSessionResponse.refToken;
    }
   
   
}

Obiekt PaymentSeSeResponse będzie miał wynikowy URL IFrame, który trzeba przypisać. Kiedy debuguję, kontrola nigdy nie przechodzi do metody obciążenia strony.

Jakiś pomysł, jak mogę to osiągnąć? Czy muszę użyć kontroli użytkowników?

0
user5929859 13 kwiecień 2021, 08:14

1 odpowiedź

Najlepsza odpowiedź

Możemy zrobić coś takiego -

Mywebform.aspx.

<asp:Content ID="content" ContentPlaceHolderID="ContentPlaceHoldeMyForm"  runat="server">
<div class="row ">
         <div class="col-md-12">
            <div class="panel panel-primary panel-title">
            <div class="panel-heading text-bold">My Component Iframe</div>
            <div class="panel-body">
                <iframe id="thirdPartyiframe" name="client" style="width: 100%; height: 600px; position: center; left: 0; top: 0; border: thick"></iframe>
                <form action="<%= Session["IframeUrl"].ToString() %>" id="initForm" target="client" method="POST" style="display:none">
                    <input name="BEARER-TOKEN" value="<%= Session["AgentAccessToken"].ToString() %>"/>
                    <input name="REFRESH-TOKEN" value="<%= Session["AgentRefreshToken"].ToString() %>"/>
                </form>
            </div>
        </div>

    </div>
</div>

I za kodeks, możemy ustawić sesje i nawiązywać w ten sposób

Mywebform.aspx.cs.

 public async void MainMethod()
 {
    var res = await GetDetails();
    SetSessions(res);
 }

 public void SetSessions(CreateSessionResponse obj)
 {
        Session["AgentAccessToken"] = obj.agentAccessToken;
        Session["AgentRefreshToken"] = obj.AgentRefreshToken;
        Session["IframeUrl"] = obj.IframeUrl;
 }


 protected async Task<paymentSessionResponse> GetDetails()
    {
        var model = new PaymentRequestModel
        {
            FirstName = "John",
            Surname = "Smith",
            Email = "smith.john@gmail.com",
            Street1 = "",
            City = "Indianapolis",
            State = "IN",
            Country = "USA",
            Zip = "",
            Currency = "USD",
            Amount = 100.00,
            AgentId = "5551"                                
        };
        CreateSessionResponse paymentSessionResponse  = await 
       _apiClient.MakePaymentSession(model);
       
        return paymentSessionResponse;
      
    }

0
user5929859 19 kwiecień 2021, 18:40