web-dev-qa-db-ja.com

POSTリクエストを介してNAME [] = valueのようなデータを送信し、同時にユーザーをサードパーティのサーバーにリダイレクトする方法は?

次のようなデータ文字列を送信する必要があるカスタムモジュールを作成しています: "CODES [] = xxx&NAMES [] = xxx" via POSTを介してサードパーティの支払いゲートウェイに送信し、そこにユーザーをリダイレクトします。

お客様からデータを収集するためにフォームを作成しましたが、フォームフィールド名に[]を使用できません。Drupalがエラーを報告し(文字列ではなく配列))、終了します。

Drupal_http_requestを使用してすべてのデータを手動で投稿できますが、ブラウザが必要なURLにリダイレクトされません。 drupal_http_requestの後にdrupal_gotoを使用すると、データが失われ、支払いサービスがユーザーを認識しません。 $ request(my drupal_http_request)-> resultをページに含めると、存在しないURL(/order/checkout.phpが支払いサーバーのルートに追加され、代わりに接着される)を使用してサイトの404ページにリダイレクトされますサーバーのルートURLに)。

$ form ['#redirect']または$ form ['#action']を使用すると、「[]」なしのフィールド名が投稿されます。

質問は、リクエストが形成された後、それが送信される前に、これらの角括弧をどのように追加できるかです。

または、リダイレクトとともにデータを送信するにはどうすればよいですか?

助けにとても感謝します、この問題は今一週間私を狂わせています。

UPD私のコード:

    //a form
function mymodule_ask(&$form_state) {

 $form = array();

$form['#action'] = 'https://3rdpartysite.url/script.php';
$form['#method'] = 'post';

 $form['ORDER_PRICE[]'] = array(
   '#type' => 'textfield',
   '#title' => t('Amount'),
   '#size' => 10,
   '#required' => TRUE
 );

 $form['ORDER_PNAME[]'] = array (
   '#type' => 'radios',
   '#title' => t('Name'),
   '#options' => array('Avia' => 'Avia tickets', 'Other' => 'Other'),
   '#required' => TRUE
 );

 $form['submit'] = array (
   '#type' => 'submit',
   '#value' => t('PAY')
 );

return $form;
}

function mymodule_ask_submit {
    //in form submit function retrieving data from form values
    $requestar['ORDER_PNAME[]'] = $form_state['values']['ORDER_PNAME'];
    $requestar['ORDER_PRICE[]'] = $form_state['values']['ORDER_PRICE'] * 1.02;
    //forming an array to post
    $onestr = '';
    foreach ($requestar as $key => $value) {
    $onestr .= $key."=".$value."&";
    }
    $resstr = chop($onestr, '&');
    // and then I tried different ways

    //either creating and auto-submitting a form with needed values
    create_form($requestar); //separate function creating this form
    drupal_execute('payu_addform', $form_state);
    // but it doesn't pass drupal evaluation because of "ORDER_PRICE[]" element name

     //or via http_request
    $result = drupal_http_request('https://PAYMENT_SERVER_URL/script.php',  array('Content-Type' => 'application/x-www-form-urlencoded'), 'POST', $resstr);
    drupal_set_message($result->request);

    // but it takes me to MY_SERVER_URL/order/checkout.php?CART_ID=442bc42170616cd36dfd2246434d4210, while I need it to make to PAYMENT_SERVER_URL/order/checkout.php?bla-bla-bla
    //may be I can use $result->request in some other way? Just printing within this submit function gives nothing... But how can I pass it to make drupal take me out?

}
1
Puhache

名前を直接設定してみてください:

$form['order_price'] = array(
  '#type' => 'textfield',
  '#title' => t('Amount'),
  '#size' => 10,
  '#required' => TRUE,
  '#name' => 'ORDER_PRICE[]',
);
1
Clive