PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 25 → WEBDEV - PayPal como implementar uma solução completa ?
WEBDEV - PayPal como implementar uma solução completa ?
Iniciado por Bastiaan BASTIAAN, jun., 16 2016 7:12 PM - 4 respostas
Membro registado
37 mensagems
Popularité : +5 (5 votes)
Publicado em junho, 16 2016 - 7:12 PM
Como faço para implementar uma solução PayPal completa em WebDev ?

A implementação de um pagamento por parte do cliente, realmente é muito fácil.

Porém uma aplicação real, precisa permitir que informações sobre o pagamento seja retornado em tempo real (assim que o pagamento é feito no PayPal), para que o sistema desenvolvido em Webdev, possa receber a confirmação de pagamento como número do pedido, valor pago.

Estas informações precisam retornar a aplicação para que a baixa de pagamento possa ser controlada na aplicação Webdev.

O Paypal oferece o Payment Data Transfer (PDT), um serviço de notificação que ativado, envia detalhes da transação para a
aplicação Webdev que estiver botões do paypal.

Com as informações retornadas, o sistema em Webdev poderia então dar baixa em tempo real nos arquivos do sistema, controlando os pedidos efetivamente pagos.

O paypal, enviaria via HTTP como uma vriavel GEt. Esta informação seria enviada para uma URL de retornoa,
(a url de retorno previamente criada é registrada no paypal (pelo responsavel pelo sistema Webdev), para que paypal
possa utilizar a URL para enviar o registro da confirmação de pagamento)

O paypal disponibiliza um exemplo em ASP.NET (VB), de como seria o código esta página (URL), que deveria ser criada para
que o paypal enviar as informações de pagamentos realizados.(conforme exemplo abaixo).

A questão é alguém teria este código escrito para WebDev ?

Como e onde este código deve ser utilizado no WebDev ?


Meus antecipados agradecimentos a que possa resolver este problema.


Partial Public Class vbPDTSample Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

' CUSTOMIZE THIS: This is the seller's Payment Data Transfer authorization token.
' Replace this with the PDT token in "Website Payment Preferences" under your account.
Dim authToken As String = "Dc7P6f0ZadXW-U1X8oxf8_vUK09EHBMD7_53IiTT-CfTpfzkN0nipFKUPYy"
Dim txToken As String = Request.QueryString("tx")
Dim strRequest As String = "cmd=_notify-synch&tx=" & txToken & "&at=" & authToken

'Post back to either sandbox or live
Dim strSandbox As String = "https://www.sandbox.paypal.com/cgi-bin/webscr"
Dim strLive As String = "https://www.paypal.com/cgi-bin/webscr"
Dim req As HttpWebRequest = CType(WebRequest.Create(strSandbox), HttpWebRequest)

'Set values for the request back
req.Method = "POST"
req.ContentType = "application/x-www-form-urlencoded"
req.ContentLength = strRequest.Length

'for proxy
'Dim proxy As New WebProxy(New System.Uri("http://url:port#"))
'req.Proxy = proxy

'Send the request to PayPal and get the response
Dim streamOut As StreamWriter = New StreamWriter(req.GetRequestStream(), Encoding.ASCII)
streamOut.Write(strRequest)
streamOut.Close()
Dim streamIn As StreamReader = New StreamReader(req.GetResponse().GetResponseStream())
Dim strResponse As String = streamIn.ReadToEnd()
streamIn.Close()

If Not String.IsNullOrEmpty(strResponse) Then
Dim results As New Dictionary(Of String, String)
Dim reader As New StringReader(strResponse)
Dim line As String = reader.ReadLine()
If line = "SUCCESS" Then
While True
Dim aLine As String
aLine = reader.ReadLine
If aLine IsNot Nothing Then
Dim strArr() As String
strArr = aLine.Split("=")
results.Add(strArr(0), strArr(1))
Else
Exit While
End If
End While
Response.Write("<p><h3>Your order has been received.</h3></p>")
Response.Write("<b>Details</b><br>")
Response.Write("<li>Name: " + results("first_name") & " " & results("last_name") & "</li>")
Response.Write("<li>Item: " & results("item_name") & "</li>")
Response.Write("<li>Amount: " & results("payment_gross") & "</li>")
Response.Write("<hr>")
ElseIf line = "FAIL" Then
'log for manual investigation
Response.Write("Unable to retrive transaction detail")

