heldrida Posted April 14, 2009 at 02:32 AM Report #256610 Posted April 14, 2009 at 02:32 AM Olá, sou novo pelo portugal-a-programar, e gostaria, se for possivel a alguém, com mais experiencia, ajudar-me na verificação do código que desenvolvi para efectuar uploads para a plataforma do sapo. O erro que tenho estado a obter é de Token inválido; O código está documentado em ingles, pq à partida achei que seria mais facil conseguir ajuda assim, em outros foruns, sobretudo onde se tecla em ingles; Mas descobri este, e ainda bem, decidi juntar-me p\ aprender; A documentação do sapo indica: "Adicionar um novo vídeo na plataforma e fazer o upload deste por POST posteriormente. De modo a fazer o POST do ficheiro é necessário obter um token ao BUS com o randname do vídeo como parâmetro ExtraInfo. Este post deverá conter os seguintes campos: - token: token obtido a partir do BUS; - content_file: ficheiro a carregar; - redir: redireccionamento para o qual a janela de formulário deve ir após o POST (opcional, no caso de não ser passado este parâmetro é devolvido o resultado em XML; caso contrario é passado o resultado no parâmetro error do redireccionamento)." Assim, fiz os possiveis para segui-lo atraves do seguinte código (se considerarem mais visivel, aqui fica também, http://pastebin.ca/1391282); A dúvida é, o TOKEN é obtido c\ sucesso, passado para o formulário, no entanto, dá erro; Como resolver? Criei um utilizador "testewebsapo@sapo.pt" de password "teste1", para possibilitar qqr teste. Também, podem ter acesso a este, imediatamente, através de http://174.132.157.5/~fazuma/temp/sapo_teste/teste_upload.php Agradeço qualquer sugestão. Obrigado! ------------------------------------------------------------------- <?php /* ***RESOURCES*** DOCUMENTATION: Sapo webservices: http://developers.sapo.pt/projects/developers/wiki/Services/Videos_EN Sapo AddvideoPost Method: http://developers.sapo.pt/projects/developers/wiki/Services/Videos/Operations/AddVideoPost_EN EXAMPLES: http://code.google.com/apis/youtube/2.0/developers_guide_protocol_browser_based_uploading.html http://code.google.com/apis/youtube/2.0/developers_guide_protocol_direct_uploading.html ***TOOLS*** WEBSERVICES ONLINE TESTER: http://www.soapclient.com/soapclient?template=%2Fclientform.html&fn=soapform&SoapTemplate=%2FSoapResult.html&SoapWSDL=http%3A%2F%2Fservices.sapo.pt%2FMetadata%2FContract%2FVideos&_ArraySize=2 */ //CREDENTIALS FUNCTION TO BE CALLED IN SOAP HEADER function makeHeaderSoapEncoder(){ $ESBC = new ESBCredentialsEncoder_t; $ESBC->ESBUsername = new SoapVar('testewebsapo@sapo.pt', XSD_STRING, NULL, NULL, null, 'http://services.sapo.pt/definitions'); $ESBC->ESBPassword = new SoapVar('teste1', XSD_STRING, NULL, NULL, null, 'http://services.sapo.pt/definitions'); return new SoapHeader('http://services.sapo.pt/definitions', 'ESBCredentials', $ESBC); } class ESBCredentialsEncoder_t { /* Type: string MinOcurs: 1 MaxOcurs: 1 */ public $ESBUsername; /* Type: string MinOcurs: 1 MaxOcurs: 1 */ public $ESBPassword; } //FUNCTION TO GET A TOKEN FROM BUS TROUGH HTTP POST, WITH INPUT VALUE RANDNAME function get_token() { $url = "https://services.sapo.pt/STS/GetToken?ESBUsername=testewebsapo@sapo.pt&ESBPassword=teste1&ESBTokenExtraInfo=".$Randname; $xml = simplexml_load_file($url); echo $xml[0]; } //SOAP CLIENT, HEADER INITIALIZATION $client = new SoapClient('http://services.sapo.pt/Metadata/Contract/Videos'); $client->__setSoapHeaders(array(makeHeaderSoapEncoder())); //PARAMETERS ARRAY FOR USE IN METHOD ADDVIDEOPOST $params = array('Video' => array('Subtitle' => 'testeteste', 'Synopse' => 'testetesteteste', 'Title' => 'testetestetesteteste', 'Active' => 1, 'Tags' => 'teste,tesdste1teste,teste,teste'), 'Email' => 'testewebsapo@sapo.pt'); //CREATION OF OBJECT OF TYPE ADDVIDEOPOST $response = $client->__soapCall('AddVideoPost', array('parameters' => $params)); //INITIALIZE A VARIABLE WITH STRING VALUE RANDNAME $Randname = $response->AddVideoPostResult->Randname; ?> <!-- VIDEO UPLOAD FORM: --> <form action="http://upload01.videos.sapo.pt/upload_token.html" method="post" enctype="multipart/form-data"> <input type="file" name="content_file"> <input type="hidden" name="redir" value="http://videos.sapo.pt/testewebsapo"> <input type="hidden" name="token" value="<?php get_token() ?>"> <input type="submit"> </form>
heldrida Posted April 14, 2009 at 02:40 AM Author Report #256611 Posted April 14, 2009 at 02:40 AM Talvez seja importante mencionar que, ele cria o objecto video na plataforma, porque acessando ao painel de controlo do sapo, e mesmo, apesar do erro que ocorre, surge um thumbnaill com a indicação de um video em processamento. Obrigado pela atenção!
djthyrax Posted April 14, 2009 at 11:13 PM Report #256812 Posted April 14, 2009 at 11:13 PM $url = "https://services.sapo.pt/STS/GetToken?ESBUsername=testewebsapo@sapo.pt&ESBPassword=teste1&ESBTokenExtraInfo=".$Randname; Onde tens o $Randname definido? Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!
heldrida Posted April 14, 2009 at 11:17 PM Author Report #256815 Posted April 14, 2009 at 11:17 PM Olá, obrigado pela tua atenção! Respondendo a tua questão: $Randname = $response->AddVideoPostResult->Randname; Retorna uma String
djthyrax Posted April 14, 2009 at 11:18 PM Report #256816 Posted April 14, 2009 at 11:18 PM Mas precisas de usar o global para poderes aceder a ela. Vê se fazendo isso já resolve. 🙂 Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!
heldrida Posted April 14, 2009 at 11:23 PM Author Report #256817 Posted April 14, 2009 at 11:23 PM Vou tentar, já digo alguma coisa. A utilização da Global, não seria só no caso dessa variavel estar dentro de uma função ou coisa do género ?
heldrida Posted April 14, 2009 at 11:33 PM Author Report #256819 Posted April 14, 2009 at 11:33 PM Eish... que cena! Resolveste-me a situação 🙂 Fogo, fiquei às voltas disto, desde Sexta ou Quinta, que cena :X Obrigado irmão! Já agora fica aqui a solução: //FUNCTION TO GET A TOKEN FROM BUS TROUGH HTTP POST, WITH INPUT VALUE RANDNAME function get_token($Randname) { $url = "https://services.sapo.pt/STS/GetToken?ESBUsername=testewebsapo@sapo.pt&ESBPassword=teste1&ESBTokenExtraInfo=".$Randname; $xml = simplexml_load_file($url); echo $xml[0]; } e portanto, no formulário: <input type="hidden" name="token" value="<?php get_token($Randname) ?>"> A solução passou por resolver a questão do $Randname; Logo, foi passada na função como parametro a receber, e assim, quando necessária a função get_token, envias a variavel $Randname yeh ;D
djthyrax Posted April 15, 2009 at 12:09 AM Report #256822 Posted April 15, 2009 at 12:09 AM Eheh, ainda bem que resolveu. 🙂 A utilização da Global, não seria só no caso dessa variavel estar dentro de uma função ou coisa do género ? O global usas para aceder a variáveis fora do scope actual. Neste caso, o scope da função get_token() não tens acesso à variável porque ela estava no scope principal por assim dizer. Ao fazeres global $Randname; dentro da função, passavas a ter também nesse scope a variável $Randname declarada no outro scope. 🙂 Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now