警告:curl_setopt()期望参数2为long,第7行的/home/crevisio/public_html/matisoff.info/white/coinbase/payment.php中给出了字符串

时间:2013-06-22 06:06:58

标签: php

这段代码出了什么问题?

Idk为什么,但格式化在这里搞砸了。这是行:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

我是新来的,所有的帮助都是有用的。感谢。

<?php
if(isset($_POST['payment'])){
    require('config.php');
    $ch= curl_init('https://coinbase.com/api/v1/account/generate_receive_address');
    $amount=$_POST['amount'];
    $json=json_encode(array("api_key"=>COINBASE_APIKEY,"address"=>array("callback_url"=>$_SERVER['HTTP_HOST'] . dirname($_SERVER['REQUEST_URI']).'callback.php')));
    curl_setopt($ch, CURLOPT_HTTPHEADERS, array('Content-Type: application/json'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
    curl_setopt($ch, CURLOPT_POST, 1);
    $jsonreturn=json_decode(curl_exec($ch),true);
    if(is_integer($amount) && $amount>0 && $jsonreturn['callback_url']==$_SERVER['HTTP_HOST'] . dirname($_SERVER['REQUEST_URI']).'callback.php'){
        $mysql=new mysqli(MYSQL_HOSTNAME,MYSQL_USERNAME,MYSQL_PASSWORD,MYSQL_DATABASE);
        $mysql->query("INSERT INTO invoices(Amount, Address) VALUES ('$amount','".$jsonreturn['address']."')");
        $mysql->close();
        header('refresh: 1;url=payment.php?address='.$jsonreturn['address'].'&amount='.$amount);
        exit();
    }else{
        header("refresh: url=payment.php?error=1");
        exit();
    }
}
?>

1 个答案:

答案 0 :(得分:3)

问题实际上是CURLOPT_HTTPHEADERS行。 (行号从文件的开头开始,而不只是计算PHP代码行)

实际PHP常量为CURLOPT_HTTPHEADER(单数),而不是CURLOPT_HTTPHEADERS

由于PHP处理未定义常量的方式,它会生成警告消息(可能由于您的配置设置而隐藏),并将未定义的常量视为字符串:"CURLOPT_HTTPHEADERS" - 因此关于期望整数的错误消息(长),并得到一个字符串。

更新

如果您仍然没有从代码中获得预期的结果,我会检查以下内容:

  1. 您的连接参数 - 主机名,用户名,密码等来自哪里?你确定他们是对的。

  2. 在将变量值插入查询之前,您尚未正确转义变量值。如果你的价值得到报价,就会引发问题。尝试echo输出你的sql而不是查询它,然后尝试针对你的数据库手动运行它。我也高度建议改为使用prepared statements