商会资讯

标题: 微信支付的接口文件demo一拿到,就放到的服务器上测试... [打印本页]

作者: admin    时间: 2016-10-28 16:07
标题: 微信支付的接口文件demo一拿到,就放到的服务器上测试...


微信支付的接口文件demo一拿到,就放到的服务器上测试,首先打开,把对应的参数配置好,打开一看第一个错误就出现了

微信支付示例接口一打开就报了这样的错误

Notice: Use of undefined constant CURLOP_TIMEOUT - assumed 'CURLOP_TIMEOUT' in /wx_pay_test/WxPayPubHelper/WxPayPubHelper.PHP on line 155
Warning: curl_setopt() expects parameter 2 to be long, string given in wx_pay_test/WxPayPubHelper/WxPayPubHelper.php on line 155

一下就懵了,仔细打开源码一看,文件中在155行这里设置超时的时候,本来应该是
curl_setopt($ch, CURLOPT_TIMEOUT, $second);
可是接口中的文件却是这样的
curl_setopt($ch, CURLOP_TIMEOUT, $second);
哈哈,设置参数的字母写错了,修改这里,两条报错消失。

可是这个问题解决后,紧接着又一个问题出现了,
Warning: curl_close(): 5 is not a valid cURL handle resource in.....
这个是什么原因呢?
打开对应的代码看看,如下便是对应位置的代码,只列举一部分

169行起     
//运行curl     
$data = curl_exec($ch);     
curl_close($ch);   //返回结果     
if($data)     {      
    curl_close($ch);      
    return $data;     
} else {        
    $error = curl_errno($ch);
    echo "curl出错,错误码:$error"."<br>";
    echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>";
    curl_close($ch);      
    return false;     
}

仔细查看发现腾讯官方的开发人员也太粗心了,在注释返回结果前面的那一行,已经将$ch连接关闭了,后面的if..else语句中又对它进行了关闭操作,很明显,第二次调用的时候这个连接已经不存在了,必然会报错啊。
解决方法

解决方法很简单,直接将注释返回结果前面的那一行注释掉即可。
修改后的代码如下:

169行起     
//运行curl     
$data = curl_exec($ch);
//curl_close($ch);   //返回结果
if($data)     {      
    curl_close($ch);
    return $data;
} else  {        
    $error = curl_errno($ch);
    echo "curl出错,错误码:$error"."<br>";
    echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>";
    curl_close($ch);
    return false;
}

运行结果出来了






欢迎光临 商会资讯 (http://smellage.com/) Powered by Discuz! X2.5