2012-07-16 6 views
0

데이터를 양식을 통해 게시해야하는 신용 ​​카드 결제를 위해 제 3 자 제공 업체를 사용하고 있습니다. 그러나 사용자가 아닌 데이터베이스에서 데이터를 전달하고 있습니다. 형태로 작성.자바 스크립트 양식의 PHP 대체 자동 제출 및 리디렉션

현재 자바 스크립트를 사용하여 자동 제출되는 페이지를 가지고 있지만,이 기능은 매우 전문적이지 않습니다. PHP가 브라우저에로드 된 페이지에 게시 할 수있는 방법이 있습니까?

<body onload="document.form1.submit()"> 
<form method="post" action="https://payment.provider.com/Servlet" id="form1" name="form1" target="_top"> 
    <input type="hidden" name="TRANSACTION_ID" value="<?php echo $transid; ?>" /> 
    <input type="hidden" name="AMOUNT" value="<?php echo $amount; ?>" /> 
    <input type="hidden" name="TERMINAL_ID" value="T04_000000000005" /> 
    <input type="submit" value="Click if not redirected" name="submitButton" /> 
</form> 
</body> 

나는 데이터를 게시 할 수 있지만 응답을 기대할 수있는 cURL을 알고 있습니다. 양식을 제출할 때 데이터는 페이지에 게시되지만 해당 페이지는 브라우저에로드됩니다. 데이터가 게시되면 사용자는 게시 된 값을 사용하는 제 3 자 제공 업체 페이지로 이동해야하므로 리디렉션 만 할 수는 없습니다.

+0

직접 게시 할 수 없습니까? 귀하의 양식에 숨겨진 필드를 포함 시키십시오. – ManseUK

+0

내가 원하는 것을 이해하는 방식으로 지불 프로세서에서 나오는 것처럼 보이는 페이지를 볼 수 있지만 귀하의 사이트에서 실제로 오는 것입니다. 그건 분명히 나를 놀라게 할 것입니다 ... – fvu

+0

제 3자를 통해 지불 처리를하는 다른 사이트를 둘러 보면 (즉, 실제로 큰 사이트를 제외한 모든 사람들) 회사는 그것을 요구한다. 사이트에서 카드 결제를하는 경우 PCI 호환 방식으로 카드 결제를 수행해야합니다. 카드 회사를 둘러 보려고하면 카드 회사가 알아 내면 상인 계정을 잃어 버리게됩니다. – Spudley

답변

0

예,이 문제에 대한 해결책을 찾았습니다.

이 솔루션을 찾은 동안 나는 새로운 발견도했습니다. 타이머를 사용하여 새 페이지를 열면 Chrome이 해당 페이지를 차단합니다. 버튼을 사용하여 새 페이지를 열면 Chrome이 페이지를 차단하지 않습니다.

/** This is the script that will redraw current screen and submit to bank. */ 
echo '<script>'."\n" ; 
echo 'function serverNotifySelected()'."\n" ; 
echo '{'."\n" ; 
echo ' window.open(\'\', \'BankPaymentScreen\');'."\n" ; 
echo ' document.forms[\'bank_form\'].submit();'."\n" ; 
echo ' document.forms[\'server_responder\'].submit();'."\n" ; 
echo '}'."\n" ; 
echo '</script>'."\n" ; 

/** This form will be opened in a new window called BankPaymentScreen. */ 
echo '<form action="https://www.sandbox.bank.com/cgi-bin/webscr" name="bank_form" method="post" target="BankPaymentScreen">'."\n" ; 
echo '<input type="hidden" name="cmd" value="_s-xclick">'."\n" ; 
echo '<input type="hidden" name="custom" value="'.$transaction_start.'">'."\n" ; 
echo '<input type="hidden" name="hosted_button_id" value="'.$single_product->hosted_button_id.'">'."\n" ; 
echo '<table>'."\n" ; 
echo ' <tr>'."\n"; 
echo '  <td><input type="hidden" name="'.$single_product->hide_name_a.'" value="'.$single_product->hide_value_a.'">Local</td>'."\n" ; 
echo ' </tr>'."\n" ; 
echo ' <tr>'."\n" ; 
echo '  <td>'."\n" ; 
echo '  <input type="hidden" name="'.$single_product->hide_name_b.'" value="'.$single_product->hide_value_b.'" />'.$single_product->short_desc.' $'.$adj_price.' USD'."\n" ; 
echo '  </td>'."\n" ; 
echo ' </tr>'."\n" ; 
echo '</table>'."\n" ; 
echo '<input type="hidden" name="currency_code" value="USD">'."\n" ; 
echo '</form>'."\n" ; 

/** This form will redraw the current page for approval. */ 
echo '<form action="ProductApprove.php" name="server_responder" method="post" target="_top">'."\n" ; 
echo '<input type="hidden" name="trans" value="'.$transaction_start.'">'."\n" ; 
echo '<input type="hidden" name="prod_id" value="'.$this->product_id.'">'."\n" ; 
echo '</form>'."\n" ; 

/** No form here just an input and a button. onClick will handle all the forms */ 
echo '<input type="image" src="https://www.sandbox.bank.com/en_US/i/btn/btn_purchaseimmediateCC_LG.gif" border="0" alt="This Bank - The safer, easier way to pay!" onclick="serverNotifySelected()">'."\n" ; 
echo '<img alt="" border="0" src="https://www.sandbox.bank.com/en_US/i/scr/pixel.gif" width="1" height="1">'."\n" ; 

위의 코드는 한 페이지에 하나 개의 버튼입니다 : 여기

내가 해낸 솔루션입니다. 그러면 버튼이 눌러지고 현재 페이지가 [제품 구매]에서 [사전 승인]으로 변경되고 새로운 페이지가 열리고 초점을 얻은 다음 지불 공급자에게 전달됩니다.

사용자가 결제 제공 업체를 마치고 사용자가 결제 제공 업체의 창을 닫고 [웹 사이트로 돌아 가기] 버튼을 사용하지 않으면이 웹 사이트가 준비되고 사전 승인 화면!

관련 문제