2015-10-20 88 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正在工作。 –