End If
Else
Response.Write("Unknown Error")


End If

End Sub
End Class
Membro registado
3.657 mensagems
Popularité : +175 (223 votes)
Publicado em junho, 28 2016 - 12:34 AM
Ola BASTIAAN,

Você sempre teve os códigos com você, na versão 21, nos exemplos, se voce escrever paypal, vai filtrar e apresentar 3 exemplos.





Verifique também no help online: http://help.windev.com

Vejamos um exemplo e o que tem de código interno nas telas:













Segue códigos que tem em um dos 3 exemplos:

Codigo 01 Global
[code:wl]
gsAccount is string

//
// START IN PAYPAL TEST MODE
// - to actually perform the payments, run EnableTestMode() with <bTestMode> set to False: PayPal.EnableTestMode(False)
// - don't forget to specify your user account (your email address): PayPal.PayPalUserAccount("email@domain.com")
EnableTestMode(True)

[/code]



Codigo 02
// Extracts the domain name
sServer is string
sServer = Lower(PageAddress("", paFULL))
sServer = ExtractString(sServer, 2, "http://")
sServer = ExtractString(sServer, 1, "/")
sServer = "http://" + sServer + "/"

IPAGE_PAYPAL_CUSTOM.SetObject(EDT_ProductName, EDT_Reference)
IPAGE_PAYPAL_CUSTOM.SetAmount(EDT_Price)
IPAGE_PAYPAL_CUSTOM.SetDeliveryAddress(CBOX_OPTIONS[2])
IPAGE_PAYPAL_CUSTOM.SetCurrency(GetCurrency(COMBO_CURRENCY))
IPAGE_PAYPAL_CUSTOM.SetAdministrationCosts(EDT_Management_costs)
IPAGE_PAYPAL_CUSTOM.SetShippingCosts(EDT_Shipping_costs)
IPAGE_PAYPAL_CUSTOM.SetQuantity(1, CBOX_OPTIONS[3])
IPAGE_PAYPAL_CUSTOM.SetComments(CBOX_OPTIONS[1])
IPAGE_PAYPAL_CUSTOM.SetLogo(sServer + FolderWeb() + "/img/01Dev-WB.gif")
IPAGE_PAYPAL_CUSTOM.SetImage(sServer + FolderWeb() + "/img/01Dev-WB.gif")

SWITCH RADIO_ASPECT
CASE 1 : IPAGE_PAYPAL_CUSTOM.SetPaymentButton(BT_IMG_BUYNOW_PAYPAL_105x31)
CASE 2 : IPAGE_PAYPAL_CUSTOM.SetPaymentButton(BT_IMG_CC_120x44)
CASE 3 : IPAGE_PAYPAL_CUSTOM.SetPaymentButton(BT_IMG_CLASSIC_125x21)
CASE 4 : IPAGE_PAYPAL_CUSTOM.SetPaymentButton(BT_IMG_CLICK_BUY_160x52)
CASE 5 : IPAGE_PAYPAL_CUSTOM.SetPaymentButton(BT_IMG_CLICK_PAY_174x52)
CASE 6 : IPAGE_PAYPAL_CUSTOM.SetPaymentButton(BT_IMG_PAYMENTS_PAYPAL_70x31)
CASE 7 : IPAGE_PAYPAL_CUSTOM.SetPaymentButton(BT_IMG_VALIDPAYM_PAYPAL_120x31)
CASE 8 : IPAGE_PAYPAL_CUSTOM.SetPaymentButton(BT_TXT_CLASSIC_136x23)
END


IPAGE_PAYPAL_CUSTOM..Visible = True



Codigo 03
//
PUBLIC

// Other currencies
CONSTANT
eUSD = -24 // Currency: US Dollars
eJPY = -25 // Currency: Yen
END



