【问题标题】:Unable to receive cURL data through PHP无法通过 PHP 接收 cURL 数据
【发布时间】:2015-10-24 05:30:02
【问题描述】:

好的,我正在尝试将 Paypal 与我的网站集成。它要求我向安静的 Web 服务发出 cURL 请求。我已经设法让 php 看起来不错。我知道这是基本的,但它应该可以工作。

if(etc...){
    $params = ['USER'=>'me', 
        'PWD'=>'mypassword', 
        'SIGNATURE'=>'SIG', 
        'METHOD'=>'SetExpressCheckout', 
        'VERSION'=>'93', 
        'PAYMENTREQUEST_0_PAYMENTACTION'=>'SALE', 
        'PAYMENTREQUEST_0_AMT'=>10, 
        'PAYMENTREQUEST_0_CURRENCYCODE'=>'GBP', 
        'RETURNURL'=>'http://returnPage.html', 
        'CANCELURL'=>'http://returnPage.html'];

   $defaults = array(CURLOPT_URL => 'http://api.sandbox.paypal.com', 
        CURLOPT_POST => true, 
        CURLOPT_POSTFIELDS => http_build_query($params), 
        CURLOPT_RETURNTRANSFER, 1,);

    $ch = curl_init();

    curl_setopt_array($ch, $defaults);

    $output = curl_exec($ch);

    curl_close($ch);

    $token = $output;
}

echo $token

问题是由于某种原因返回的输出是错误的,并且我浏览器上的网络选项卡显示对 php 文件的请求需要很长时间。实际上在测试所有其他代码时都可以工作,但是 php 文件不返回任何数据。如果我离开它一段时间,它有时会返回 false 而不是 cURL 数据。

任何关于我哪里出错的想法都将不胜感激。

编辑:

通过从命令提示符卷曲测试我的凭据时,一切正常。我的 PHP 中没有错误是否有办法诊断 cURL 命令不起作用的原因。

编辑 2:

得到响应所需的命令是

curl -s --insecure  https://api-3t.sandbox.paypal.com/nvp  -d  "USER=users&PWD=pass=Abg0gYcQyxQvnf2HDJkKtA-p6pqhA1k-KTYE0Gcy1diujFio4io5Vqjf&METHOD=SetExpressCheckout&VERSION=78&PAYMENTREQUEST_0_PAYMENTACTION=SALE&PAYMENTREQUEST_0_AMT=19&PAYMENTREQUEST_0_CURRENCYCODE=USD&cancelUrl=http://www.example.com/cancel.html&returnUrl=http://www.example.com/success.html"

我不知道 --insecure 位是什么,我认为这与安全性有关,但我不知道如何在 php 中将其设置为选项。

【问题讨论】:

  • 在您的参考api.sandbox.paypal.com上方的代码中-应该是https!
  • 您认为在拥有数百万用户的网站上发布您的通行证是否明智?在 curl_exec $info = curl_getinfo($ch); print_r($info); 之后添加这些行以结果编辑您的问题
  • 在 php 中,--insecure 的等价物是 CURLOPT_SSL_VERIFYHOST => 0;

标签: php curl paypal


【解决方案1】:

问题出在这一行:

CURLOPT_RETURNTRANSFER, 1,);

这条线应该是

CURLOPT_RETURNTRANSFER=> 1);

在 1 之后添加=> 并删除,

将 url 协议更改为 https 并添加选项 CURLOPT_SSL_VERIFYPEER=>1

【讨论】:

  • 我已经改变了它,但不是那样的。我一定在这件事上犯了一个错误。我尝试了几种变体,但总是一样。
  • @TomAlbanese 您提供的贝宝应用程序链接是否正确?我想这是沙盒应用链接sandbox.paypal.com/cgi-bin/webscr
  • 当我从命令提示符运行并直接从贝宝网站获取它时,它可以工作,在我的应用程序凭据下。
  • @TomAlbanese 协议是什么? https还是http?
  • 这个我不知道,例子是https。那么我是否需要设置一些其他的 php 选项
【解决方案2】:

在 curl 使用中捕获错误

if($output === false)
{
    echo 'Curl error: ' . curl_error($ch);
}
else
{
    echo 'Operation completed without any errors';
}

更新

对于不安全的httpscurl 中添加以下选项

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)

【讨论】:

  • 它没有收到任何错误,只是由于某种原因没有得到回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多