Pagamenti Online

mercoledì 25 novembre 2009 - 13.18

TOPOAMORE Profilo | Expert

Salve a tutti,

vorrei implementare il pagamento online di prodotti dal mio sito.

Ho visto anche le Api di paypal ma non riesco ben a capire 2 cose : 1) il cliente deve avere per forza un account paypal? 2) non riesco a trovare un esempio che riesco a capire dai loro manuali.

Chiedo se qualcuno ha gia pratica con questo metodo o qualche link per su nuovi metodi.

Grazie
ASP 2.0 - VB 2008

Brainkiller Profilo | Guru

>Ho visto anche le Api di paypal ma non riesco ben a capire 2
>cose : 1) il cliente deve avere per forza un account paypal?

No. E' una domanda che mi sono posto spesso anche io. C'è una differenza però mi par di capire che se tu fai un pagamento paypal-paypal non ci sono commissioni perchè è come se fosse un trasferimento tra due conti. Mentre se tu vuoi mettere in piedi una cosa che supporti le transazioni anche per chi non è titolare di un conto paypal bisogna pagare le classiche commissioni richieste dai circuiti interbancari, Visa, Mastercard, ecc. che sono variabili tra 1 e 3 % sull'importo. La prima cosa da sapere prima di implementare un pagamento online sono le commissioni. Poi puoi scegliere Paypal, oppure altri player come Banca Sella (nota in italia per questo tipo di prodotti) o anche altre banche.

>2) non riesco a trovare un esempio che riesco a capire dai loro
>manuali.

Siamo in due. Risolviamo prima il punto 1) poi procediamo. Se invece sei già definitivamente orientato per Paypal fammi sapere.

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

TOPOAMORE Profilo | Expert

ciao se riusciamo a darci una mano ne sarei enormemente felice.

