【问题标题】:Paypal API with PHP and cURL带有 PHP 和 cURL 的 Paypal API
【发布时间】:2013-03-21 16:26:00
【问题描述】:

我正在尝试 Paypal API 文档中概述的“第一次通话”。这是我正在关注的示例:

curl https://api.sandbox.paypal.com/v1/oauth2/token \
 -H "Accept: application/json" \
 -H "Accept-Language: en_US" \
 -u "EOJ2S-Z6OoN_le_KS1d75wsZ6y0SFdVsY9183IvxFyZp:EClusMEUk8e9ihI7ZdVLF5cZ6y0SFdVsY9183IvxFyZp" \
 -d "grant_type=client_credentials"

我在 PHP 中构建了一个 curl 实例,其中包含除最后一个之外的所有上述标头。 -d 标志转换为 PHP 中的 curl 选项是什么?据我所知,那里几乎没有解释。我设法将-u 推断为CURLOPT_USERPWD

【问题讨论】:

    标签: php curl paypal


    【解决方案1】:

    在进行了一次很好的拖网之后,我将开发人员的一些有其他问题的部分拼凑起来。我使用以下代码成功获得了访问令牌:

    <?php
    
    $ch = curl_init();
    $clientId = "myId";
    $secret = "mySecret";
    
    curl_setopt($ch, CURLOPT_URL, "https://api.sandbox.paypal.com/v1/oauth2/token");
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_USERPWD, $clientId.":".$secret);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials");
    
    $result = curl_exec($ch);
    
    if(empty($result))die("Error: No response.");
    else
    {
        $json = json_decode($result);
        print_r($json->access_token);
    }
    
    curl_close($ch);
    
    ?>
    

    【讨论】:

    • 遗憾的是,Paypal 似乎已经从 Github 中删除了他们的 REST API curl 示例。
    • 这完美救了我的命。
    • tnkx 哥们,你也救了我的时间和生命
    • 友善且乐于助人
    【解决方案2】:

    @Lee 指出了正确的方法,但如果你使用的是旧的 php 版本,它将无法工作。但李版不会显示错误。改用这些,我只添加错误部分以查看发生了什么。

    $ch = curl_init();
    $clientId = "";
    $secret = "";
    
    curl_setopt($ch, CURLOPT_URL, "https://api.sandbox.paypal.com/v1/oauth2/token");
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_USERPWD, $clientId.":".$secret);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials");
    
    $result = curl_exec($ch);
    $err = curl_error($ch);
    
    $access_token="";
    if ($err) {
      echo "cURL Error #:" . $err;
    }
    else
    {
        $json = json_decode($result);
       // print_r($json->access_token);
        $access_token = $json->access_token;
    }
    

    如果你有旧的 PHP 版本,它可能不会工作,它会显示这个错误:

    cURL Error #:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure
    

    只是堆栈溢出它! Here they discuss the problem

    【讨论】:

    • 您可能应该提出修改建议。我会更新我的答案,以考虑您的错误处理。
    【解决方案3】:

    JSON美国英语 似乎是 默认值,但要完全符合,请添加以下行:

    curl_setopt($ch, CURLOPT_HTTPHEADER, "Accept: application/json, Accept-Language: en_US");
    

    【讨论】:

      猜你喜欢
      • 2015-04-07
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      • 2021-06-30
      • 2017-01-23
      相关资源
      最近更新 更多