PHP使用由第三方服务器/ URL设置的会话cookie ID

时间:2018-07-17 15:28:49

标签: php wordpress session-cookies

我正在构建一个WordPress购物车插件,该插件将通过URL绑定到我们的服务器,该URL会生成一个XML页面,然后我必须将其解析为WordPress页面的信息。

服务器包含一个session id (ShoppingCart.SessionID),我需要使用它来帮助存储单击的按钮,然后拉出产品信息并将其添加到购物车中。页面所有者通过button为每个product id提供了一个shortcode (product_id="some#"),并且从服务器提取了该ID以显示产品信息。

按钮的设置方式:

在简码文件中,我正在使用一个函数,并将按钮设置为

<?php
add_shortcode('add_cart_button', 'add_cart_button_handler');

function add_cart_button_handler($atts) {
    extract(shortcode_atts(array(
        'product_id' => '',
    ), $atts));
    return print_add_cart_button_for_product($product_id, $atts);
}

在主插件文件中:

此文件处理按钮的打印以及显示购物车的功能

<?php
session_id();
session_start();

// This function prints the button with its assigned $product_id

function print_add_cart_button_for_product($product_id, $atts = array()) {
    $replacement .= '<form method="POST" class="cart-button-form" style="display:inline" action="">';
    $replacement .= '<input type="hidden" name="bmt_cart_product" value="' . $product_id . '" />';

    $replacement .= '</form>';
    $replacement .= '</div>';
    return $replacement;
}

以下是应该显示购物车/产品信息的功能:

function show_shopping_cart_handler($atts) {
    $output = "";
    $form = '';
    $output .= '<table style="width: 100%;">';

    $output .= '<tr class="cart_item_row">
        <th class="cart_item_name_th">' . (__("Item Name", "wordpress-simple-paypal-shopping-cart")) . '</th><th class="cart_price_th">' . (__("Price", "wordpress-simple-paypal-shopping-cart")) . '</th><th></th>
        </tr>';

# For now, I am using this to print the headers that display the
# ShoppingCart.SessionID="somevalue", but on every button click it changes the value of the session id.

    if (isset($_POST['add_cart_submit'])) {

// The server reads the ID from "&PRODUCTID=product#"
            $id = "&PRODUCTID=" . $_POST['cart_product'];
            $url = "https://secure.bmtmicro.com/cart?CID=2/WP" . $id;
            $options = array(
                'http' => array(
                    'header' => "Content-type: application/x-www-form-urlencoded\r\n",
                    'method' => 'GET',
                    'content' => http_build_query($data)
                )
            );
            //$context = stream_context_create($options);
            $context = stream_context_set_default($options);
            $output .= file_get_contents($url, false, $context);

        }
        print_r(get_headers($url));

       $output .= '</table>';
       return $output;
}

带有示例产品的XML页面的外观

不确定是否需要这样做,但是提供的信息越多越好(对吗?)。发送的产品ID将填充这些字段并继续添加新行,然后我将必要的字段解析到WordPress页面。

<shoppingcart sessionid="88582813">
  <producttable>
   <row number="0">
    <productid>22804</productid>
    <productname>XFree86 CD</productname>
    <quantity>1</quantity>
    <productprice>$15.00</productprice>
    <discount>$0.00</discount>
    <rowtotal>$15.00</rowtotal>
   </row>
  </producttable>
 </shoppingcart>

我对PHP和学习(阅读/研究)非常陌生,但无法找到解决问题的解决方案或步骤。本质上,我认为我的问题应该(简而言之):

如何在不刷新会话的情况下从第三方服务器获取ShoppingCart.SessionID并使用它来填充购物车,以便在单击多个按钮时显示多个产品?另外,是否有更好/更有效的方式来完成我要尝试的工作?

在此先感谢您是否需要补充任何信息!

1 个答案:

答案 0 :(得分:0)

如果有人遇到类似问题:

我的解决方法是将button数据发送到<iframe>,然后将<iframe>设置为width="0" height="0"

示例代码:

<form method="POST" action="URL" target="the_iframe">
  // add some <input> fields data
</form>

<iframe type="hidden" name="the_iframe" width="0" height="0"></iframe>

不确定这是否是最好的方法,但是它可以工作,并且我能够添加一些JQuery来进一步操作(在此之前,我尝试使用AJAX,但是服务器设置为“相同来源”,因此数据不会从其他网址发送。