Also fummle ich mit der IPN-Funktion dieser Website, um zu sehen, ob ich es in ein dummes Projekt integrieren möchte, an dem meine Freunde und ich arbeiten. Um ehrlich zu sein, ich weiß nicht viel C# in der Tiefe, ich bin ziemlich neu in der Sprache (ein paar Monate Programmierpraxis). Diese ist die PHP-Probe geben sie auf, wie es zu benutzen: https://github.com/Rocketr/rocketrnet-ipn-php/blob/master/example_rocketr_ipn.phpRocket IPN mit C# ASP.NET MVC
Ich versuche, einen Empfänger zu machen wie die in MVC 5. ich das Modell Setup mit einer Funktion haben, wenn das IPN trifft auf die Server-Seite Verarbeite die Anfrage, aber sie scheint immer nur fehlzuschlagen und keine Rohdaten zu schreiben, die ich in den Logs zu erfassen versuche.
// GET: Purchases/Incoming
public void Incoming()
{
var ipnDebugLog = HttpRuntime.AppDomainAppPath + "/Logs/IPN/debug.txt";
var testIPNKey = "the hash here";
byte[] ipnToByes = Encoding.ASCII.GetBytes(testIPNKey); // IPN string to byteto hash with
var recvdIPN = Request["HTTP_IPN_HASH"];
HMACSHA256 testHash = new HMACSHA256(ipnToByes); // Setting testHash to IPN secret string
string ipnHeader = Request["IPN_HASH"];
using (StreamWriter sw = new StreamWriter(ipnDebugLog))
{
sw.WriteLine(ipnHeader);
foreach (var reqHead in ipnHeader)
{
sw.WriteLine(reqHead.ToString());
sw.WriteLine("JSON String: " + Request["HTTP_IPN_SECRET"]);
sw.WriteLine(recvdIPN);
sw.WriteLine("From: " + GetIPAddress());
}
}
}
Also das ist nur ich versuche, die Daten von Rocketr gesendet bekommen. heißt es auf der Website:
die Integrität der Nutzlast, um zu überprüfen, werden wir eine HMAC-Signatur über einen HTTP-Header namens „IPN_HASH“ senden. Die HMAC-Signatur ist ein signiertes JSON-codiertes POST-Objekt mit Ihrem IPN-Geheimnis. Sie können sehen, wie die Signatur in der Datei example_rocketr_ipn.php in diesem Repository zu überprüfen.
Bin ich gerade zu dumm und neu zu verstehen, dass C# so funktioniert? Ich habe das Gefühl, dass ich auf dem richtigen Weg bin, die Rohdaten zu lesen, aber ich bin wahrscheinlich falsch?
Also, um die Frage zusammenzufassen Mache ich die falsche Möglichkeit, eine rohe benutzerdefinierte HTTP-Header namens IPN_HASH zu lesen? Gehen Sie vom PHP-Beispiel, das sie verwendet haben, aus, um einen Server-Variablen-Header zu lesen, der mit HTTP_IPN_HASH versehen ist, richtig?
Ist das dein Controller? Warum verwenden Sie keine Bindung mit dem FromHeader-Attribut? – frz3993
HTTP-Header befinden sich in 'Request.Headers'. Du machst eine 'foreach' an einer' string' (?), _etc_. – EdSF
Wie ich sagte, ich bin sehr neu zu C# und ASP.net, konnte ich alle Header-Daten und Body-Daten auflisten und Rocketr berichtet die falschen Header-Namen Felder, so dass eine Menge erklärt. Ich habe die Daten jetzt richtig gelesen, so kann ich es auf der Rückseite manipulieren. ABER ich muss noch herausfinden, wie man mit dieser HMAC512-Sache umgeht. Also muss ich dies konvertieren $ hmac = hash_hmac ("sha512", json_encode ($ _ POST), trimmen ($ IPN_SECRET)); Zu einer Funktion in C#, die ich nur bekommen habe: HMACSHA512 myIPNHash = new HMACSHA512 (Encoding.ASCII.GetBytes (myIPNKey)); Was anscheinend nicht funktioniert ... wenn ich rufe .hash – Ar2Dee2