Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 登录验证后提交表单_Javascript_Php_Html_Forms - Fatal编程技术网

Javascript 登录验证后提交表单

Javascript 登录验证后提交表单,javascript,php,html,forms,Javascript,Php,Html,Forms,我正在传递一个用户,并从一个电话设备传递到一个.php页面。这个很好用。然后,我使用这个用户名和密码,并将它们放入一个函数中,如果它们是正确的,就会检查数据库。这也行。下一步是,如果身份验证是正确的,我需要发送一个表单。为此,我尝试了以下不发送表单的代码: $login = \Fr\LS::login($user, $pass, false, false); if($login === true){ //Some database stuff $amount = "$price"; $id

我正在传递一个用户,并从一个电话设备传递到一个.php页面。这个很好用。然后,我使用这个用户名密码,并将它们放入一个函数中,如果它们是正确的,就会检查数据库。这也行。下一步是,如果身份验证是正确的,我需要发送一个表单。为此,我尝试了以下不发送表单的代码:

$login = \Fr\LS::login($user, $pass, false, false);
if($login === true){

//Some database stuff

$amount = "$price";
$id = "$num_fact";
$terminal = "01";
$moneda = "978";
$trans = "0";
$fuc = "335814141";
$urlOK = "https://www..com/.php";

$miObj = new RedsysAPI;
$miObj->setParameter("DS_MERCHANT_AMOUNT",$amount);
$miObj->setParameter("DS_MERCHANT_ORDER",$id);
$miObj->setParameter("DS_MERCHANT_MERCHANTCODE",$fuc);
$miObj->setParameter("DS_MERCHANT_CURRENCY",$moneda);
$miObj->setParameter("DS_MERCHANT_TRANSACTIONTYPE",$trans);
$miObj->setParameter("DS_MERCHANT_TERMINAL",$terminal);
$miObj->setParameter("DS_MERCHANT_MERCHANTURL",$url);
$miObj->setParameter("DS_MERCHANT_URLOK",$urlOK);
$miObj->setParameter("DS_MERCHANT_URLKO",$urlKO);
$params = $miObj->createMerchantParameters();
$claveModuloAdmin = '';
$signature = $miObj->createMerchantSignature($claveModuloAdmin);
?>

<form name="form_tpv" id="form_tpv" style="display:none" action="https://sis-t.redsys.es:/sis/realizarPago" method="POST">
<input type="text" name="Ds_SignatureVersion" value="HMAC_SHA256_V1"/>
<input type="text" name="DS_MerchantParameters" value="<?php echo $params; ?>"/>
<input type="text" name="Ds_Signature" value="<?php echo $signature; ?>"/>
<input type="submit" value="Realizar Pago"/>
</form>

<script>
setTimeout(function(){
document.getElementById('form_tpv').submit();
}, 1000); 
</script>

如果你已经有了价值观,不要用这种方式使用表单,它是错误的,并且会导致一些问题。您不需要与该表单进行用户交互,因此只需调用一个函数,该函数依赖于发送一个数组,其中包含您需要作为参数的所有值,后端将根据您的需要处理这些值

认真地删除html和javascript

$login = \Fr\LS::login($user, $pass, false, false);
if($login === true){

//Some database stuff

$amount = "$price";
$id = "$num_fact";
$terminal = "01";
$moneda = "978";
$trans = "0";
$fuc = "335814141";
$urlOK = "https://www..com/.php";

$miObj = new RedsysAPI;
$miObj->setParameter("DS_MERCHANT_AMOUNT",$amount);
$miObj->setParameter("DS_MERCHANT_ORDER",$id);
$miObj->setParameter("DS_MERCHANT_MERCHANTCODE",$fuc);
$miObj->setParameter("DS_MERCHANT_CURRENCY",$moneda);
$miObj->setParameter("DS_MERCHANT_TRANSACTIONTYPE",$trans);
$miObj->setParameter("DS_MERCHANT_TERMINAL",$terminal);
$miObj->setParameter("DS_MERCHANT_MERCHANTURL",$url);
$miObj->setParameter("DS_MERCHANT_URLOK",$urlOK);
$miObj->setParameter("DS_MERCHANT_URLKO",$urlKO);
$params = $miObj->createMerchantParameters();
$claveModuloAdmin = '';
$signature = $miObj->createMerchantSignature($claveModuloAdmin);
if ($signature){
 $data = array(
       'Ds_SignatureVersion'=> 'HMAC_SHA256_V1',
      'DS_MerchantParameters' => $params,
          'Ds_Signature' => $signature
   );
  realizarPago($data);
 }
?>
如果表单末尾不是您的系统,则可以使用cURL发送数据:

$url = 'https://sis-t.redsys.es:/sis/realizarPago';
 $data = array(
       'Ds_SignatureVersion'=> 'HMAC_SHA256_V1',
      'DS_MerchantParameters' => $params,
          'Ds_Signature' => $signature
   );

//url-ify the data for the POST
foreach($data as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($data));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
//YOUR LINK IS HTTPS
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);
观察:

请大家停止将CURLOPT_SSL_VERIFYPEER设置为false或0。如果 您的PHP安装没有最新的CA根证书 捆绑,从curl网站下载并保存到您的 服务器:

然后在php.ini文件中设置路径,例如在Windows上:

curl.cainfo=c:\php\cacert.pem

关掉CuropoptSLVIEVIEFER允许中间人(MITM) 攻击,这是你不想要的


谢谢你的评论和完整的回答。但是如何将数组中的所有
$data
发送到“”?如果系统不一样,请使用cURL发送数据,我将编辑我的答案。对不起,我有点不知所措,正在努力理解。我应该使用哪段代码?如果realizarPago的链接是您的代码,请使用第一段代码,只需使用对realizarPago例程的函数调用,如我所示。如果RealizationPago不是您的系统,并且您没有代码,请使用第二段代码。啊,不,它链接到tpv进行支付。我尝试了第二个代码,但它没有重定向到页面“”
$url = 'https://sis-t.redsys.es:/sis/realizarPago';
 $data = array(
       'Ds_SignatureVersion'=> 'HMAC_SHA256_V1',
      'DS_MerchantParameters' => $params,
          'Ds_Signature' => $signature
   );

//url-ify the data for the POST
foreach($data as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($data));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
//YOUR LINK IS HTTPS
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);