// Payment buttons
CONSTANT
BT_BUY_GRAPHIC_82x21 = "https://www.paypal.com/en_US/i/btn/btn_buynow_SM.gif"
BT_PAY_GRAPHIC_69x21 = "https://www.paypal.com/en_US/i/btn/btn_paynow_SM.gif"
BT_BUY_GRAPHIC_93x26 = "https://www.paypal.com/en_US/i/btn/btn_buynow_LG.gif"
BT_PAY_GRAPHIC_78x26 = "https://www.paypal.com/en_US/i/btn/btn_paynow_LG.gif"
BT_BUY_GRAPHIC_192x47 = "https://www.paypal.com/en_US/i/btn/btn_buynowCC_LG.gif"
BT_PAY_GRAPHIC_118x47 = "https://www.paypal.com/en_US/i/btn/btn_paynowCC_LG.gif"

BT_IMG_CC_120x44 = "https://www.paypal.com/en_US/i/btn/x-click-butcc.gif" // 120x44 image
BT_IMG_CLASSIC_125x21 = "https://www.paypal.com/en_US/i/btn/x-click-but23.gif" // 125x21 image
BT_TXT_CLASSIC_136x23 = "https://www.paypal.com/en_US/i/btn/x-click-but9.gif" // 136x23 image
BT_IMG_PAYMENTS_PAYPAL_70x31 = "https://www.paypal.com/en_US/i/btn/x-click-but02.gif" // 70x31 image
BT_IMG_VALIDPAYM_PAYPAL_120x31 = "https://www.paypal.com/en_US/i/btn/x-click-but03.gif" // 120x31 image
BT_IMG_BUYNOW_PAYPAL_105x31 = "https://www.paypal.com/en_US/i/btn/x-click-but01.gif" // 105x31 image
BT_IMG_CLICK_BUY_160x52 = "https://www.paypal.com/en_US/i/btn/x-click-but5.gif" // 160x52 image
BT_IMG_CLICK_PAY_174x52 = "https://www.paypal.com/en_US/i/btn/x-click-but6.gif" // 174x52 image
END

// Return modes of the payment pages
CONSTANT
RM_DEFAULT = 0 // Return modes by default
RM_GET = 1 // 'GET' return mode
RM_POST = 2 // 'POST' return mode
END

PRIVATE
gsPayPalAccount is string
gbTestMode is boolean = True



Codigo 04
// Summary: Enables the test mode (enabled by default)
// Syntax:
//EnableTestMode (<bTestMode>)
//
// Parameters:
// bTestMode: True to enable the test mode, False to disable it
// Return value:
// None
//
Procedure EnableTestMode(bTestMode)

gbTestMode = bTestMode



Codigo 05
// Summary: Defines the main PayPal account
// Syntax:
//PayPalUserAccount (<sAccount>)
//
// Parameters:
// sAccount: Email address of your PayPal account
// Return value:
// None
//
Procedure PayPalUserAccount(sAccount)

gsPayPalAccount = sAccount



Codigo 06
// Summary: Retrieves the selected currency
// Syntax:
//[ <Result> = ] GetCurrency (<nCurrency>)
//
// Parameters:
// nCurrency: <specify the role of COMBO_CURRENCY>
// Return value:
// Undefined type: Currency constant

Procedure GetCurrency(nCurrency)

SWITCH nCurrency
CASE 1 : RESULT eUSD
CASE 2 : RESULT eEUR
OTHER CASE : RESULT eEUR
END



Codigo 07
// Configure the 'Simple' PayPal button
IPAGE_PAYPAL_SIMPLE.SetObject("Sport Jacket (Single size XL)", "48-6-13706")
IPAGE_PAYPAL_SIMPLE.SetAmount(75.50)
IPAGE_PAYPAL_SIMPLE.SetPaymentButton(BT_BUY_GRAPHIC_93x26)



Codigo 08
// Configure the 'Return' PayPal button
IPAGE_PAYPAL_RETURN.SetObject("Sport Jacket XL+ (Single size XL)", "48-6-18706")
IPAGE_PAYPAL_RETURN.SetAmount(79.99)
IPAGE_PAYPAL_RETURN.SetPaymentButton(BT_BUY_GRAPHIC_93x26)
IPAGE_PAYPAL_RETURN.SetReturnPagePaymentOK("PAGE_Example_ReturnOK")
IPAGE_PAYPAL_RETURN.SetReturnPagePaymentCanceled("PAGE_Example_ReturnCancel")