oltre banca sella c'e' anche un altro operatore che compre piu banche BANKPASS (http://www.bankpass.it/) ma bisognerebbe chiedere maggiori informazioni.

Ho scaricato e sto studiando i manuali paypal ma non sono chiarissimi.

cmq le commissioni banca sella non sono piccoline https://www.sella.it/ecommerce/gestpay/gestpay_condizioni.jsp

in questo momento paypal mi sembra il migliore sia come commissioni sia come disponibilita api ee gestione dettagliata delle transazioni e reportistica

Diamoci una mano e troviamo una soluzione
ASP 2.0 - VB 2008

leonardop Profilo | Junior Member

Scaricate lo starterkit TheBeerHouse. Integra uno store che fa uso di paypal, quindi un'ottimo esempio

Spero di essere stato di aiuto
leonardo

TOPOAMORE Profilo | Expert

Provvedo a scaricalo e ti dico
ASP 2.0 - VB 2008

TOPOAMORE Profilo | Expert

Non mi parte completamente. C'e' un modo particolare? La soluzione non carica tutto.....
ASP 2.0 - VB 2008

leonardop Profilo | Junior Member

che vuol dire "non mi parte completamente"??
Comunque puoi scaricare la versione 1.0 http://thebeerhouse.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=127 , va benissimo come esempio
leonardo

TOPOAMORE Profilo | Expert

quando carico la soluzione 2 componenti non li carica e il sito (lo store del sito) non carica i prodotti...bho
ASP 2.0 - VB 2008

sankyu Profilo | Senior Member

io per ora ho solo usato la soluzione non integrata nel sito web quindi prepari la richiesta di pagamento, la mandi a paypal che la processa e tramite una richiesta post ti da la conferma o la negazione dell'operazione
per riassumere il tutto si svolge in tre fasi:
1- prepari la richiesta post da mandare a paypal su di una pagina web https( la richiesta deve contenere alcuni campi necessari che sono elencati nel form di esempio qua sotto)
<form id="payForm" method="post" action="<%Response.Write (URL)%>">
<input type="hidden" name="cmd" value="_xclick"/>
<input type="hidden" name="business" value="<%Response.Write (business)%>">
<input type="hidden" name="item_name" value="<%Response.Write (item_name)%>">
<input type="hidden" name="amount" value="<%Response.Write (amount)%>">
<input type="hidden" name="no_shipping" value="<%Response.Write (no_shipping)%>">
<input type="hidden" name="return" value="<%Response.Write (return_url)%>">
<input type="hidden" name="rm" value="<%Response.Write (rm)%>">
<input type="hidden" name="notify_url" value="<%Response.Write (notify_url)%>">
<input type="hidden" name="cancel_return" value="<%Response.Write (cancel_url)%>">
<input type="hidden" name="currency_code" value="<%Response.Write (currency_code)%>">
<input type="hidden" name="custom" value="<%Response.Write (custom)%>">
<input type="hidden" name="lc" value="PL">
</form>
i vari response.write settano dei campi con delle variabili che per comodità ho memorizzato nel web.config e che comunque sono tutti forniti da paypal e presenti nel manuale
in particolare <%Response.Write (URL)%> fornisce l'url di paypal a cui inviare la richiesta di pagamento
il valore custom è un valore che potete usare per identificare la transazione come un'id richiesta o qualcosa di simile e sarà molto utile per aggiornare lo stato del pagamento più avanti

2- ora il gioco si sposta sui server paypal ed a voi non resta che attendere l'andamento del pagamento sia questo con paypal o carta di credito a noi non interessa

3-paypal risponde in 2 modi : via querystring o via richiesta ipn (una semplice richiesta post verso una pagina web definita dal pannello di controllo businness paypal)
ora viene il bello:
vi posto prima il codice per decodificare la risposta via querystring e come usarlo

Private Function getPdtResponseValue(ByVal pdtresponse As String, ByVal key As String) As String
Dim sParts As String()
Dim iParts As Integer
Dim aParts As String()
Dim sKey As String
Dim sValue As String
pdtresponse = Mid(pdtresponse, 9)
sParts = Split(pdtresponse, vbLf)
iParts = UBound(sParts) - 1
For i = 0 To iParts
aParts = Split(sParts(i), "=")
sKey = aParts(0)
sValue = aParts(1)
If sKey = key Then
Return sValue
End If
Next
Return ""
End Function

'leggo la risposta della querystring
Dim strResponse As HttpWebResponse = CType(req.GetResponse(), HttpWebResponse)
Dim IPNResponseStream As Stream = strResponse.GetResponseStream
Dim encode As Encoding = System.Text.Encoding.GetEncoding("utf-8")
Dim readStream As New StreamReader(IPNResponseStream, encode)
Dim read(1024) As [Char]
' Reads 256 characters at a time.
Dim count As Integer = readStream.Read(read, 0, 1024)
While count > 0
' Dumps the 256 characters to a string
Dim IPNResponse As New [String](read, 0, count)
count = readStream.Read(read, 0, 1024)
Dim risposta As String = IPNResponse.Substring(0, 7)
' elaboro la risposta
If risposta = "SUCCESS" Then
Dim idRichiestaAccredito As Integer = (getPdtResponseValue(IPNResponse, "custom"))
end if
end while

questo è solo un esempio di una risposta di tipo pdt quindi mandata direttamente dalla pagina web di paypal come querystring verso un'ipotetica vostra pagina paymentsuccessful.aspx

ora passiamo alla risposta ipn cioè una risposta che avviene in background generalmente qualche secondo dopo la risposta pdt e che è immune da un'involontaria chiusura del browser dell'utilizzatore del sito in quanto avviene tramite post tra paypal ed una vostra pagina che chiamerò ipnHandler.aspx

il codice .aspx è molto semplice
<%@ Page Language="VB" AutoEventWireup="false" Inherits="BidreamsItaWebApp.IPNHandler" Codebehind="IPNHandler.aspx.vb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
quello vb un po meno

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
Dim ci As CultureInfo = New CultureInfo("en-us")
Dim strFormValues As String = Encoding.ASCII.GetString(Request.BinaryRead(Request.ContentLength))
Dim strNewValue As String
'Salvo i dati post IPN nel database poi invio la risposta a paypal
Dim idRichiestaAccredito As Integer = SaveIpnResponseAndGetCustom(strFormValues)
' getting the URL to work with
Dim URL As String
If AppSettings("UseSandbox").ToString = "true" Then
URL = "https://www.sandbox.paypal.com/cgi-bin/webscr"
Else
URL = "https://www.paypal.com/cgi-bin/webscr"
End If
' Create the request back
Dim req As HttpWebRequest = CType(WebRequest.Create(URL), HttpWebRequest)
' Set values for the request back
req.Method = "POST"
req.ContentType = "application/x-www-form-urlencoded"
strNewValue = strFormValues + "&cmd=_notify-validate"
req.ContentLength = strNewValue.Length
'Controllo che la richiesta non sia già stata utilizzata e
'salvo la richiesta su db per evitare duplicati
' Write the request back IPN strings
Dim stOut As StreamWriter = New StreamWriter(req.GetRequestStream(), _
Encoding.ASCII)
stOut.Write(strNewValue)
stOut.Close()

'send the request, read the response
Dim strResponse As HttpWebResponse = CType(req.GetResponse(), HttpWebResponse)
Dim IPNResponseStream As Stream = strResponse.GetResponseStream
Dim encode As Encoding = System.Text.Encoding.GetEncoding("utf-8")
Dim readStream As New StreamReader(IPNResponseStream, encode)

Dim read(256) As [Char]
' Reads 256 characters at a time.
Dim count As Integer = readStream.Read(read, 0, 256)
While count > 0
' Dumps the 256 characters to a string
Dim IPNResponse As New [String](read, 0, count)
count = readStream.Read(read, 0, 15)
Dim risposta As String = IPNResponse.Substring(0, 8)
' if the request is verified
If risposta = "VERIFIED" Then
Dim ric As New BidreamsIta.RichiesteAccredito
ric = BidreamsIta.RichiesteAccredito.getById(idRichiestaAccredito)
If Not ric.Confermata Then
EseguiAccredito(ric.ImportoCrediti, ric.ImportoValuta, getIpnResponseValue(strNewValue, "txn_id"), ric.IdUtente)
ric.Conferma()
End If
End If
End While
readStream.Close()
strResponse.Close()
End Sub

Private Function SaveIpnResponseAndGetCustom(ByVal response As String) As String
Using c As New BidreamEntities
Dim res As New paypalIpnResponse
Dim sParts As String()
Dim iParts As Integer
Dim aParts As String()
Dim sKey As String
Dim sValue As String
sParts = Split(response, "&")
iParts = UBound(sParts) - 1
For i = 0 To iParts
aParts = Split(sParts(i), "=")
sKey = aParts(0)
sValue = aParts(1)
Select Case sKey
Case "txn_id"
res.txn_id = sValue
Case "txn_type"
res.txn_type = sValue
Case "business"
res.business = sValue
Case "charset"
res.charset = sValue
Case "custom"
res.custom = sValue
Case "first_name"
res.first_name = sValue
Case "handling_amount"
res.handling_amount = sValue
Case "item_name"
res.item_name = sValue
Case "item_number"
res.item_number = sValue
Case "last_name"
res.last_name = sValue
Case "mc_currency"
res.mc_currency = sValue
Case "mc_fee"
res.mc_fee = sValue
Case "mc_gross"
res.mc_gross = sValue
Case "payer_email"
res.payer_email = sValue
Case "payer_id"
res.payer_id = sValue
Case "payer_status"
res.payer_status = sValue
Case "payment_date"
res.payment_date = sValue
Case "payment_fee"
res.payment_fee = sValue
Case "payment_gross"
res.payment_gross = sValue
Case "payment_status"
res.payment_status = sValue
Case "pending_reason"
res.pending_reason = sValue
Case "quantity"
res.quantity = sValue
Case "receiver_email"
res.receiver_email = sValue
Case "receiver_id"
res.receiver_id = sValue
Case "residence_country"
res.residence_country = sValue
Case "shipping"
res.shipping = sValue
Case "tax"
res.tax = sValue
Case "transaction_subject"
res.transaction_subject = sValue
End Select
Next
c.AddTopaypalIpnResponse(res)
c.SaveChanges()
If res.custom <> "" Then
Return res.custom
Else
Return 0
End If
End Using
End Function

Private Function getIpnResponseValue(ByVal Ipnresponse As String, ByVal key As String) As String
Dim sParts As String()
Dim iParts As Integer
Dim aParts As String()
Dim sKey As String
Dim sValue As String
sParts = Split(Ipnresponse, "&")
iParts = UBound(sParts) - 1
For i = 0 To iParts
aParts = Split(sParts(i), "=")
sKey = aParts(0)
sValue = aParts(1)
If sKey = key Then
Return sValue
End If
Next
Return ""
End Function

ora non ho molto tempo di scendere nel dettaglio, per un corso che devo tenere presso un itis sto preparando una guida con delle slide e la spiegazione dettagliata di tutto il processo sia paypal che paynova
poi chiederò agli admin del sito se la possono pubblicare tra le guide
cmq se avete domande chiedete

Brainkiller Profilo | Guru

>oltre banca sella c'e' anche un altro operatore che compre piu
>banche BANKPASS (http://www.bankpass.it/) ma bisognerebbe chiedere
>maggiori informazioni.

Bankpass mi pare cara, 25€ al mese di servizio 2.5% sul transato pagobancomat, 3,5% cartasì.

>cmq le commissioni banca sella non sono piccoline https://www.sella.it/ecommerce/gestpay/gestpay_condizioni.jsp

Banca sella ha startup alti e poi commissioni 3% e 4% sulla base del contratto.

>in questo momento paypal mi sembra il migliore sia come commissioni
>sia come disponibilita api ee gestione dettagliata delle transazioni
>e reportistica

Paypal 0 costi fissi di piattaforma, ma 3.4% di commissione a scendere se superi i 2500 € al mese e in aggiunta 0,35 € a transazione. Inoltre se non sbaglio quando trasferisci soldi da paypal al tuo conto corrente devi pagare ancora delle commissioni.

Oggi ho visto invece IWSmile:

http://www.iwsmile.it/
1.8% di commissione e 3 € al mese di piattaforma

Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

TOPOAMORE Profilo | Expert

Per Sankyu

grazie per tutto il codice di studio, sei molto gentile. Ti dico subito che lo copiero per studiarmelo con calma ora che torno a milano sul mio bel computer.

Per Brainkiller

Non sembra male ma bisogna vedere se e totalemente integrabile come paypal. Come presentazione non sembra male
ASP 2.0 - VB 2008

Brainkiller Profilo | Guru

>Per Brainkiller
>Non sembra male ma bisogna vedere se e totalemente integrabile
>come paypal. Come presentazione non sembra male

Tutti sono integrabili come Paypal e forse anche più facilmente Cmq. quando ho girato io su paypal c'è un'area in cui trovi degli .zip con dentro le pagine già create d'esempio per tutti i linguaggi asp.net, php, jsp, ecc.
Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

marco_tv Profilo | Newbie

Ciao a tutti, questo è il mio primo messaggio :)

Per chi fosse interessato qui ho trovato un esempio in vb.net per paypal già pronto e facilissimo da usare

Io invece stavo cercando un esempio in vb.net per iwsmile. Esiste?

Paypal ha commissioni troppo alte e non vorrei regalare loro troppi soldi

Brainkiller Profilo | Guru

>Io invece stavo cercando un esempio in vb.net per iwsmile. Esiste?
>Paypal ha commissioni troppo alte e non vorrei regalare loro
>troppi soldi

Hai capito ora perchè costa di più Paypal ?

Ciao

David De Giacomi | <empty>
http://blogs.dotnethell.it/david/

marco_tv Profilo | Newbie

ehhhh hai ragione sono furbi, codice facilmente recuperabile => piu soldi per loro

comunque allora per iwsmile non c'è niente per vb.net o asp.net? ho cercato molto in giro

Brainkiller Profilo | Guru

>ehhhh hai ragione sono furbi, codice facilmente recuperabile
>=> piu soldi per loro
>comunque allora per iwsmile non c'è niente per vb.net o asp.net?
>ho cercato molto in giro

Eh in effetti non si capisce.
Io pensavo che una volta diventato cliente loro ti fornissero l'SDK con gli esempi di codice. Sei già cliente tu ?
Secondo me devi sentire loro e chiedere se hanno o codice o specifiche.
Alla fine le specifiche sono tutte simili e di facile implementazione.
Ciao


David De Giacomi | <empty>
http://blogs.dotnethell.it/david/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5