Paypal API - GetVerifiedStatus - 无效的请求

时间:2013-07-25 12:59:27

标签: php paypal

我正在尝试将Paypal API集成到我的PHP应用程序中。我使用cURL调用远程方法 GetVerifiedStatus ,但是我收到错误580023 - 无效请求。

我的要求:

 'requestEnvelope.errorLanguage=en_US&requestEnvelope.detailLevel=ReturnAll&emailAddress=email%40address.com&firstName=John&lastName=Doe&matchCriteria=NAME'

转换为JSON后的响应:

{
        "responseEnvelope.timestamp":"2013-07-25T05:36:26.695-07:00",
        "responseEnvelope.ack":"Failure",
        "responseEnvelope.correlationId":"e540c8c04a5b4",
        "responseEnvelope.build":"6679946",
        "error(0).errorId":"580023",
        "error(0).domain":"PLATFORM",
        "error(0).subdomain":"Application",
        "error(0).severity":"Error",
        "error(0).category":"Application",
        "error(0).message":"Cannot determine PayPal Account status"

}

cURL代码

function hash_call_account($methodName, $nvpStr)
    {
        //declaring of global variables

        $this->API_Endpoint_Adaptive_Account .= "/" . $methodName;

        //setting the curl parameters.
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$this->API_Endpoint_Adaptive_Account);
        curl_setopt($ch, CURLOPT_VERBOSE, 1);

        //turning off the server and peer verification(TrustManager Concept).
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_POST, 1);

        // Set the HTTP Headers
        curl_setopt($ch, CURLOPT_HTTPHEADER,  array(
            'X-PAYPAL-REQUEST-DATA-FORMAT: NV',
            'X-PAYPAL-RESPONSE-DATA-FORMAT: NV',
            'X-PAYPAL-SECURITY-USERID: ' . $this->API_UserName,
            'X-PAYPAL-SECURITY-PASSWORD: ' .$this->API_Password,
            'X-PAYPAL-SECURITY-SIGNATURE: ' . $this->API_Signature,
            'X-PAYPAL-APPLICATION-ID: ' . $this->API_AppID
        ));

        //if USE_PROXY constant set to TRUE in Constants.php, then only proxy will be enabled.
        //Set proxy name to PROXY_HOST and port number to PROXY_PORT in constants.php 
        if($this->USE_PROXY)
            curl_setopt ($ch, CURLOPT_PROXY, $this->PROXY_HOST. ":" . $this->PROXY_PORT); 

        // RequestEnvelope fields
        $detailLevel    = urlencode("ReturnAll");   // See DetailLevelCode in the WSDL for valid enumerations
        $errorLanguage  = urlencode("en_US");       // This should be the standard RFC 3066 language identification tag, e.g., en_US

        // NVPRequest for submitting to server
        $nvpreq = "requestEnvelope.errorLanguage=$errorLanguage&requestEnvelope.detailLevel=$detailLevel";
        $nvpreq .= "&$nvpStr";
        //echo $nvpreq; die;
        //setting the nvpreq as POST FIELD to curl
        curl_setopt($ch, CURLOPT_POSTFIELDS, $nvpreq);

        //getting response from server
        $response = curl_exec($ch);

        //converting NVPResponse to an Associative Array
        $nvpResArray=$this->deformatNVP($response);
        $nvpReqArray=$this->deformatNVP($nvpreq);
        $_SESSION['nvpReqArray']=$nvpReqArray;

        if (curl_errno($ch)) 
        {
            // moving to display page to display curl errors
              $_SESSION['curl_error_no']=curl_errno($ch) ;
              $_SESSION['curl_error_msg']=curl_error($ch);

              //Execute the Error handling module to display errors. 
        } 
        else 
        {
             //closing the curl
            curl_close($ch);
        }

        return $nvpResArray;
    }

配置:

Configure::write('ParallelPayPalAPI.URL', 'https://svcs.sandbox.paypal.com/AdaptivePayments');
Configure::write('ParallelPayPalAPI.AdaptiveAccountURL', 'https://svcs.sandbox.paypal.com/AdaptiveAccounts');
Configure::write('ParallelPayPalAPI.api_username', user);
Configure::write('ParallelPayPalAPI.api_password', password);
Configure::write('ParallelPayPalAPI.api_signature', signature);
Configure::write('ParallelPayPalAPI.business', business);
Configure::write('ParallelPayPalAPI.PaymentDetailUrl', 'https://svcs.sandbox.paypal.com/AdaptivePayments/PaymentDetails');
Configure::write('ParallelPayPalAPI.AppID', AppId);

API版本可能有问题吗? NVP请求有问题吗?

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,并联系了paypal技术支持,解决方案只是错误580023是名称无法匹配paypal帐户的电子邮件时的正常行为。这是令人困惑的,因为对于请求没有任何错误,与响应消息所暗示的相反。因此,对于您的示例,如果您遇到相同的问题,那么您只需将John Doe更改为与您尝试匹配的PayPal电子邮件关联的用户的名字和姓氏。

来自我的convo与paypal MTS的成绩单:

“您收到的错误是预期的。要获得经过验证或未经验证的回复,您提供的名称必须与您提供的电子邮件地址一致。”

答案 1 :(得分:0)

试试这个

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); instead of curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

答案 2 :(得分:-1)

Paypal Docs

580023  Invalid Request.

错误代码表示这是一个无效的请求,因此您发送的是问题,是否可以提供实际请求?