【问题标题】:Get particular variable from curl response string从 curl 响应字符串中获取特定变量
【发布时间】:2017-10-04 10:34:51
【问题描述】:

我在一个字符串中得到如下 curl 的响应:

Accepted=AVSAUTH:TEST:::829649376:N::U
ENTRYMETHOD=KEYED
historyid=829649376
MERCHANTORDERNUMBER=14700000186
orderid=646526156
PAYTYPE=MasterCard
recurid=0
refcode=829649376-TEST
result=1
Status=Accepted
transid=0

我想获得像 status= Accepted 这样的单个变量,这样我就可以将它们存储在我的数据库中。任何帮助都将不胜感激。

【问题讨论】:

    标签: php curl payment-gateway php-5.3 php-curl


    【解决方案1】:

    preg_match 是你的朋友:

    <?
    $result = "Accepted=AVSAUTH:TEST:::829649376:N::U
    ENTRYMETHOD=KEYED
    historyid=829649376
    MERCHANTORDERNUMBER=14700000186
    orderid=646526156
    PAYTYPE=MasterCard
    recurid=0
    refcode=829649376-TEST
    result=1
    Status=Accepted
    transid=0";
    
    preg_match_all("/^([^=]+)=(.*)$/m", $result, $regs, PREG_SET_ORDER);
    
    $data = [];
    foreach($regs as $reg) {
        $data[$reg[1]] = $reg[2];
    }
    
    print_r($data);
    ?>
    

    $data 将是一个哈希数组:

    Array
    (
        [Accepted] => AVSAUTH:TEST:::829649376:N::U
        [ENTRYMETHOD] => KEYED
        [historyid] => 829649376
        [MERCHANTORDERNUMBER] => 14700000186
        [orderid] => 646526156
        [PAYTYPE] => MasterCard
        [recurid] => 0
        [refcode] => 829649376-TEST
        [result] => 1
        [Status] => Accepted
        [transid] => 0
    )
    

    【讨论】:

    • 谢谢垫子,你摇滚
    【解决方案2】:

    最简单的方法可能是遍历每一行,并将其构建成一个简单的键/值数组:

    $results = [];
    
    foreach (explode("\n", $string) as $line) {
      list ($key, $value) = explode('=', $line, 2);
      $results[$key] = $value;
    }
    
    echo $results['Status']; // Accepted
    

    【讨论】:

      【解决方案3】:

      您可以如下提取curl响应的内容,

      $ch = curl_init();
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_VERBOSE, 1);
      curl_setopt($ch, CURLOPT_HEADER, 1);
      // ... 
      
      $response = curl_exec($ch); // Curl response
      
      // After your curl response
      $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
      $header = substr($response, 0, $header_size);
      $body = substr($response, $header_size);
      curl_close($ch);
      
      var_dump($body);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-05
        • 1970-01-01
        • 2020-06-27
        • 2016-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多