2014-06-11 7 views
5

काम नहीं कर सकता है मैं कुछ नोड जेएस को PHP में दोहराने की कोशिश कर रहा हूं लेकिन यह काम नहीं कर रहा है! नोड नीचे है;नोड जेएस से PHP, यह

function initLogin(callback) { 
    debug('Getting login'); 
    request.get({ 
      url: psnURL.SignIN 
      , headers : { 
       'User-Agent': 'Mozilla/5.0 (Linux; U; Android 4.3; '+options.npLanguage+'; C6502 Build/10.4.1.B.0.101) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 PlayStation App/1.60.5/'+options.npLanguage+'/'+options.npLanguage 
      } 
     } 
     , function (error, response, body) { 
      (typeof callback === "function" ? getLogin(callback, psnVars.SENBaseURL + response.req.path) : getLogin(undefined, psnVars.SENBaseURL + response.req.path)); 
    }) 
} 
/* 
* @desc  Login into PSN/SEN and creates a session with an auth code 
* @param Function callback - Calls this function once the login is complete 
*/ 
function getLogin(callback, url) { 
    request.post(psnURL.SignINPOST 
     ,{ 
      headers: { 
       'Origin':'https://auth.api.sonyentertainmentnetwork.com' 
       ,'Referer': url 
      } 
      ,form:{ 
       'params'  : 'service_entity=psn' 
       ,'j_username' : options.email 
       ,'j_password' : options.password 
      } 
     }, function (error, response, body) { 
      request.get(response.headers.location, function (error, response, body) { 
       if (!error) { 
        var urlString = unescape(response.req.path); 
        psnVars.authCode = urlString.substr(urlString.indexOf("authCode=") + 9, 6); 
        debug('authCode obtained: ' + psnVars.authCode); 
        getAccessToken(psnVars.authCode, callback); 
       } 
       else { 
        debug('ERROR: ' + error) 
       } 
      }) 
     } 
    ) 
} 

और मेरा PHP जो मैं काम नहीं कर सकता;

$c = curl_init(); 
curl_setopt_array($c, array(

    CURLOPT_URL => $PSNSignIn, 
    CURLOPT_USERAGENT => $userAgent, 
    CURLOPT_HEADER => true, 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_FOLLOWLOCATION => true, 
    CURLOPT_SSL_VERIFYPEER => false, 
    CURLOPT_SSL_VERIFYHOST => 2, 
    CURLOPT_COOKIEJAR => realpath('/tmp/cookieJar.txt'), 
    CURLOPT_FAILONERROR => 1, 

)); 
$res = curl_exec($c); 

$path = explode($SENBaseURL, curl_getinfo($c, CURLINFO_EFFECTIVE_URL)); 
$referer = $SENBaseURL . $path[1]; 

var_dump(file_get_contents('tmp/cookieJar.txt'), $res); 

$c = curl_init(); 
curl_setopt_array($c, array(

    CURLOPT_URL => $SignINPOST, 
    CURLOPT_USERAGENT => $userAgent, 
    CURLOPT_REFERER => $referer, 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_FOLLOWLOCATION => true, 
    CURLOPT_SSL_VERIFYPEER => false, 
    CURLOPT_SSL_VERIFYHOST => 2, 
    CURLOPT_HEADER => array(
     'Origin: https://auth.api.sonyentertainmentnetwork.com', 
     'Content-Type: application/x-www-form-urlencoded', 
    ), 
    CURLOPT_POST => true, 
    CURLOPT_POSTFIELDS => array(

     'params' => 'service_entity=psn', 
     'j_username' => $username, 
     'j_password' => $password, 
    ), 
    CURLOPT_COOKIEFILE => 'tmp/cookieJar', 
    CURLOPT_FAILONERROR => 1, 
)); 

$res = curl_exec($c); 

var_dump($res, curl_getinfo($c)); 

यह सोनी के सर्वर में प्रवेश और एक OAuth कोड को पुनः प्राप्त करने की अपेक्षा की जाती है, Node.js इसलिए यह संभव है काम कर रहा है, लेकिन मैं PHP में काम कर इसे प्राप्त नहीं कर पा रहे।

