2015-10-20 38 views
1

我試圖通過cURL POST將結果從drupal webform發送給第三方。我的cURL功能不起作用,我正在努力尋找我的錯誤。我以前從未使用cURL,所以我不確定它是如何工作的,甚至不知道它是如何工作的。Drupal 7 PHP cURL沒有執行

從我所知道的情況來看,我在拼湊正確發送的URL,發送只是失敗。

<?php 
module_load_include('inc','webform','includes/webform.submissions'); 
$uri = $_SERVER[REQUEST_URI]; 
$sid = substr($uri, 20); 
$submission = webform_get_submissions(array('sid' => $sid)); 
$nid = $submission[$sid]->nid; 

$sql = db_select('webform_submitted_data', 'w'); 
$sql->fields('w', array('sid','cid','data')) 
    ->condition('sid', $sid) 
    ->condition('cid', array(1,2,3,4,5,6,7,8),'IN'); 
$results = $sql->execute(); 

$post = NULL; 
$url = urlencode('http://ulm.datamark.com/services/lead_submission&client_code=DAV4516&source_code=DAVNCU'); 

foreach($results as $result) 
    { 
     if ($result->cid == 1) { 
      $post .= "first_name=" . urlencode($result->data); 
     } else if ($result->cid == 2) { 
      $post .= "&last_name=" . urlencode($result->data); 
     } else if ($result->cid == 3) { 
      $post .= "&email=" . urlencode($result->data); 
     } else if ($result->cid == 4) { 
      $post .= "&phone=" . urlencode($result->data); 
     } else if ($result->cid == 5) { 
      $who = $result->data; 
     } else if ($result->cid == 6) { 
      $post .= "&phone2=" . urlencode($result->data); 
     } else if ($result->cid == 8) { 
      $post .= "&comments=" . urlencode($result->data); 
     } 


    } 
dsm($who); 
dsm($url.$post); 


if ($who == "fs") 
{ 

$defaults = array( 
     CURLOPT_POST => 1, 
     CURLOPT_HEADER => 0, 
     CURLOPT_URL => $url, 
     CURLOPT_FRESH_CONNECT => 1, 
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_FORBID_REUSE => 1, 
     CURLOPT_TIMEOUT => 4, 
     CURLOPT_POSTFIELDS => http_build_query($post) 
    ); 

    $ch = curl_init(); 
    curl_setopt_array($ch, ($defaults)); 
    if(! $result = curl_exec($ch)) 
    { 
     echo "Something went wrong"; 
     trigger_error(curl_error($ch)); 
    } 
    curl_close($ch); 


?> 

回答

1

我的眼睛看到了幾個問題:

  1. 不要URLEncode的URL本身。該函數適用於您在URL的查詢部分傳遞的數據(之後的部分?)
  2. 看起來您缺少網址中的?
  3. 我認爲你在發佈數據的彙編時會遇到一些合理的問題。首先,您爲每個帖子字段編碼所有$ result->數據。您可能希望一次僅包含一個字段。其次,你將一個字符串傳遞給http_build_query(),它需要一個數組或一個對象。也許你可以重構使用$ post作爲數組,這可能會使調試更容易。閱讀cURLhttp_build_query的文檔,瞭解所有事情的期望和做法。例如,如果爲CURLOPT_POSTFIELDS傳遞一個數組到curl_setopt,cURL擴展可以爲你做很多工作。
+0

謝謝! 1和2做了詭計。由於數據庫持有信息的時髦方式(以及我必須採取的方式),我正在迭代我的方式。感謝幫助,cURL至少工作......我不知道第三方是否還在接收,但我知道cURL正在工作。 –