【问题标题】:From string result in cURL call to array using PHP从字符串导致 cURL 调用到使用 PHP 的数组
【发布时间】:2023-03-16 06:43:01
【问题描述】:

我通过我的本地主机 Wampserver 从 Paypal 移动 SDK 获得响应。我通过 cURL 调用收到一个字符串。该字符串已通过在线服务 Json Lint 网站验证为 json 格式。我能够使用在线 php 编译器 phptester.net 使用 php 版本 5.5 将 json 字符串转换为 php 代码中的数组。但是,当我在我的 wampserver 上尝试相同的代码时,它说数组大小等于零。我不知道有什么问题。请帮我评估我的 PHP 代码。

这是来自 Paypal mobile sdk 的回复:

{"scope":"https://uri.paypal.com/services/subscriptions https://api.paypal.com/v1/payments/.* https://api.paypal.com/v1/vault/credit-card https://uri.paypal.com/services/applications/webhooks openid https://uri.paypal.com/payments/payouts https://api.paypal.com/v1/vault/credit-card/.*","nonce":"2016-03-06T22:13:44ZNxK118Mc40QthTeJX8Y_enneSe0y62kEo6mu0ICCwMU","access_token":"A101.ONfkNw-H4-VcjWL9ZUbLlaDj1YUApO7X9fhOslMKRLyW1JpKL1hLlD5W2m9xri-y.ZRF-23gpYMDQ5vWPkOsEiv8WbJC","token_type":"Bearer","app_id":"APP-80W284485P519543T","expires_in":32399}

这是我在 php 文件中使用的相关代码:

  curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch,CURLOPT_HEADER,true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header_array);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
    curl_setopt($ch, CURLOPT_USERPWD, $idclient.":".$sekret);  


    $result = curl_exec($ch);
    echo curl_error($ch);
    curl_close($ch);

    echo $result;
    $arr = (array) json_decode($result);
    $token = $arr['access_token'];

    echo "here's the token oken";
    var_dump($arr);
    var_dump($token);

这是我在 phptester.net 中使用的代码:

$e ='I copied and paste the response i get from server here. noticed the
single quotes here. Maybe this is the problem';
$a = (array)json_decode($e);
$b = $a['access_token'];
var_dump($b);    

此代码准确地打印出“access_token”处的数组值,这是我需要验证向 PayPal 付款的 access_token。

我需要在我的 Wamp 服务器 php 文件上复制这个好的代码。但它没有做应该做的事情。它说我的数组的大小为零,并且变量 $token 为空。请帮助我评估我的代码。

谢谢

【问题讨论】:

    标签: php arrays json curl wampserver


    【解决方案1】:

    试试这个,不要尝试将json_decode 转换为数组。您可以使用json_decode 中的第二个选项将其转换为关联数组。 PHP Doc

    $e ='{"scope":"https://uri.paypal.com/services/subscriptions https://api.paypal.com/v1/payments/.* https://api.paypal.com/v1/vault/credit-card https://uri.paypal.com/services/applications/webhooks openid https://uri.paypal.com/payments/payouts https://api.paypal.com/v1/vault/credit-card/.*","nonce":"2016-03-06T22:13:44ZNxK118Mc40QthTeJX8Y_enneSe0y62kEo6mu0ICCwMU","access_token":"A101.ONfkNw-H4-VcjWL9ZUbLlaDj1YUApO7X9fhOslMKRLyW1JpKL1hLlD5W2m9xri-y.ZRF-23gpYMDQ5vWPkOsEiv8WbJC","token_type":"Bearer","app_id":"APP-80W284485P519543T","expires_in":32399}';
    
    $a = json_decode($e,true);
    
    $b = $a['access_token'];
    
    var_dump($b);
    

    这里

    【讨论】:

    • 是的。但是我如何在我的 PHP 文件中使用它。我得到这样的 cURL 字符串响应: $result = curl_execute($ch);如何在 $result 周围写单引号。看看我上面的 PHP 文件实现。 @DeveloperH
    • 把你的代码改成这个$arr = json_decode($result, true); $token = $arr['access_token'];
    • 好的。我想我找到了问题所在。从 Paypal 返回的结果字符串包含使字符串无效为 Json 格式的其他字符。我需要找到一种方法来摆脱字符串中的那些字符,将其转换为 Json 格式。
    • 我以为您提供的是 paypal json 字符串。无论如何,您可以通过正则表达式消除这些字符。也尝试使用json_last_error_msg()
    • 不,比这更容易。现在可以了。我只是将 curl_setopt($ch,CURLOPT_HEADER,true) 设置为 false。这摆脱了 PayPal 返回字符串中的标头。然后我能够将字符串 JSON 解码为数组并访问 access_token 索引。
    【解决方案2】:

    我能够找到我的问题的答案。我只需要删除从 PayPal 返回的字符串中返回的标头。我通过将以下 cURL 选项设置为 false 来做到这一点: curl_setopt($ch,CURLOPT_HEADER,true)

    然后,我能够在返回的字符串上使用 json_decode() 将其转换为数组,这允许我访问数组中的 access_token 索引字段。

    现在,我只需将此字符串存储在我的在线数据库中,以便通过 PayPal 移动 SDK 进行购买验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-23
      • 2018-06-19
      • 2018-11-03
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多