किसी भी मदद की बहुत सराहना की जाएगी।

कर्ल काम कर रहा है लेकिन मुझे ?authentication_error=true मिलता है जब इसे एक कोड वापस करना चाहिए जिसका मैं उपयोग कर सकता हूं।

+0

अपनी सामग्री प्रकार सही है? 'सामग्री-प्रकार: एप्लिकेशन/एक्स-www-form-urlencoded' – Dan

+0

सुनिश्चित करें कि आपने नोटिस/चेतावनियां चालू की हैं, इसलिए आपके वर्र्स हम नहीं देख सकते हैं (उदाहरण के लिए '$ userAgent') अगर वे गलती से नहीं हैं तो अलार्म बढ़ाएं दायरे में। – halfer

+0

हां वे सभी दायरे में हैं, एक साइड नोट के रूप में पूर्ण node.js api यहां पाया जा सकता है https://github.com/jhewt/gumer-psn और यहां तक ​​कि इसका एक PHP कार्यान्वयन यहां पाया जा सकता है, https://github.com/ilendemli/gumer-psn-php – user2251919

उत्तर

2

आप Authentication Error हो रही है क्योंकि, लाइन में

CURLOPT_COOKIEFILE => 'tmp/cookieJar` 

आप CURL के लिए cookieJar के लिए गलत मान का उपयोग कर रहे हैं। आपको .txt जोड़ने और एक पूर्ण पथ के पथ को सही करने की आवश्यकता है जैसे आपने पहले अपने कोड में उपयोग किया था। यही कारण है कि CURL आपको Authentication Error

फेंक रहा है कि निम्नलिखित समस्याओं के साथ आपकी समस्याओं को हल करना चाहिए।

CURLOPT_COOKIEFILE => '/tmp/cookieJar.txt` 


इसके अलावा परिवर्तन निम्न पंक्ति

var_dump(file_get_contents('tmp/cookieJar.txt'), $res); 

इस तरह :

var_dump(file_get_contents('/tmp/cookieJar.txt'), $res); 
1

टिप्पणी आप दो अवसरों में संबंधित पथ का उपयोग किया गया है और पिछले उपयोग में उल्लेख किया है तो आप छोड़े गए .txt:

$c = curl_init(); 
curl_setopt_array($c, array(

    CURLOPT_URL => $PSNSignIn, 
    CURLOPT_USERAGENT => $userAgent, 
    CURLOPT_HEADER => true, 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_FOLLOWLOCATION => true, 
    CURLOPT_SSL_VERIFYPEER => false, 
    CURLOPT_SSL_VERIFYHOST => 2, 
    CURLOPT_COOKIEJAR => realpath('/tmp/cookieJar.txt'), 
    CURLOPT_FAILONERROR => 1, 

)); 
$res = curl_exec($c); 

$path = explode($SENBaseURL, curl_getinfo($c, CURLINFO_EFFECTIVE_URL)); 
$referer = $SENBaseURL . $path[1]; 

var_dump(file_get_contents('/tmp/cookieJar.txt'), $res); 

$c = curl_init(); 
curl_setopt_array($c, array(

    CURLOPT_URL => $SignINPOST, 
    CURLOPT_USERAGENT => $userAgent, 
    CURLOPT_REFERER => $referer, 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_FOLLOWLOCATION => true, 
    CURLOPT_SSL_VERIFYPEER => false, 
    CURLOPT_SSL_VERIFYHOST => 2, 
    CURLOPT_HEADER => array(
     'Origin: https://auth.api.sonyentertainmentnetwork.com', 
     'Content-Type: application/x-www-form-urlencoded', 
    ), 
    CURLOPT_POST => true, 
    CURLOPT_POSTFIELDS => array(

     'params' => 'service_entity=psn', 
     'j_username' => $username, 
     'j_password' => $password, 
    ), 
    CURLOPT_COOKIEFILE => '/tmp/cookieJar.txt', 
    CURLOPT_FAILONERROR => 1, 
)); 

$res = curl_exec($c); 

var_dump($res, curl_getinfo($c));