Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在';请求权限';活动_Php_Curl_Paypal_Http Headers - Fatal编程技术网

Php 如何在';请求权限';活动

Php 如何在';请求权限';活动,php,curl,paypal,http-headers,Php,Curl,Paypal,Http Headers,正如标题所示,我正试图给Paypal打一个CURL电话,但我遇到了一个错误,我相信这与我通过CURL发送标题的方式有关 在下面的代码示例中,我向两个数组声明Paypal处理请求所需的值$headers将在CURL请求中用作CURLOPT\u HTTPHEADER,而$URLvariable将与$url连接,并用作CURLOPT\u url 代码示例: $headers = array( 'X-PAYPAL-SECURITY-USERID : MYSSANDBOXUSERID',

正如标题所示,我正试图给Paypal打一个CURL电话,但我遇到了一个错误,我相信这与我通过CURL发送标题的方式有关

在下面的代码示例中,我向两个数组声明Paypal处理请求所需的值
$headers
将在CURL请求中用作
CURLOPT\u HTTPHEADER
,而
$URLvariable
将与
$url
连接,并用作
CURLOPT\u url

代码示例:

$headers = array(
    'X-PAYPAL-SECURITY-USERID : MYSSANDBOXUSERID',
    'X-PAYPAL-SECURITY-PASSWORD : MYSSANDBOXPASSWORD',
    'X-PAYPAL-SECURITY-SIGNATURE : MYSSANDBOXUSERSIGNATURE',
    'X-PAYPAL-REQUEST-DATA-FORMAT : JSON',
    'X-PAYPAL-RESPONSE-DATA-FORMAT : JSON',
    'X-PAYPAL-APPLICATION-ID : APP-80W284485P519543T'
);

$URLvariable = array (
        'scope' => 'EXPRESS_CHECKOUT',
        'callback' => 'http://vendorpages.info/success.html', 
        'requestEnvelope' =>  '{"errorLanguage":"en_US"}',
);

foreach ( $URLvariable as $key => $value ) {
    $URLvariable .= '&' . $key . '=' . urlencode ( $value );
}

$url = "https://svcs.sandbox.paypal.com/Permissions/RequestPermissions?" . ltrim ( $URLvariable, '&' );

$curl = curl_init ();
curl_setopt ( $curl, CURLOPT_URL, $url );
curl_setopt( $curl , CURLOPT_HEADER, true);
curl_setopt( $curl , CURLOPT_HTTPHEADER, $headers);
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, false );
$result = curl_exec ( $curl );
curl_close ( $curl );
$result = urldecode ( $result );
$result = explode ( '=',$result );

print_r ($result);
*请注意,我故意替换了我的Paypal沙盒凭据

其输出为:

Array ( [0] => HTTP/1.1 400 Bad Request Server: AkamaiGHost Mime-Version: 1.0 Content-Type: text/html Content-Length: 177 Expires: Sat, 08 Feb 2014 09:47:53 GMT Date: Sat, 08 Feb 2014 09:47:53 GMT Connection: close An error occurred while processing your request.

Reference #166.c60300cc.1391852873.2b18ca34 ) 

非常感谢任何有建设性的帮助…

我注意到的一件事是,您在头中设置了JSON,但您没有传递JSON数据。您只是在使用URL参数,比如NVP请求。您需要将实际的JSON(或XML)请求传递到CURL中的CURLOPT_POSTFIELDS选项中

您所做的是导致您的端点URL不正确,这就是您得到错误的原因。在CURL中传递的$url应该是:

然后,实际的请求主体将再次出现在POSTFIELDS选项中。我一直使用XML,所以我的头是这样的

Array
(
    [0] => X-PAYPAL-SECURITY-USERID: ****
    [1] => X-PAYPAL-SECURITY-PASSWORD: ****
    [2] => X-PAYPAL-SECURITY-SIGNATURE: ****
    [3] => X-PAYPAL-SECURITY-SUBJECT: 
    [4] => X-PAYPAL-SECURITY-VERSION: 109.0
    [5] => X-PAYPAL-REQUEST-DATA-FORMAT: XML
    [6] => X-PAYPAL-RESPONSE-DATA-FORMAT: XML
    [7] => X-PAYPAL-APPLICATION-ID: APP-80W284485P519543T
    [8] => X-PAYPAL-DEVICE-ID: 
    [9] => X-PAYPAL-DEVICE-IPADDRESS: 192.168.1.115
    [10] => X-PAYPAL-SANDBOX-EMAIL-ADDRESS: developer@email.com
)
我用来处理curl请求的函数是:

function CURLRequest($Request = "", $APIName = "", $APIOperation = "")
    {
        $curl = curl_init();
                curl_setopt($curl, CURLOPT_VERBOSE, 1);
                curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
                curl_setopt($curl, CURLOPT_TIMEOUT, 30);
                curl_setopt($curl, CURLOPT_URL, $this -> EndPointURL . $APIName . '/' . $APIOperation);
                curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
                curl_setopt($curl, CURLOPT_POSTFIELDS, $Request);
                curl_setopt($curl, CURLOPT_HTTPHEADER, $this -> BuildHeaders(false));

        if($this -> APIMode == 'Certificate')
        {
            curl_setopt($curl, CURLOPT_SSLCERT, $this -> PathToCertKeyPEM);
        }

        $Response = curl_exec($curl);       
        curl_close($curl);
        return $Response;
    }
在该示例中,$请求作为

<?xml version="1.0" encoding="utf-8"?>
<RequestPermissionsRequest xmlns="http://svcs.paypal.com/types/ap">
  <requestEnvelope xmlns="">
    <detailLevel>ReturnAll</detailLevel>
    <errorLanguage>en_US</errorLanguage>
  </requestEnvelope>
  <scope xmlns="">EXPRESS_CHECKOUT</scope>
  <callback xmlns="">http://paypal.angelleye.com/paypal/class/1.4/samples/RequestPermissions-Callback.php</callback>
</RequestPermissionsRequest>

返回所有
恩努斯
快速结账
http://paypal.angelleye.com/paypal/class/1.4/samples/RequestPermissions-Callback.php

谢谢。我最后也使用了XML。我看你对Paypal很熟悉。。。嗯,我可以建议你,如果你曾经在他们的权力位置,请建议对开发人员部分/帮助内容/指南进行全面检查。。。我发现它到处都是……呵呵,几个月前他们推出新的developer.paypal.com时就是这么做的。他们只是有一大堆不同的方法来整合他们的东西,所以如果你对他们的平台不熟悉的话,这可能会有点让人不知所措!我注意到了。希望这能引起你的注意:如果你能给我指出正确的方向,我将不胜感激。