Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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从字符串生成对数组的cURL调用_Php_Arrays_Json_Curl_Wampserver - Fatal编程技术网

使用PHP从字符串生成对数组的cURL调用

使用PHP从字符串生成对数组的cURL调用,php,arrays,json,curl,wampserver,Php,Arrays,Json,Curl,Wampserver,我通过本地主机Wampserver从Paypal mobile SDK获得响应。我通过cURL调用接收字符串。该字符串已通过在线服务json Lint网站验证为json格式。我能够使用php 5.5版的在线php编译器phptester.net将json字符串转换为php代码中的数组。然而,当我在我的wampserver上尝试相同的代码时,它说数组大小等于零。我不知道会出什么问题。请帮助我评估我的PHP代码 以下是Paypal mobile sdk的回复: {"scope":"https://u

我通过本地主机Wampserver从Paypal mobile SDK获得响应。我通过cURL调用接收字符串。该字符串已通过在线服务json Lint网站验证为json格式。我能够使用php 5.5版的在线php编译器phptester.net将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为null。请帮助我评估代码


谢谢

尝试此操作,不要尝试将
json\u decode
转换为数组。您可以使用
json\u decode
中的第二个选项将其转换为关联数组。


在这里

我找到了问题的答案。我只需要去掉从PayPal返回的字符串中返回的标题。我通过将以下cURL选项设置为false来实现这一点:cURL\u setopt($ch,CURLOPT\u header,true)

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


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

是的。但是我如何在我的PHP文件中使用这个字符串。我得到如下的cURL字符串响应:$result=cURL\u execute($ch);如何在$result周围写单引号。请看上面我的PHP文件实现。@developer将您的代码更改为
$arr=json\u decode($result,true);$token=$arr['access\u token']
好的。我想我找到了问题所在。从Paypal返回的结果字符串包括其他字符,这些字符将字符串作为Json格式置零。我需要找到一种方法,将字符串中的字符转换为Json格式。我想您提供了Paypal Json字符串作为它的格式。无论如何,您可以通过正则表达式除去这些字符。另外尝试使用
json\u last\u error\u msg()
不,比这简单。它现在可以工作了。我只是将curl\u setopt($ch,CURLOPT\u HEADER,true)设置为false。这样就去掉了PayPal返回字符串中的头。然后,我可以用json将字符串解码到数组中,并访问access\u令牌索引。
$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);