ASP.NET Zone

Die ASP.NET Community. Alle Antworten rund um Microsoft® Webtechnologien
Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe | Impressum | ASP.NET Zone Suchplugin

in
Home Blogs Foren FAQ Communities Fotos Downloads
Werbeanzeige

Paypal "Authorization & Capture" für VB.net

Letzter Beitrag 10-03-2012, 10:16 von Bumbum. 10 Antworten.
Beiträge sortieren: Zurück Weiter
  •  09-25-2012, 16:41 224649

    Paypal "Authorization & Capture" für VB.net

    Hallo,

    ich möchte bei unserem Onlineshop die Zahlungsweise Paypal hinzufügen. Ich habe nun einige Zeit Anleitungen und Tutorials gelesen und dachte mir, dass muss es doch auch schon fertig geben. Paypal ist ja jetzt nicht so exotisch. Aber meine Google-Suche hat als Ergebnis lediglich die Ernüchterung gebracht, dass es für ASP.net wohl wenig bis gar keine Unterstützung gibt.

    Der Onlineshop ist im VB-Dialekt in ASP.net programmiert. Muss ich jetzt dafür das Rad (die Paypal-Schnittstelle) tatsächlich neu erfinden? Mir geht es speziell um die Funktion "Authorization & Capture", die von Paypal angeboten wird. Der Grund ist, dass für einige Artikel der genaue Verkaufspreis bei der Bestellung noch nicht feststeht (Wiegeware) und deshalb die Zahlung bei der Bestellung bei Paypal autorisiert wird, und der genaue Betrag dann erst später eingezogen wird, wenn der genaue Preis feststeht.

    Zur Standard-Paypal-Einbindung (Paypal-Basis oder Paypal-Express) findet man bei Paypal sehr gute Beschreibungen, auch in Deutsch. Aber bei Authorization & Capture sieht es sehr düster aus.

    Ich verstehe die Englische Sprache, jedoch nicht perfekt. Vielleicht ist das der Grund, warum ich noch keine (gute) Anleitung für dieses Thema gefunden habe. Ich finde beim wichtigen Thema Bezahlung eine gute Anleitung in der Muttersprache (Deutsch) sehr wichtig, um eventuell Probleme und Missverständnisse im Vorfeld zu vermeiden. Den Paypal-Support habe ich diesbezüglich angeschrieben, ich hoffe da kommt eine positive Antwort.

    Wer kann mir ansonsten helfen? Ich suche quasi eine gute, einfache und deutsche Beschreibung des Vorgangs "Authorization & Capture" und, falls es gibt, eine fertige Klasse in VB.net um diese Paypal-Schnittstelle anzusprechen.

    Vielen Dank und Viele Grüße

    Andreas

  •  09-25-2012, 19:19 224650 Antwort zu 224649

    AW: Paypal "Authorization & Capture" für VB.net

    Hi,

    schau mal hier, das sollte in etwa das sein, was Du suchst.

      http://www.nsoftware.com/products/component/reauthcapture.aspx

    Ordentliche Beschreibungen hierzu, insbesondere in Deutsch, hab ich ehrlich gesagt noch keine gesehen.


    --
    Gruß, Stefan Falz
    Microsoft MVP - Visual Developer ASP/ASP.NET
    ASP.NET Consulting, Development, Coaching

    ASP.NET Zone - Leitfaden für gute Postings

    Xtopia 2008 - Gewinnspiel / Expression Studio und Xtopia Eintrittskarten zu gewinnen
  •  09-26-2012, 9:21 224652 Antwort zu 224650

    AW: Paypal "Authorization & Capture" für VB.net

    Guten Morgen Stefan,

    danke für deinen Beitrag. So wie ich deinen Link kurz überflogen habe ist das eine Kauf-Komponenten für den Vorgang. Oder irre ich mich? Mir geht es erst mal darum den komplett Vorgang zu verstehen, und auch welche Möglichkeiten bestehen. Quasi den Workflow erarbeiten. Dazu würde ein Beispiel der Umsetzung der Schnittstelle zu Paypal in VB.net natürlich sehr hilfreich sein, da man damit erst mal ohne lange seinen Kopf anstrengen zu müssen erst mal lospielen kann und alles was man in den Anleitungen und Tutorials in der Sandbox ausprobieren könnte.

    Vom Paypal-Support kam die Antwort, dass es keine deutsche Beschreibung des Vorgang gibt, was ich ehrlich gesagt sehr schwach finde. Aber sie bemühen sich uns zeitnah etwas zur Verfügung zu stellen. Die Hoffnung stirbt zuletzt. Dann beginne ich wohl mal das Rad neu zu erfinden und arbeite mich durch die ganzen Tutorials und versuche erst mal in die Sandbox reinzukommen.

    Falls noch jemand Beispiele kennt, bin ich für Hinweise dankbar!

    Viele Grüße

    Andreas

  •  09-26-2012, 14:26 224653 Antwort zu 224652

    AW: Paypal "Authorization & Capture" für VB.net

    Hallo,

    ich habe mal angefangen etwas auf die Beine zu stellen. Die Kommunikation mit der Seite scheint zu funktionieren. Allerdings erhalte ich den Fehler 10002 (You do not have permission to make this API call), was laut Beschreibung heißt, dass entweder mein Username, mein Passwort oder meine API-Signature falsch ist. Diese Werte habe ich aber mehrmals überprüft. Ich teste im Sandbox-Modus im IE und bin auch mit meinem Developer-Account in die Paypal-Developer Seite eingeloggt. Die API-Zugangsdaten (Name, Passwort und Signature) sind natürlich die des Händler-Accounts in meinem Developer-Account.

    Hier erst mal meine Klasse:



    Imports Microsoft.VisualBasic
    Imports System.IO
    Imports System.Net

    Public Class clsPaypalAPI
        Public APIUsername As String
        Public APIPasswort As String
        Public APIUnterschrift As String
        Public SandboxModus As Boolean
        Public LogFile As String

        Public lastError As String = ""

     

        Public Sub New(ByVal Username As String, ByVal Passwort As String, ByVal Unterschrift As String, _
                       ByVal Sandbox As Boolean, Optional ByVal LogFilePath As String = "")
            APIUsername = Username
            APIPasswort = Passwort
            APIUnterschrift = Unterschrift
            SandboxModus = Sandbox
            LogFile = LogFilePath
        End Sub

     

        Private Sub addLog(ByVal Eintrag As String)
            Try
                Dim FileStream As New FileStream(LogFile, FileMode.Append)
                Dim StreamWriter As New StreamWriter(FileStream)
                StreamWriter.WriteLine(Format$(Now, "dd.MM.yyyy HH:mm ss") & ": " & Eintrag)
                StreamWriter.Close()
                FileStream.Close()
            Catch ex As Exception
                'Nichts tun bei Fehler...
            End Try
        End Sub

        Private Function APIURL(ByVal Methode As String) As String
            Dim tmpS As String

            If SandboxModus Then
                tmpS = "<A href="https://api-3t.sandbox.paypal.com/nvp">https://api-3t.sandbox.paypal.com/nvp</A>"
            Else
                tmpS = "<A href="https://api-3t.paypal.com/nvp">https://api-3t.paypal.com/nvp</A>"
            End If

            addURLParameter(tmpS, "USER", APIUsername)
            addURLParameter(tmpS, "PWD", APIPasswort)
            addURLParameter(tmpS, "SIGNATURE", APIUnterschrift)
            addURLParameter(tmpS, "VERSION", "67.0")
            addURLParameter(tmpS, "METHOD", Methode)

            Return tmpS
        End Function

        Private Sub addURLParameter(ByRef URL As String, ByVal ParameterName As String, ByVal ParameterWert As String)
            If InStr(URL, "?") = 0 Then
                URL = URL & "?"
            Else
                URL = URL & "&"
            End If
            URL = URL & ParameterName & "=" & HttpContext.Current.Server.UrlEncode(ParameterWert)
        End Sub

        Private Function APIcall(ByVal URL As String, ByRef Response As NameValueCollection) As Boolean
            Response.Clear()

            Try
                Dim splitURL() As String = Split(URL, "?")

                Dim Enc As UTF8Encoding = New System.Text.UTF8Encoding
                Dim PostData() As Byte = Enc.GetBytes(splitURL(1))

                Dim Request As HttpWebRequest = HttpWebRequest.Create(splitURL(0))
                Request.Method = "POST"
                Request.ContentType = "application/x-www-form-urlencoded"
                Request.ContentLength = PostData.Length
                Request.GetRequestStream.Write(PostData, 0, PostData.Length)

                Dim ResponseReader As New StreamReader(Request.GetResponse.GetResponseStream)
                Dim Responses() As String = Split(ResponseReader.ReadToEnd, "&")
                ResponseReader.Close()

                Dim i1 As Long
                For i1 = 0 To UBound(Responses)
                    Dim PairData() As String = Split(Responses(i1), "=")
                    If UBound(PairData) = 1 Then
                        If Trim$(PairData(0)) <> "" Then Response.Add(PairData(0), HttpContext.Current.Server.UrlDecode(PairData(1)))
                    End If
                Next

                Return True
            Catch ex As Exception
                lastError = "Fehler beim aufrufen der Paypal-API: " & ex.Message
                Return False
            End Try
        End Function

        Private Function ResponseOk(ByVal Response As NameValueCollection, Optional ByRef Timestamp As Date = #1/1/2000#, _
                                    Optional ByVal ErrorCode As Long = 0, Optional ByRef CorrelationID As String = "", _
                                    Optional ByVal APIVersion As String = "", Optional ByRef APIBuild As String = "") As Boolean
            Dim tmpS As String = Response.Item("TIMESTAMP").ToString
            If IsDate(tmpS) Then Timestamp = CDate(tmpS)

            ErrorCode = 0
            CorrelationID = Response.Item("CORRELATIONID").ToString()
            APIVersion = Response.Item("VERSION").ToString()
            APIBuild = Response.Item("BUILD").ToString()

            Select Case Response.Item("ACK").ToString.ToUpper
                Case "SUCCESS", "SUCCESS WITH WARNING"
                    Return True
                Case Else '"FAILURE", "FAILURE WITH WARNING"
                    ErrorCode = Val(Response.Item("L_ERRORCODE0").ToString())

                    lastError = Response.Item("L_LONGMESSAGE0").ToString()
                    If lastError = "" Then lastError = Response.Item("L_SHORTMESSAGE0").ToString()
                    lastError = "Fehler bei Paypal-Anfrage (#" & Trim$(Str$(ErrorCode)) & "): " & lastError
            End Select
        End Function

     

        Public Function AddressVerify(ByVal EMail As String, ByVal Straße As String, ByVal PLZ As String, _
                                      ByRef EMailOk As Boolean, Optional ByRef AdresseOk As Boolean = False, _
                                      Optional ByRef StraßeOk As Boolean = False, Optional ByRef PLZOk As Boolean = False, _
                                      Optional ByRef Ländercode As String = "", Optional ByRef TOKEN As String = "") As Boolean
            lastError = ""

            EMailOk = False
            AdresseOk = False
            StraßeOk = False
            PLZOk = False
            Ländercode = ""
            TOKEN = ""

     

            Dim URL As String = APIURL("AddressVerify")
            addURLParameter(URL, "EMAIL", EMail)
            addURLParameter(URL, "STREET", Straße)
            addURLParameter(URL, "ZIP", PLZ)

            Dim Response As New NameValueCollection
            If APIcall(URL, Response) Then
                If ResponseOk(Response) Then
                    Return True
                Else
                    Return False
                End If
            Else
                Return False
            End If
        End Function
    End Class

    Und so teste ich das ganze:



    Dim PayPal As New clsPaypalAPI("....", "....", "....", True)

    Dim EMailOk As Boolean
    Dim AdresseOk As Boolean
    Dim StraßeOk As Boolean
    Dim PLZOk As Boolean
    Dim Ländercode As String = ""
    Dim TOKEN As String = ""

    If PayPal.AddressVerify("<A href="mailto:bla@blub.de">bla@blub.de</A>", "Teststr. 1", "12345", EMailOk, AdresseOk, StraßeOk, PLZOk, Ländercode, TOKEN) Then
     '...
    Else
     MsgBox(PayPal.lastError)
    End If

    Habe ich etwas übersehen?

    Viele Grüße

    Andreas

  •  09-26-2012, 14:28 224654 Antwort zu 224653

    AW: Paypal "Authorization & Capture" für VB.net

    Das href unten an der E-Mail-Adresst ist jetzt gerade durch das posten hier reingekommen. Normalerweise steht da eine richtige Adresse drin, sollte aber eigentlich für den Fehler eh keine Rolle spielen.
  •  09-26-2012, 15:06 224655 Antwort zu 224654

    AW: Paypal "Authorization & Capture" für VB.net

    Auf der Toilette ist mir gerade die Ursache des Problem eingefallen. :-)

    So funktioniert die Autorisierung:



    Dim PostData() As Byte = Enc.GetBytes("?" & splitURL(1))

    Das ? hat gefehlt. Der Fehlercode bleibt jetzt allerdings bei 10002, nur die Meldung heißt jetzt "Security header is not valid". Dazu hat die Paypal-Hilfe leider gar keinen Tipp oder Lösung...

  •  09-26-2012, 16:26 224656 Antwort zu 224655

    AW: Paypal "Authorization & Capture" für VB.net

    Hi,

    ich weiß schon, warum ich diesen Paypal Kram nicht mag^^

      http://www.prestashop.com/forums/topic/116671-solved-paypal-checkout-issue-l-longmessage0-security-header-is-not-valid/
      https://support.bigcommerce.com/questions/1150/What+does+%22Security+Header+is+Not+Valid+10002%22+for+PayPal+mean%3F
      ...

    Soweit ich das sehen kann, führt auch ein abschließendes Leerzeichen (bspw. beim Usernamen, ...) zu diesem Fehler. Wenn Du also anstelle von "USERNAME" bspw. "USERNAME " übergibst, korrigier das mal.

    Des Weiteren ist die Accountart wichtig. Einen Käuferaccount kann man anscheinend nicht gleichzeitig als Verkäuferaccount verwenden.


    --
    Gruß, Stefan Falz
    Microsoft MVP - Visual Developer ASP/ASP.NET
    ASP.NET Consulting, Development, Coaching

    ASP.NET Zone - Leitfaden für gute Postings

    Xtopia 2008 - Gewinnspiel / Expression Studio und Xtopia Eintrittskarten zu gewinnen
  •  09-27-2012, 14:28 224658 Antwort zu 224656

    AW: Paypal "Authorization & Capture" für VB.net

    Hallo Stefan,

    danke für die Links. Der erste geht leider nicht, da kommt zwar ganz kurz was aber die Seite wird sofort komplett weiß ohne Inhalt. Den zweiten Link kannte ich in der Art schon. Meine Zugangsdaten habe ich schon neu erstellt, und auch penibelst darauf geachtet diese genau so im Post-String zu verwenden. Der Account ist selbstverständlich ein Verkäufer-Account.

    Paypal hat noch keine Antwort zu meinem Problem gesendet (wie immer, 2 Tage Antwortzeit scheint dort immer das Minimum zu sein...)

    Langsam verstehe ich, warum kein Programmierer Paypal mag...

    Viele Grüße

    Andreas

  •  10-02-2012, 17:59 224668 Antwort zu 224658

    AW: Paypal "Authorization & Capture" für VB.net

    Hallo,

    heute kam nach 4 Werktagen (insgesamt waren es 6 Tage) die Antwort von Paypal, dass ich doch bitte prüfen soll, ob ich Leerzeichen in meinen Zugangsdaten habe... Angry

    Wenn der Support so weiter geht, kann das ja noch so ein halbes Jahr bis Jahr dauern, bis ich das zum laufen bekomme.

    Gibts tatsächlich nichts fertiges für asp.net?

    Verzweifelte Grüße
    Andreas
  •  10-02-2012, 18:25 224669 Antwort zu 224668

    AW: Paypal "Authorization & Capture" für VB.net

    Hi,
    Bumbum:

    Gibts tatsächlich nichts fertiges für asp.net?

    eine Option hatte ich dir ja gepostet. Wenn dir die nicht zusagt, wirst Du nicht umhin kommen, das "fertige" selbst zu schreiben. Es wäre dann sicherlich richtig prima, wenn Du es dann anderen Neugierigen im Quellcode zur Verfügung stellen würdest. Dann müssen zumindest andere, die das auch mal machen müssen, nicht ewig mit dem Support und Try&Error rumeiern :)


    --
    Gruß, Stefan Falz
    Microsoft MVP - Visual Developer ASP/ASP.NET
    ASP.NET Consulting, Development, Coaching

    ASP.NET Zone - Leitfaden für gute Postings

    Xtopia 2008 - Gewinnspiel / Expression Studio und Xtopia Eintrittskarten zu gewinnen
  •  10-03-2012, 10:16 224671 Antwort zu 224669

    AW: Paypal "Authorization & Capture" für VB.net

    Guten Morgen Stefan,

    ich habe gestern Abend tatsächlich eine Antwort bekommen. Das Problem lag, wie schon immer, an der Dokumentation. Also das was ich im Eingangsposting bemängelt habe.
    Ich habe zum testen einfach die erste beschriebene Funktion in der Doku (AddressVerify) gewählt. Nach fast 5 AT kommt dann von Paypal endlich die Antwort, dass diese Funktion erst vom Kundenservice freigeschaltet werden muss. Die Fehlermeldung, die kommt ist dann natürlich das i-Tüpfelchen. Man sucht einfach in die komplett falsche Richtung nach Lösungen und bekommt vom Support dann noch mal die gleichen Lösungen vorgeschlagen. Erst nach weiterem Nachbohren erhält man die Richtige Antwort. Ich habe in meiner Anfrage an Paypal übrigens erwähnt, dass ich AddressVerify probiere. ;-)

    Ich habe das Ganze aber erst hier zuhause im Browser probiert. Ich komme gerade nicht an meinen asp.net Paypal-Test-Quellcode in der Firma ran, aber morgen im Büro wird es das erste sei, was ich ausprobiere.

    Falls ich irgendwann mal fertig werde, stelle ich meinen Code gerne zur Verfügung. Aber ich denke damit ist nicht vielen geholfen. So wie ich das sehe, ist das Hauptproblem die Dokumentation. Alles in allem ist die Schnittstelle ja kein Hexenwerk und sollte in maximal einer Stunde "gecoded" sein. Die Stolpersteine sind dann die fehlenden Informationen, durch die man nicht weiter kommt und immer erst tagelang auf die Antwort vom Support warten muss.

    Viele Grüße
    Andreas
Als RSS Feed in XML ansehen
Powered by Community Server (Commercial Edition)