2017-02-22 87 views
0

как заголовок сказал, что я работаю с codeigniter (v2.X), и я включаю angelleye's Paypal library. Сначала было трудно понять, но мне удается делать повторяющиеся платежи. Теперь я столкнулся с другим вопросом относительно этого. Мне нужно создать массив корзины покупок для SetExpressCheckout() и сохранить его в сеансе данных пользователя, чтобы использовать его после входа пользователя в учетную запись PayPal. Здесь идет некоторый кодСеанс Codeigniter не сохраняет данные

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 нет. Я не могу найти ответа на них, пожалуйста, помогите мне!

Заранее спасибо

ответ

0

Я не уверен (я не имею никакого опыта 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); 
+0

Спасибо, это почти то же самое, что и код, который я сделал. Но проблема не в платеже, проблема в пользовательских данных сеанса. Это не сохранение информации. Если я получаю информацию сразу после set_userdata(), информация находится там, но после того, как пользователь заходит в свою учетную запись PayPal и возвращается к указанному URL-адресу возврата, информация внутри userdata отсутствует. –

+0

Существует несколько причин, по которым ваши данные сеанса будет отсутствовать - 1. session_start() не вызывался перед установкой данных сеанса. 2. session_start() не вызывался перед получением данных сеанса. 3. session_start() вызывается после того, как что-то было выведено в браузер. 4. Переадресация переместилась в другой домен (возможно, поддомен). 5. PHP не может писать в ваш каталог tmp. Возможно, попробуйте найти в своих журналах ошибок. –

+0

Я поеду с 4, но в Angeleyes он перенаправляется в другой домен (домен PayPal), так как я могу сделать, чтобы сохранить данные перед перенаправлением в другой домен и обратно? –