Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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
Php 如何从wordpress中的自定义网关中的process_payment功能重定向?_Php_Wordpress_Post_Woocommerce_Payment Gateway - Fatal编程技术网

Php 如何从wordpress中的自定义网关中的process_payment功能重定向?

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

我正在尝试开发一个自定义网关,在那里我需要获取订单信息,如价值、信用卡号码、卡所有者姓名、地址等。获取此信息后,我将使用Centinel 3D Secure提供的API发送请求。如果成功,他们将返回一个信用卡银行的url以及一些其他信息,我将发布到银行url

然后,银行将使用表单将数据发布到我的回调URL。然而,我似乎无法让它发挥作用。这是我的代码示例:

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获取这些数据,是否可以在支付过程中使用?