2010-09-30 9 views
1

Je suis en train de convertir cette fonction PHP cURL pour travailler avec mon application rails. Le code provient d'une passerelle de paiement SMS qui doit vérifier les paramètres POST. Depuis que je suis un grand Noob PHP, je n'ai aucune idée de la façon de gérer ce problème.écrire cURL comme la fonction dans une application rails

$verify_url = 'http://smsgatewayadress'; 



    $fields = ''; 

    $d = array(

      'merchant_ID' => $_POST['merchant_ID'], 

      'local_ID' => $_POST['local_ID'], 

      'total' => $_POST['total'], 

      'ipn_verify' => $_POST['ipn_verify'], 

      'timeout' => 10, 
      ); 



    foreach ($d as $k => $v) 

    { 

     $fields .= $k . "=" . urlencode($v) . "&"; 

    } 

    $fields = substr($fields, 0, strlen($fields)-1); 



    $ch = curl_init($verify_url); //this initiates a HTTP connection to $verify_url, the connection headers will be stored in $ch 

    curl_setopt($ch, CURLOPT_POST, 1); //sets the delivery method as POST 

    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); //The data that is being sent via POST. From what I can see the cURL lib sends them as a string that is built in the foreach loop above 

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //This verifies if the target url sends a redirect header and if it does cURL follows that link 

    curl_setopt($ch, CURLOPT_HEADER, 0); //This ignores the headers from the answer 

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //This specifies that the curl_exec function below must return the result to the accesed URL 

    $result = curl_exec($ch); //It ransfers the data via POST to the URL, it gets read and returns the result 



    if ($result == true) 

    { 

     //confirmed 

     $can_download = true; 

    } 

    else 

    { 

     //failed 
     $can_download = false; 

    } 

} 



if (strpos($_SERVER['REQUEST_URI'], 'ipn.php')) 

    echo $can_download ? '1' : '0'; //we tell the sms sever that we processed the request 

J'ai googlé un contre-cURL lib dans Rails et a trouvé une tonne d'options, mais pas que je pouvais comprendre et utiliser de la même manière ce script.

Si quelqu'un pouvait me donner un coup de main en convertissant ce script de php en ruby, ce serait grandement apprécié.

Répondre

2

L'approche la plus directe pourrait être d'utiliser la bibliothèque Ruby curb, qui est l'encapsuleur le plus simple pour cURL. Beaucoup d'options dans Curl::Easy carte directement à ce que vous avez ici. Une base pourrait être:

url = "http://smsgatewayadress/" 
Curl::Easy.http_post(url, 
    Curl::PostField.content('merchant_ID', params[:merchant_ID]), 
    # ... 
) 
+0

Hey! Merci beaucoup pour la réponse rapide. Je regarde la documentation de Curb en ce moment et je vais essayer de réécrire le script Ruby équivalent. J'ai trouvé l'équivalent pour tous les paramètres en plus de 'CURLOPT_RETURNTRANSFER', mais je suis toujours en train de chercher. Je posterai le script ici une fois que c'est fait, peut-être que d'autres en auront besoin. – v3rt1go