Dansk Nijmegen Kontingent

Nijmegenmarchen

15.-18. juli 2025

Error executing template "Designs/Web/Paragraph/RegistrationPayment.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_8e78209977d2434a996122be4408deac.Xor.HexToBytes(String hex) in e:\dynamicweb.net\solutions\Skabertrangweb\nijmegenmarchen.net.dynamicweb-cms.com\files\Templates\Designs\Web\Paragraph\RegistrationPayment.cshtml:line 25
   at CompiledRazorTemplates.Dynamic.RazorEngine_8e78209977d2434a996122be4408deac.Xor.XorDecrypt(String value) in e:\dynamicweb.net\solutions\Skabertrangweb\nijmegenmarchen.net.dynamicweb-cms.com\files\Templates\Designs\Web\Paragraph\RegistrationPayment.cshtml:line 60
   at CompiledRazorTemplates.Dynamic.RazorEngine_8e78209977d2434a996122be4408deac.Execute() in e:\dynamicweb.net\solutions\Skabertrangweb\nijmegenmarchen.net.dynamicweb-cms.com\files\Templates\Designs\Web\Paragraph\RegistrationPayment.cshtml:line 94
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @using System.Text 2 @functions { 3 public class Xor { 4 // https://www.random.org/integers/?num=16&min=1&max=255&col=1&base=10&format=html&rnd=new 5 private static int[] XorKeys { 6 get { 7 return new[] { 122, 181, 133, 137, 230, 71, 161, 93, 254, 78, 135, 190, 88, 74, 141, 45 }; 8 } 9 } 10 11 private static string BytesToHex(byte[] bytes) { 12 var c = new char[bytes.Length * 2]; 13 14 for (var i = 0; i < bytes.Length; i++) { 15 var b = (byte)(bytes[i] >> 4); 16 c[i * 2] = (char)(b > 9 ? b + 0x37 + 0x20 : b + 0x30); 17 b = (byte)(bytes[i] & 0xF); 18 c[i * 2 + 1] = (char)(b > 9 ? b + 0x37 + 0x20 : b + 0x30); 19 } 20 21 return new string(c); 22 } 23 24 private static byte[] HexToBytes(string hex) { 25 var bytes = new byte[hex.Length / 2]; 26 27 for (var i = 0; i < bytes.Length; i++) { 28 var c = hex[i * 2]; 29 bytes[i] = (byte)((c > '9' ? (c > 'Z' ? (c - 'a' + 10) : (c - 'A' + 10)) : (c - '0')) << 4); 30 c = hex[i * 2 + 1]; 31 bytes[i] |= (byte)(c > '9' ? (c > 'Z' ? (c - 'a' + 10) : (c - 'A' + 10)) : (c - '0')); 32 } 33 34 return bytes; 35 } 36 37 public static string XorEncrypt(string value) { 38 var buffer = Encoding.UTF8.GetBytes(value); 39 var hashed = new byte[buffer.Length + 16]; 40 var keys = XorKeys; 41 var salt = (Guid.NewGuid()).ToByteArray(); 42 var j = 0; 43 44 for (var i = 0; i < 8; i++) { 45 hashed[i] = (byte)(salt[i] ^ (uint)keys[i]); 46 hashed[i + 8 + buffer.Length] = (byte)(salt[i + 8] ^ (uint)keys[i + 8]); 47 } 48 49 for (var i = 0; i < buffer.Length; i++) { 50 if (j >= 16) 51 j = 0; 52 hashed[i + 8] = (byte)((buffer[i] ^ (uint)salt[j]) ^ 135u); 53 j++; 54 } 55 56 return BytesToHex(hashed); 57 } 58 59 public static string XorDecrypt(string value) { 60 var hashed = HexToBytes(value); 61 var buffer = new byte[hashed.Length - 16]; 62 var keys = XorKeys; 63 var salt = new byte[16]; 64 var j = 0; 65 66 for (var i = 0; i < 8; i++) { 67 salt[i] = (byte)(hashed[i] ^ (uint)keys[i]); 68 salt[i + 8] = (byte)(hashed[i + 8 + buffer.Length] ^ (uint)keys[i + 8]); 69 } 70 71 for (var i = 0; i < buffer.Length; i++) { 72 if (j >= 16) 73 j = 0; 74 buffer[i] = (byte)((hashed[i + 8] ^ 135u) ^ salt[j]); 75 j++; 76 } 77 78 return Encoding.UTF8.GetString(buffer); 79 } 80 } 81 } 82 @using System.Data.SqlClient 83 @using System.Security.Cryptography 84 @using System.Web 85 @{ 86 var paragraphId = GetInteger("ParagraphID"); 87 var designBaseUrl = GetString("Template:DesignBaseUrl"); 88 var receiptPage = GetString("Item.ReceiptPage"); 89 var text = GetString("Item.Text"); 90 91 var hashed = HttpContext.Current.Request["hashed"]; 92 var actioncode = HttpContext.Current.Request["actioncode"]; 93 94 var unhash = Xor.XorDecrypt(hashed).Split(':'); 95 var rowId = int.Parse(unhash[1]); 96 97 var type = default(string); 98 var data = default(string); 99 100 using (var connection = Dynamicweb.Data.Database.CreateConnection()) { 101 using (var command = connection.CreateCommand()) { 102 command.CommandText = "SELECT * FROM Tilmelding WHERE TilmeldingID = @id"; 103 command.Parameters.Add(new SqlParameter("@id", rowId)); 104 105 using (var reader = command.ExecuteReader()) { 106 if (reader.Read()) { 107 type = reader.GetString(reader.GetOrdinal("Tilmelding_Type")); 108 data = reader.GetString(reader.GetOrdinal("Tilmelding_Data")); 109 } 110 } 111 } 112 } 113 114 var json = Newtonsoft.Json.Linq.JObject.Parse(data); 115 116 var n_secret = "f3fa19cb2fbc10558bdd36956679d95a2597d622a483a9e2502039095e9daee74ebca9b38ec02e64f65b1ddae964a07a0616fa5aff78f2f6653a3391c40ab5e3"; 117 var n_params = new Dictionary<string, string> 118 { 119 { "onpay_gatewayid" , "20081020106418" }, 120 { "onpay_currency" , "208" }, 121 { "onpay_amount" , (int.Parse((string)json["PrisNijmegen"]) * 100).ToString() }, 122 { "onpay_reference" , "DW" + (20000000 + rowId) }, 123 { "onpay_accepturl" , "https://" + HttpContext.Current.Request.Url.Host + "/Files/Handlers/PaymentHandler.ashx?methodName=Accept&rid=" + rowId + "&payment=" + Pageview.Page.ID + "&receipt=" + receiptPage + "&hashed=" + hashed }, 124 { "onpay_declineurl" , "https://" + HttpContext.Current.Request.Url.Host + "/Files/Handlers/PaymentHandler.ashx?methodName=Decline&rid=" + rowId + "&payment=" + Pageview.Page.ID + "&receipt=" + receiptPage + "&hashed=" + hashed }, 125 { "onpay_callbackurl" , "https://" + HttpContext.Current.Request.Url.Host + "/Files/Handlers/PaymentHandler.ashx?methodName=Callback&rid=" + rowId + "&payment=" + Pageview.Page.ID + "&receipt=" + receiptPage + "&hashed=" + hashed } 126 }; 127 128 var n_queries = string.Join("&", n_params.Where(o => o.Key.StartsWith("onpay_")).OrderBy(o => o.Key).Select(o => HttpUtility.UrlEncode(o.Key) + "=" + HttpUtility.UrlEncode(o.Value))).ToLower(); 129 130 using (var sha1 = new HMACSHA1(Encoding.UTF8.GetBytes(n_secret))) { 131 var bytes = sha1.ComputeHash(Encoding.UTF8.GetBytes(n_queries)); 132 133 n_params["onpay_hmac_sha1"] = string.Join(string.Empty, bytes.Select(o => o.ToString("x2"))); 134 } 135 } 136 <div class="container-fluid"> 137 <div class="registration-wrapper"> 138 <h1>Tilmelding til Nijmegen @(DateTime.Now.Year)</h1> 139 <p><strong>(Trin 2 af 2)</strong></p> 140 141 <p>Du har nu gennemført trin 1 i tilmeldingen til årets Nijmegenmarch:</p> 142 143 <div class="row"> 144 <div class="col-sm-3">Navn:</div> 145 <div class="col-sm-9">@(json["Navn"])</div> 146 </div> 147 <div class="row"> 148 <div class="col-sm-3">Værnsgren:</div> 149 <div class="col-sm-9"> 150 @if ((string)json["TFR"] == "Beredskab") { 151 @("BRS") 152 } else { 153 if (((string)json["TFR"]).StartsWith("FSV ")) { 154 @("FSV") 155 } else { 156 @("HJV") 157 } 158 } 159 </div> 160 </div> 161 <div class="row"> 162 <div class="col-sm-3">Hold/Individuel:</div> 163 <div class="col-sm-9">@(json["Hold"])</div> 164 </div> 165 <div class="row"> 166 <div class="col-sm-3">Beløb til betaling:</div> 167 <div class="col-sm-9">@(json["PrisNijmegen"]),00 kr.</div> 168 </div> 169 170 <hr> 171 172 @(text) 173 174 @if (!string.IsNullOrWhiteSpace(actioncode)) { 175 <p class="bg-danger" style="padding: 15px;"> 176 Vi havde problemer med at gennemføre din betaling. (Fejl: @(actioncode))<br> 177 Prøv igen.<br><br> 178 Hvis fejlen bliver ved med at opstå, så kontakt <a href="mailto:webmaster@nijmegen.dk">webmaster@nijmegen.dk</a> 179 </p> 180 } 181 182 <form method="post" action="https://onpay.io/window/v3/"> 183 @foreach (var kvp in n_params) { 184 <input type="hidden" name="@(kvp.Key)" value="@(kvp.Value)"> 185 } 186 187 <button type="submit" class="btn btn-englishholly">Betal</button> 188 </form> 189 </div> 190 </div>
Del siden: