我正在为 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 中),我应该返回什么?