3

我正在为 Skipjack 支付网关开发一个插件。该网关使用 skipjack 提供的 html 表单,通过 HTTP POST 将订单信息传递到他们的自定义支付表单。我创建了 process_payment() 函数,该函数将此表单回显到浏览器并通过 javascript 自动提交。此表单在 Chrome 和 Firefox 中提交成功,但在 Internet Explorer 中提交失败。

这是 process_payment() 函数:

    function process_payment( $order_id ) {
        global $woocommerce;

        $order = new WC_Order( $order_id );

                // Reduce stock levels
                $order->reduce_order_stock();

                // Clear cart
                $woocommerce->cart->empty_cart();

                //Convert countries to codes provided by Skipjack
                $BillingCountryCode = '';
                $ShippingCountryCode = '';
                if ($order->billing_country === 'US') {
                    $BillingCountryCode = '840';
                } else if ($order->billing_country === 'Canada') {
                    $BillingCountryCode = '124';
                }
                if ($order->shipping_country === 'US') {
                    $ShippingCountryCode = '840';
                } else if ($order->shipping_country === 'Canada') {
                    $ShippingCountryCode = '124';
                }

                $url = 'https://payments.skipjack.com/FormBuilder/VPOS.aspx';

                //build form to pass data to Skipjack
                echo'<BR><form name="Generator" method="post" action="' . $url . '">';
                echo'<input type="hidden" name="url" value="' . $url . '">';
                echo'<input type="hidden" name="VposContent" value="' . $this->settings['skipjack_vpos_code'] . '">';
                echo'<input type="submit" name="DonateButton" class="button alt" style="font-size:25px;" align="center" value="Click Here to Process Payment and Complete Order" >';
                echo'<input type="hidden" name="sjname" value="' . $order->billing_first_name . ' ' . $order->billing_last_name . '">';
                echo'<input type="hidden" name="streetaddress" value="' . $order->billing_address_1 . '">';
                echo'<input type="hidden" name="streetaddress2" value="' . $order->billing_address_2 . '">';
                echo'<input type="hidden" name="city" value="' . $order->billing_city . '">';
                echo'<input type="hidden" name="state" value="' . $order->billing_state . '">';
                echo'<input type="hidden" name="zipcode" value="' . $order->billing_postcode . '">';
                echo'<input type="hidden" name="country" value="' . $BillingCountryCode . '">';                     
                echo'<input type="hidden" name="email" value="' . $order->billing_email . '">';
                echo'<input type="hidden" name="shiptostreetaddress" value="' . $order->shipping_address_1 . '">';
                echo'<input type="hidden" name="shiptostreetaddress2" value="' . $order->shipping_address_2 . '">';
                echo'<input type="hidden" name="shiptocity" value="' . $order->shipping_city . '">';
                echo'<input type="hidden" name="shiptostate" value="' . $order->shipping_state . '">';
                echo'<input type="hidden" name="shiptozipcode" value="' . $order->shipping_postcode . '">';
                echo'<input type="hidden" name="shiptocountry" value="' . $ShippingCountryCode . '">';                     
                echo'<input type="hidden" name="shiptophone" value="' . $order->billing_phone . '">';
                echo'<input type="hidden" name="ordernumber" value="' . $order->id . '">';
                echo'<input type="hidden" name="transactionamount" value="' . $order->order_total . '">';
                echo'</form>'; 

//                //auto-submit above form
//                echo'<script>';
//                echo'document.Generator.submit();';
//                echo'return true;';
//                echo'</script>';

                die;
//               return;
    }

目前,当我在 IE 中运行此插件时,提交表单时(无论是手动还是通过 javascript),结帐页面只会刷新一条消息,表明您的会话已过期但未提交表单。当我在 IE 中查看源代码时,表单没有显示,即使它明显显示在页面上。但是它在 Chrome 和 FireFox 中可以正常工作。

正如您在上面的代码中看到的那样,我只是使用 echo 将表单输出到浏览器以作为 html 处理。有一个更好的方法吗?我还使用 die 来停止执行 php,因为当我使用 return 时,我收到了一条失败消息。由于浏览器需要重定向到位于https://payments.skipjack.com/FormBuilder/VPOS.aspx的skipjack 表单(存储在变量 $url 中),我应该返回什么?

4

0 回答 0