【问题标题】:Codeigniter session not saving dataCodeigniter 会话不保存数据
【发布时间】:2017-02-22 12:38:42
【问题描述】:

正如标题所说,我正在使用 codeigniter (v2.X),其中包括 angelleye's Paypal library。一开始很难理解,但我设法定期付款。 现在我面临着与此相关的另一个问题。我需要为 SetExpressCheckout() 生成购物车数组并将其保存到用户的数据会话中以在用户登录贝宝帐户后使用它。 这里有一些代码

private function _setPaypalPayment($data)
{

    $cart['items'][0] = array(
        'id' => '1',
        'name' => "Payment ",
        'qty' => '1',
        'price' => (float)$data->money,
    );

    $cart['shopping_cart'] = array(
        'items' => $cart['items'],
        'subtotal' => (float)$data->money,
        'shipping' => 0,
        'handling' => 0,
        'tax' => 0,
    );

    $cart['shopping_cart']['grand_total'] = (float)$data->money;
    $this->session->set_userdata('shopping_cart', $cart);

    $SECFields = array(
        'maxamt' => (float)$data->money,
        'returnurl' => site_url('payment/confirmTrackPayment'),
        'cancelurl' => 'http://xxx',
        'hdrimg' => 'http://xxx/assets/images/logo_750X90.png',
        'logoimg' => 'http://xxx/assets/images/logo_190X60.png',
        'brandname' => 'xxx',
        'surveyquestion' => '',
        'customerservicenumber' => '',
    );

    $Payments = array();
    $Payment = array(
        'amt' => (float)$data->money,
    );

    array_push($Payments, $Payment);

    $PayPalRequestData = array(
        'SECFields' => $SECFields,
        'Payments' => $Payments,
    );

    $PayPalResult = $this->paypal_pro->SetExpressCheckout($PayPalRequestData);

    if(!$this->paypal_pro->APICallSuccessful($PayPalResult['ACK']))
    {
        return null;
    }
    else
    {
        return $PayPalResult['REDIRECTURL'];
    }
}

这部分工作正常,它返回 URL 并且用户可以登录到他的帐户。但是当他返回付款/confirmTrackPayment 并且我付款时

$cart = $this->session->userdata('shopping_cart');

$all = $this->session->all_userdata();

shopping_cart 的信息不存在。我找不到任何答案,请帮助我!

提前致谢

【问题讨论】:

    标签: codeigniter session paypal


    【解决方案1】:

    我不确定(我没有使用 Angeleyes 的经验),但我查看了 github 存储库中的代码,我认为您需要像这样设置 shopping_cart(我也整理了一下):-

    $items = array(
        array(
            'id' => '1',
            'name' => "Payment ",
            'qty' => '1',
            'price' => (float)$data->money,
        ),
    );
    
    $cart = array(
        'items' => $items,
        'subtotal' => (float)$data->money,
        'shipping' => 0,
        'handling' => 0,
        'tax' => 0,
        'grand_total' => (float)$data->money,
    );
    
    $this->session->set_userdata('shopping_cart', $cart);
    

    【讨论】:

    • 谢谢,这与我编写的代码几乎相同。但问题不在于付款,问题在于会话的用户数据。它不是保存信息。如果我在 set_userdata() 之后检索信息,信息就在那里,但是在用户进入他的贝宝帐户并返回指定的返回 url 之后,userdata 中的信息不存在
    • 会话数据丢失有几个原因 - 1. session_start() 在设置会话数据之前没有被调用。 2. session_start() 在获取会话数据之前没有被调用。 3. session_start() 在输出到浏览器后被调用。 4. 重定向到不同的域(可能是子域)。 5. PHP 无法写入你的 tmp 目录。也许尝试查看您的错误日志。
    • 我会选择 4,但在 Angeleyes 中,他重定向到不同的域(贝宝域),那么在重定向到另一个域并返回之前如何保存数据?跨度>
    • 抱歉,我的意思是当用户从贝宝重定向回您的网站时,他们登陆的域与他们开始时所在的域不同。
    • 同一个域,没有主要变化。 'returnurl' => site_url('payment/confirmTrackPayment')
    猜你喜欢
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    相关资源
    最近更新 更多