次のようなデータ文字列を送信する必要があるカスタムモジュールを作成しています: "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?
}
名前を直接設定してみてください:
$form['order_price'] = array(
'#type' => 'textfield',
'#title' => t('Amount'),
'#size' => 10,
'#required' => TRUE,
'#name' => 'ORDER_PRICE[]',
);