Ontem finalizamos o envio de dados para o PagSeguro do UOL e hoje (que rufem os tambores), vamos falar do Retorno Automático do PagSeguro.
Para isso, precisamos primeiro saber como ele funciona e definir nossa URL DE RETORNO e o TOKEN. Esse procedimento, tenta evitar dores de cabeça de pessoas comprando sem estar na sua loja. Como vimos ontem, o pagseguro, só pede um form com submit sem nenhum tipo de validação.
A validação acontece, quando o PagSeguro gera a "pergunta", que no caso chamamos de Retorno Automático. Uma observação, nesse caso seus testes devem ser online, pois vamos usar a session da sua aplicação para verificar e validar dos dados a serem confirmados com a URL de Retorno.
Para este processo vamos criar um novo componente e vamos chama-lo de PagSeguroRetorno.cfc. Este compoennte será usado na nossa página de retorno, e irá disparar ações de confirmação dos dados da compra.
PagSeguroRetorno.cfc
1: <cfset Variable.COMMAND = "validar">
2: <cfset Variables.VALIDATOR_URL = "https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml">
3: <cfset Variables.TOKEN = "SEU_TOKEN" />
4: <cfset Variables.dsEmail = "EMAIL_CADASTRADO_PAGSEGURO" />
5: <cfset Variables.result = structNew()>
setReturn
1: <cffunction name="setReturn" access="public" returntype="void" output="false">
2: <cfargument name="data" type="struct" required="true">
3: <cfset var arrForm = listToArray(arguments.data.FieldNames)>
4: <cfloop array="#arrForm#" index="currentItem">
5: <cfset Variables.result["#currentItem#"] = arguments.data[currentItem]>
6: </cfloop>
7: </cffunction>
confirm
1: <cffunction name="confirm" access="public" returntype="void" output="false">
2: <cfhttp url="#VALIDATOR_URL#" method="get" resolveurl="false" charset="iso-8859-1">
3: <cfhttpparam name="Comando" type="url" value="#Variables.COMMAND#">
4: <cfhttpparam name="Token" type="url" value="#Variables.TOKEN#">
5:
6: <cfloop collection="variables.result" item="currentItem">
7: <cfhttpparam name="#currentItem#" type="url" value="#variables.result[currentItem]#">
8: </cfloop>
9: </cfhttp>
10: <cfswitch expression="#trim(cfhttp.FileContent)#">
11: <cfcase value="VERIFICADO">
12: <!--- Verifique se a TransacaoID não foi previamente processada --->
13: <!--- Verifique se o email recebido (VendedorEmail) é o seu email --->
14: <!--- Verifique se o valor do pagamento está correto --->
15: <!--- Processe o pagamento salvando os dados em seu banco de dados --->
16: <cfset FileWrite("#getDirectoryFromPath(expandPath('*.*'))#FORM_TRUE#DateFormat(Now(), 'yyyy-mm-dd-hh-mm-ss')#.htm", value)>
17: </cfcase>
18: <cfcase value="FALSO">
19: <!--- A Requisição não foi confirmada pelo PagSeguro e pode ser uma compra falsa --->
20: <cfset FileWrite("#getDirectoryFromPath(expandPath('*.*'))#FORM_FALSE#DateFormat(Now(), 'yyyy-mm-dd-hh-mm-ss')#.htm", value)>
21: </cfcase>
22: </cfswitch>
23: </cffunction>
Lembrando que aqui estamos tratando de um exemplo, no mundo real, antes de informar a validação, verificamos o id da nossa transação no e-commerce e se o carrinho é igual ao que temos no site, para só então verificarmos se os dados conferem com a informação do PagSeguro, guardando as informações adicionais.
retornoPagSeguro.cfm
1: <cfif structKeyExists(Form, "FieldNames")>
2: <cfset objPagSeguroReturn = createObject("component", "PagSeguroRetorno")>
3: <cfset objPagSeguroReturn.setReturn(form)>
4: <cfset objPagSeguroReturn.confirm()>
5: </cfif>
Bom é isso, espero ter ajudado alguém com este tutorial e agora só volto na próxima quarta-feira, falando da integração com Pagamento Digital do Buscapé.
E finalmente, para quem cansou de ler, esta tudo pronto para download no link http://www.flagnet.inf.br/downloads/shoppingCart-part2.1.rar
a salvação da humadidade xD
ResponderExcluirMestre você é o cara, ótimo série, muito útil e ensinou muita coisa legal.
ResponderExcluirAbraço.
Bem didatico o tutorial Rafael, parabens!
ResponderExcluirO sistema do pag-seguro tem a mesma estrutura do PayPal, claro, um pouco adaptada ao mercado brasileiro e com alguns termos "aportuguesados" ...
Grande abraço,
Tudo ótimo, mais a pergunta não quer calar. Como colocar tudo isso no blogspot.com ??
ResponderExcluirParabéns !!
katya
Katya, a única forma de usar o PagSeguro no blogspot é pelo método de HTML e ai todo o processo fica manual. No site do pag seguro tem um tutorial de como montar o HTML para a integração funcionar
ExcluirBoa tarde Rafael..to precisando de sua ajuda...estou com dificuldade no arquivo de retorno do PagSeguro. Eu passo via Post as informações e consigo efetuar o pagamento. Na tabela tenho um campo tipo bit "Pago" que preciso atualizar para sim. A consulta na query é condicionada pelo valor do "form.reference". O PagSeguro diz que me retorna essas informações em XML, mas não sei como capturar os dados do XML.
ResponderExcluir