MVC HtmlHelpers problem with Razor

I work on a nonprofit donation platform, and this is my first time using MVC. I have this for the most part, but right now I have a problem that I don’t know how to handle. I use the AthorizeNet.Helpers class, and when I add code from extensions, it works for the most part, except that it takes the form and puts it above the sign, but it puts the form fields in the right place. I am trying to figure out how to make a tag in the right place.

@using AuthorizeNet.Helpers;

@using (Html.BeginSIMForm("http://127.0.0.1:4768", 1.99M, "xxx_key", "yyy_key", true))
{
    @Html.Raw(Html.CheckoutFormInputs(true))
    @Html.Hidden("order_id", "1234")
    <input type = "submit" value = "Pay" />
}

Here's what it looks like in HTML output:

<form action = 'https://test.authorize.net/gateway/transact.dll' method = 'post'>
    <input type = 'hidden' name = 'x_fp_hash' value = '6bef386eaa89944efd62b47b86042910' \>
    <input type = 'hidden' name = 'x_fp_sequence' value = '117'\>
    <input type = 'hidden' name = 'x_fp_timestamp' value = 'xxx_key' \>
    <input type = 'hidden' name = 'x_login' value = 'yyy_key' \>
    <input type = 'hidden' name = 'x_amount' value = '1.99' \>
    <input type = 'hidden' name = 'x_relay_url' value = 'http://127.0.0.1:4768' \>
    <input type = 'hidden' name = 'x_relay_response' value = 'TRUE' \>
</form><!DOCTYPE html>
<html>
<body>
<h2>Payment Information</h2>
                <div style = 'border: 1px solid #990000; padding:12px; margin-bottom:24px; background-color:#ffffcc;width:300px'>Test Mode</div>
                <div style = 'float:left;width:250px;'>
                    <label>Credit Card Number</label>
                    <div id = 'CreditCardNumber'>
                        <input type = 'text' size = '28' name = 'x_card_num' value = '4111111111111111' id = 'x_card_num'/>
                    </div>
                </div>  
                <div style = 'float:left;width:70px;'>
                    <label>Exp.</label>
                    <div id = 'CreditCardExpiration'>
                        <input type = 'text' size = '5' maxlength = '5' name = 'x_exp_date' value = '0116' id = 'x_exp_date'/>
                    </div>
                </div>
                <div style = 'float:left;width:70px;'>
                    <label>CCV</label>
                    <div id = 'CCV'>
                        <input type = 'text' size = '5' maxlength = '5' name = 'x_card_code' id = 'x_card_code' value = '123' />
                    </div>
                </div><input id="order_id" name="order_id" type="hidden" value="1234" />        <input type = "submit" value = "Pay" />
+5
source share
5 answers

, , , ASP.NET MVC 1 ( , , ). ASP.NET MVC 1 , :

htmlHelper.ViewContext.HttpContext.Response.Output

ASP.NET MVC :

htmlHelper.ViewContext.Writer

Razor. AuthorizeNet.Helpers, , , .

+5

.

, @Html.Raw() Html.CheckoutFormInputs(true)

, ,

namespace AuthorizeNet.Helpers -> CheckoutFormBuilders.cs

using System.IO;

HttpResponseBase to TextWriter

.

HttpResponseBase _response; to TextWriter _response;

public SIMForm(TextWriter response, string returnUrl, decimal amount, 
               string apiLogin, string transactionKey)
               :this(response,returnUrl,amount,apiLogin,transactionKey,true){}

public SIMForm(TextWriter response, string returnUrl, decimal amount, 
               string apiLogin, string transactionKey, bool isTest) {
        _response = response;
        _amount = amount;
        _apiLogin = apiLogin;
        _transactionkey = transactionKey;
        _returnUrl = returnUrl;
        _isTest = isTest;
        OpenForm();
}

tpeczek,

helper.ViewContext.HttpContext.Response 

helper.ViewContext.Writer

public static SIMForm BeginSIMForm(this HtmlHelper helper, string returnUrl, 
                                decimal amount, string apiLogin, 
                                string transactionKey) {

return new SIMForm(helper.ViewContext.Writer,
                    returnUrl,amount,apiLogin,
                    transactionKey,true);}

public static SIMForm BeginSIMForm(this HtmlHelper helper, string returnUrl, 
                                decimal amount, string apiLogin, 
                                string transactionKey, bool isTest) {

return new SIMForm(helper.ViewContext.Writer, 
                    returnUrl, amount, apiLogin, 
                    transactionKey,isTest);}
+12

, AuthorizeNet Razor. , , . .

+1

EpicThreeDev , html. "" ​​ ccv, , Index.cshtml, HTML

                     <br />                           
     <input type = "submit" value = "Pay"  style="position:relative; top:35px;" />    

, , , .

http://community.developer.authorize.net/t5/Integration-and-Testing/Having-Trouble-setting-up-MVC3-application-with-DPM/m-p/13226

+1

Here is my solution. It just prints the hidden fields of Authorize.net, so you can write your own form tag. Fill in your web.config file with the appropriate AppSettings values. Thus, you can easily change between development and production.

 public static class MyAuthNetHelper
 {
    public const string TEST_URL =  "https://test.authorize.net/gateway/transact.dll";
    public const string LIVE_URL = "https://secure.authorize.net/gateway/transact.dll";

    public static string ApiLogin
    {
        get { return ConfigurationManager.AppSettings["AuthNetAPILogin"]; }
    }

    public static string TransactionKey
    {
        get { return ConfigurationManager.AppSettings["AuthNetAPITransactionKey"]; }
    }

    public static string ReturnUrl
    {
        get { return ConfigurationManager.AppSettings["AuthNetReturnUrl"]; }
    }

    public static string ThanksUrl
    {
        get { return ConfigurationManager.AppSettings["AuthNetThanksUrl"]; }
    }

    public static bool TestMode
    {
        get { return bool.Parse(ConfigurationManager.AppSettings["AuthNetTestMode"]); }
    }

    public static string GatewayUrl
    {
        get { return TestMode ? TEST_URL : LIVE_URL; }
    }

    public static MvcHtmlString AuthNetDirectPostFields(this HtmlHelper helper, decimal amount)
    {

        var seq = Crypto.GenerateSequence();
        var stamp = Crypto.GenerateTimestamp();

        var fingerPrint = Crypto.GenerateFingerprint(TransactionKey,
            ApiLogin, amount, seq.ToString(), stamp.ToString());

        var str = new StringBuilder();

        str.Append(helper.Hidden("x_fp_hash", fingerPrint));
        str.Append(helper.Hidden("x_fp_sequence", seq));
        str.Append(helper.Hidden("x_fp_timestamp", stamp));
        str.Append(helper.Hidden("x_login", ApiLogin));
        str.Append(helper.Hidden("x_amount", amount));
        str.Append(helper.Hidden("x_relay_url", ReturnUrl));
        str.Append(helper.Hidden("x_relay_response", "TRUE"));

        return MvcHtmlString.Create(str.ToString());
    }   
}

cshtml:

    <form id="paymentForm" method="POST" action="@MyAuthNetHelper.GatewayUrl" class="form-horizontal offset1">
@Html.AuthNetDirectPostFields(PutYourAmountHere)
...
</form>

ThanksUrl function is used in your action to process the response from Authorize.net. Check this out for more: http://developer.authorize.net/integration/fifteenminutes/csharp/

0
source

All Articles