美文网首页php知识积累
一个空格引发的问题

一个空格引发的问题

作者: hey_沙子 | 来源:发表于2018-07-24 10:50 被阅读2次

    微信支付成功,更改订单状态本来用curl调用java接口已经调通,后来需求变成了多店支付问题,然后也因为多个环境来回切换便弄了多个文件,通过软连接形式调用,发现总是更改订单状态失败

    $oIdAndPId=$arr['out_trade_no'];
    $domain=" http://xxx.beta.xxx.com/trade/getOrderStatusByP";
    $_url = $domain."?out_trade_no=".$oIdAndPId;//这里out_trade_no就是给java传递的paymentId去更改payment表的支付状态
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS);
    $output = curl_exec($ch);
    $a=curl_errno($ch);
    if($a) {
        return curl_error($ch);
    } else {
        $ret = json_decode($output, true);
        if ($ret['status'] == 0) { 
            file_put_contents("/server/logs/notify_success.txt", "_url ={$_url} \t  \t output_success=" . var_export($output, true) . "\t date=" . date('Y-m-d H:i:s', time()) . " \r\n", FILE_APPEND);
            return true;
         } else {
            file_put_contents("/server/logs/notify_fail.txt", "_url ={$_url} \t  \t output_fail=" . var_export($output, true) . "\t date=" . date('Y-m-d H:i:s', time()) . " \r\n", FILE_APPEND);
            return false;
         }
     }
    

    1、记录日志发现$a输出错误码1

    CURLE_UNSUPPORTED_PROTOCOL(1)

    你的URL传递给libcurl的使用协议,这libcurl的不支持。支持可能是你没有使用一个编译时的选项,它可以是一个拼写错的协议字符串,或者只是一个协议的libcurl没有代码。

    $ch = curl_init();发现输出null

    根本不知道说的啥意思,然后百度说看phpinfo()查看是否安装curl相关类库,输出发现有,也不是这个问题,而且在其他文件写了简单的demo测试发现能使用curl
    2、怀疑接口不是用post方式传输,改成get了,尝试把curl_setopt($ch, CURLOPT_POST, 1);去掉或者改为0发现还是不可以

    3、 查看连接curl具体错误,获取一个cURL连接资源句柄的信息

      $info  = curl_ getinfo( $ch ); 
    

    返回如下代码:

    array (
      'url' => '     http://xxx.beta.xxx.com/trade/getOrderStatusByP?out_trade_no=1349161_309712298',
      'content_type' => NULL,
      'http_code' => 0,
      'header_size' => 0,
      'request_size' => 0,
      'filetime' => -1,
      'ssl_verify_result' => 0,
      'redirect_count' => 0,
      'total_time' => 0,
      'namelookup_time' => 0,
      'connect_time' => 0,
      'pretransfer_time' => 0,
      'size_upload' => 0,
      'size_download' => 0,
      'speed_download' => 0,
      'speed_upload' => 0,
      'download_content_length' => -1,
      'upload_content_length' => -1,
      'starttransfer_time' => 0,
      'redirect_time' => 0,
      'certinfo' => 
      array (
      ),
      'primary_ip' => '',
      'redirect_url' => '',
    )
    

    发现content_type为null,添加如下代码

    $header[] = "Content-type: application/x-www-form-urlencoded";
    curl_setopt($oCurl, CURLOPT_HTTPHEADER,$header);
    

    还是不可以
    4、发现软连接文件所属组和所有用户不对,其他的都是develop,只有这个文件是root

    aa.png
    更改了所有组和所有者发现还是不可以
    5、回想这次和上次的变化,应该只有软连接这块,然后对比之前文件方法,发现双引号中间有个空格,然后去掉发现可以
    $domain=" http://mobile.beta.yiwang.com/trade/getOrderStatusByP";
    

    然后看curl_errno($ch);输出的提示
    你的URL传递给libcurl的使用协议,这libcurl的不支持。支持可能是你没有使用一个编译时的选项,它可以是一个拼写错的协议字符串,或者只是一个协议的libcurl没有代码。

    相关文章

      网友评论

        本文标题:一个空格引发的问题

        本文链接:https://www.haomeiwen.com/subject/hefluftx.html