Qualquer dúvida entre em contato pelo meu skype: adrianoboller

Mas os exemplos estão completos só seguir os modelos ali descritos na própria ferramenta.

O Webdev é muito mais simples e fácil de aprender, qualquer dúvida

entre em contato comigo para treinamentos e para aquisição das ferramentas da PC SOFT.

Forte abraço

:merci:

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Mensagem modificada, junho, 28 2016 - 12:41 AM
Publicado em junho, 29 2016 - 3:52 PM
Prezado Adriano

Antes de mais nada gostaria de parabenizá-lo pela iniciativa de criação/manutenção do fórum da PC Soft em português.


O idioma padrão dos programadores é o Inglês,mas infelizmente o fórum em Inglês da PC Soft, que seria uma boa fonte de solução de dúvidas, tem 1/3 do tamanho do fórum em Francês e portanto muitas das respostas ficam fora do alcance dos que como eu não tem conhecimento de Francês.

Grato também pela sua resposta a minha questão.

Quanto a questão da integração com Paypal, eu uso a versão 18 e já conhecia os exemplos.

No caso específico dos componentes para integração com meio de pagamentos eletrônicos, além do Paypal existe um outro componente de Secutirypayment.

No meu entender, os exemplos mostram as "coisas" funcionando, mas pecam por não explicarem como as "coisas" funcionam.
Decorre daí, que ao se precisar adaptar o exemplo à realidade específica do programador a coisa pega.

Gastei muito tempo, para concluir, que o componente SecurityPayment, era o mais fácil de ser utilizado para executar as tarefas completas de rotina para integração com meios eletrônicos de pagamento (usando o Paypal).

Esta integração são se restringe unicamente a deixar o cliente pagar uma compra, mas também todo o processo de permitir que o registro deste pagamento retorne a aplicação web, para que o controle deste pagamento seja imediatamente processado pela aplicação web.

Certas particularidades que dependem de ajustes que tem que ser obrigatoriamente feitas em função da moeda do país onde esta sendo criado a aplicação, simplesmente não foi abordada. (por exemplo como customizar a moeda a ser processada pelo Paypal).
O Webdev felizmente possui um método para que este tipo de customização seja feita, só que algo tão óbvio, não consta do exemplo da aplicação e precisei gastar tempo para descobrir como isto é feito.

Para aprender e entender como o componente externo de Security, eu acabei criando um exemplo prático e completo isolando o uso das classes e métodos que fazem parte de uma página que permite ao desenvolvedor, remeter o cliente ao paypal, para fazer o pagamento e a seguir, permitir que a sua aplicação receba e processe as informações de retorno do paypal, para que a aplicação possa controlar (baixar) a venda concretizada (paga).

Assim que tiver um tempo, espero poder disponibilizar o exemplo para que outros não precisem "apanhar" como apanhei, para fazer certas coisas óbvias.

Um abraço

E mais uma vez, parabéns pelo seu empenho na manutenção deste fórum em Português.
Membro registado
3.657 mensagems
Popularité : +175 (223 votes)
Publicado em junho, 29 2016 - 5:28 PM
Prezado Bastiaan

Eu vou pesquisar mais sobre o assunto, caso ainda tenha dificuldades eu vou verificar com a PC SOFT um novo exemplo mais claro.

Te mantenho informado, se possivel entre no meu grupo do skype clicando nesse link: https://join.skype.com/uaI7bisUXjz1

É um grupo com mais de 250 desenvolvedores para você trocar informações.

Meu skype: adrianoboller

Meu site: http://www.wxinformatica.com.br

Precisando entre em contato pelo 41 9949 1800

OK

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Publicado em dezembro, 22 2020 - 5:21 AM
Hi Adriano, one question, I tried the example WW_Paypal paying 1 Euro, It worked good, but, how to avoid close the IPAGE_PAYPAL_RETURN.SetReturnPagePaymentOK("PAGE_Example_ReturnOK")?, do I need to deploy the website on WAS in order to avoid this?. Because in the returning process the page is closed and shows error. Thank you.

Regards,
Jorge Soto