Php 如何在';请求权限';活动
正如标题所示,我正试图给Paypal打一个CURL电话,但我遇到了一个错误,我相信这与我通过CURL发送标题的方式有关 在下面的代码示例中,我向两个数组声明Paypal处理请求所需的值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',
$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时就是这么做的。他们只是有一大堆不同的方法来整合他们的东西,所以如果你对他们的平台不熟悉的话,这可能会有点让人不知所措!我注意到了。希望这能引起你的注意:如果你能给我指出正确的方向,我将不胜感激。