Php 如何从wordpress中的自定义网关中的process_payment功能重定向?
我正在尝试开发一个自定义网关,在那里我需要获取订单信息,如价值、信用卡号码、卡所有者姓名、地址等。获取此信息后,我将使用Centinel 3D Secure提供的API发送请求。如果成功,他们将返回一个信用卡银行的url以及一些其他信息,我将发布到银行url 然后,银行将使用表单将数据发布到我的回调URL。然而,我似乎无法让它发挥作用。这是我的代码示例:Php 如何从wordpress中的自定义网关中的process_payment功能重定向?,php,wordpress,post,woocommerce,payment-gateway,Php,Wordpress,Post,Woocommerce,Payment Gateway,我正在尝试开发一个自定义网关,在那里我需要获取订单信息,如价值、信用卡号码、卡所有者姓名、地址等。获取此信息后,我将使用Centinel 3D Secure提供的API发送请求。如果成功,他们将返回一个信用卡银行的url以及一些其他信息,我将发布到银行url 然后,银行将使用表单将数据发布到我的回调URL。然而,我似乎无法让它发挥作用。这是我的代码示例: function process_payment( $order_id ) { global $woocommerce
function process_payment( $order_id ) {
global $woocommerce;
//code to get data using API
if( (strcasecmp('Y', $_SESSION['Centinel_Enrolled']) == 0){
echo '<form action="'.$_SESSION["ACSUrl"].'"" method="post">
<input type=hidden name="PaReq" value="'.$_SESSION["RandomValue"].'"/>
<input type=hidden name="TermUrl" value="'$myWPCallbackUrl.'?>"/>
<input type=hidden name="MD" value="Data"/>
<input type="submit" value="Submit" id="submit_centinel_payment_form"/>
<script type="text/javascript">
jQuery(function(){
jQuery("#submit_centinel_payment_form").click();});
</script>
</form>
}
功能处理付款($order\u id){
全球商业;
//使用API获取数据的代码
if((strcasecmp('Y',$_SESSION['Centinel\u registered'])==0){
echo'”/>
jQuery(函数(){
jQuery(“提交付款单”)。单击();
}
这不会重定向到服务器。有人知道这为什么不起作用吗?使用pur javascript可以实现这一目标。而不是使用此代码
<script type="text/javascript">
jQuery(function(){
jQuery("#submit_centinel_payment_form").click();});
</script>
<script type="text/javascript">
document.getElementById('paymentForm').submit(); // SUBMIT FORM
</script>
echo '<form action="'.$_SESSION["ACSUrl"].'" method="post" id="paymentForm">
<input type=hidden name="PaReq" value="'.$_SESSION["RandomValue"].'"/>
<input type=hidden name="TermUrl" value="'.$myWPCallbackUrl.'"/>
<input type=hidden name="MD" value="Data"/>
<input type="submit" value="Submit" id="submit_centinel_payment_form"/>
</form>
<script type="text/javascript">
document.getElementById("paymentForm").submit(); // SUBMIT FORM
</script>
';
jQuery(函数(){
jQuery(“提交付款单”)。单击();
您可以使用此代码
<script type="text/javascript">
jQuery(function(){
jQuery("#submit_centinel_payment_form").click();});
</script>
<script type="text/javascript">
document.getElementById('paymentForm').submit(); // SUBMIT FORM
</script>
echo '<form action="'.$_SESSION["ACSUrl"].'" method="post" id="paymentForm">
<input type=hidden name="PaReq" value="'.$_SESSION["RandomValue"].'"/>
<input type=hidden name="TermUrl" value="'.$myWPCallbackUrl.'"/>
<input type=hidden name="MD" value="Data"/>
<input type="submit" value="Submit" id="submit_centinel_payment_form"/>
</form>
<script type="text/javascript">
document.getElementById("paymentForm").submit(); // SUBMIT FORM
</script>
';
document.getElementById('paymentForm').submit();//提交表单
如果您在表单中添加id。
您的表单中也存在语法错误,我建议您将javascript代码移出表单元素之外
<script type="text/javascript">
jQuery(function(){
jQuery("#submit_centinel_payment_form").click();});
</script>
<script type="text/javascript">
document.getElementById('paymentForm').submit(); // SUBMIT FORM
</script>
echo '<form action="'.$_SESSION["ACSUrl"].'" method="post" id="paymentForm">
<input type=hidden name="PaReq" value="'.$_SESSION["RandomValue"].'"/>
<input type=hidden name="TermUrl" value="'.$myWPCallbackUrl.'"/>
<input type=hidden name="MD" value="Data"/>
<input type="submit" value="Submit" id="submit_centinel_payment_form"/>
</form>
<script type="text/javascript">
document.getElementById("paymentForm").submit(); // SUBMIT FORM
</script>
';
echo'
document.getElementById(“paymentForm”).submit();//提交表单
';
使用pur javascript您可以实现此目标。而不是使用此代码
<script type="text/javascript">
jQuery(function(){
jQuery("#submit_centinel_payment_form").click();});
</script>
<script type="text/javascript">
document.getElementById('paymentForm').submit(); // SUBMIT FORM
</script>
echo '<form action="'.$_SESSION["ACSUrl"].'" method="post" id="paymentForm">
<input type=hidden name="PaReq" value="'.$_SESSION["RandomValue"].'"/>
<input type=hidden name="TermUrl" value="'.$myWPCallbackUrl.'"/>
<input type=hidden name="MD" value="Data"/>
<input type="submit" value="Submit" id="submit_centinel_payment_form"/>
</form>
<script type="text/javascript">
document.getElementById("paymentForm").submit(); // SUBMIT FORM
</script>
';
jQuery(函数(){
jQuery(“提交付款单”)。单击();
您可以使用此代码
<script type="text/javascript">
jQuery(function(){
jQuery("#submit_centinel_payment_form").click();});
</script>
<script type="text/javascript">
document.getElementById('paymentForm').submit(); // SUBMIT FORM
</script>
echo '<form action="'.$_SESSION["ACSUrl"].'" method="post" id="paymentForm">
<input type=hidden name="PaReq" value="'.$_SESSION["RandomValue"].'"/>
<input type=hidden name="TermUrl" value="'.$myWPCallbackUrl.'"/>
<input type=hidden name="MD" value="Data"/>
<input type="submit" value="Submit" id="submit_centinel_payment_form"/>
</form>
<script type="text/javascript">
document.getElementById("paymentForm").submit(); // SUBMIT FORM
</script>
';
document.getElementById('paymentForm').submit();//提交表单
如果您在表单中添加id。
您的表单中也存在语法错误,我建议您将javascript代码移出表单元素之外
<script type="text/javascript">
jQuery(function(){
jQuery("#submit_centinel_payment_form").click();});
</script>
<script type="text/javascript">
document.getElementById('paymentForm').submit(); // SUBMIT FORM
</script>
echo '<form action="'.$_SESSION["ACSUrl"].'" method="post" id="paymentForm">
<input type=hidden name="PaReq" value="'.$_SESSION["RandomValue"].'"/>
<input type=hidden name="TermUrl" value="'.$myWPCallbackUrl.'"/>
<input type=hidden name="MD" value="Data"/>
<input type="submit" value="Submit" id="submit_centinel_payment_form"/>
</form>
<script type="text/javascript">
document.getElementById("paymentForm").submit(); // SUBMIT FORM
</script>
';
echo'
document.getElementById(“paymentForm”).submit();//提交表单
';
这是一个老问题,但对于所有现在正在同一个问题中挣扎的人来说,我希望我的回答会有所帮助。我遇到了完全相同的问题,我就是这样解决的
我不知道在导致这种行为的process\u payment($order\u id)
函数的后台发生了什么,但您不能通过php echo或javascript从函数重定向,只能通过函数返回语句重定向,如下面的示例所示:
function process_payment( $order_id ) {
global $woocommerce;
$order = new WC_Order( $order_id );
// Mark as on-hold (we're awaiting the cheque)
$order->update_status('on-hold', __( 'Awaiting cheque payment', 'woocommerce' ));
// Reduce stock levels
$order->reduce_order_stock();
// Remove cart
$woocommerce->cart->empty_cart();
// Return thank you redirect
return array(
'result' => 'success',
'redirect' => $this->get_return_url( $order )
);
}
(示例粘贴自)
因此,对于您的具体问题,我会将您的表单放在单独的文件secure_form.php中。所有需要的数据都可以通过get参数访问:
<!DOCTYPE html>
<html>
<head>
<title>3D Secure Verification</title>
<script language="Javascript">
function OnLoadEvent() { document.form.submit(); }
</script>
</head>
<body OnLoad="OnLoadEvent();">
Invoking 3-D secure form, please wait ...
<form name="form" action="<?php echo rawurldecode( $_GET[ 'acs_url' ] ); ?>" method="post">
<input type="hidden" name="PaReq" value="<?php echo rawurldecode( $_GET[ 'pareq' ] ); ?>">
<input type="hidden" name="TermUrl" value="<?php echo rawurldecode( $_GET[ 'term_url' ] ); ?>">
<input type="hidden" name="MD" value="<?php echo rawurldecode( $_GET[ 'authencity_token' ] ); ?>">
<noscript>
<p>Please click</p><input id="to-asc-button" type="submit">
</noscript>
</form>
</body>
</html>
function process_payment( $order_id ) {
global $woocommerce;
//code to get data using API
if( (strcasecmp('Y', $_SESSION['Centinel_Enrolled']) == 0){
// Set variables and redirect to 3DS check form
$acs_url = rawurlencode( $_SESSION["ACSUrl"] );
$pareq = rawurlencode( $_SESSION["RandomValue"] );
$authencity_token = rawurlencode( 'Data' );
$term_url = rawurlencode( $myWPCallbackUrl );
$url = path_to_secure_form.php . "?acs_url=$acs_url&pareq=$pareq&authencity_token=$authencity_token&term_url=$term_url";
return [
'result' => 'success',
'redirect' => $url
];
}
}
这是一个古老的问题,但对于你们所有正在同一个问题中挣扎的人来说,我希望我的回答会有所帮助。我遇到了完全相同的问题,我就是这样解决的 我不知道在导致这种行为的
process\u payment($order\u id)
函数的后台发生了什么,但您不能通过php echo或javascript从函数重定向,只能通过函数返回语句重定向,如下面的示例所示:
function process_payment( $order_id ) {
global $woocommerce;
$order = new WC_Order( $order_id );
// Mark as on-hold (we're awaiting the cheque)
$order->update_status('on-hold', __( 'Awaiting cheque payment', 'woocommerce' ));
// Reduce stock levels
$order->reduce_order_stock();
// Remove cart
$woocommerce->cart->empty_cart();
// Return thank you redirect
return array(
'result' => 'success',
'redirect' => $this->get_return_url( $order )
);
}
(示例粘贴自)
因此,对于您的具体问题,我会将您的表单放在单独的文件secure_form.php中。所有需要的数据都可以通过get参数访问:
<!DOCTYPE html>
<html>
<head>
<title>3D Secure Verification</title>
<script language="Javascript">
function OnLoadEvent() { document.form.submit(); }
</script>
</head>
<body OnLoad="OnLoadEvent();">
Invoking 3-D secure form, please wait ...
<form name="form" action="<?php echo rawurldecode( $_GET[ 'acs_url' ] ); ?>" method="post">
<input type="hidden" name="PaReq" value="<?php echo rawurldecode( $_GET[ 'pareq' ] ); ?>">
<input type="hidden" name="TermUrl" value="<?php echo rawurldecode( $_GET[ 'term_url' ] ); ?>">
<input type="hidden" name="MD" value="<?php echo rawurldecode( $_GET[ 'authencity_token' ] ); ?>">
<noscript>
<p>Please click</p><input id="to-asc-button" type="submit">
</noscript>
</form>
</body>
</html>
function process_payment( $order_id ) {
global $woocommerce;
//code to get data using API
if( (strcasecmp('Y', $_SESSION['Centinel_Enrolled']) == 0){
// Set variables and redirect to 3DS check form
$acs_url = rawurlencode( $_SESSION["ACSUrl"] );
$pareq = rawurlencode( $_SESSION["RandomValue"] );
$authencity_token = rawurlencode( 'Data' );
$term_url = rawurlencode( $myWPCallbackUrl );
$url = path_to_secure_form.php . "?acs_url=$acs_url&pareq=$pareq&authencity_token=$authencity_token&term_url=$term_url";
return [
'result' => 'success',
'redirect' => $url
];
}
}
表单元素中的jquery代码的用途是什么???@amit-ray自动提交表单而不需要用户单击我已经提交了答案。希望这对您有所帮助。我已经删除了一些语法错误。您现在可以检查它。表单元素中的jquery代码的用途是什么???@amit-ray自动提交表单用户无需单击即可提交表单我已提交了答案。希望这对您有所帮助。我已删除了一些语法错误。您现在可以检查。我想在这里问一些问题。我看到您正在通过GET将所有变量添加到URL。如果您想使用POST获取这些数据,是否可以在支付过程中使用?我想作为我看到你正在通过GET将所有变量添加到URL。如果你想使用POST获取这些数据,是否可以在支付过程中使用?