Retorno automático do PagSeguro atualizando errado
Olá,
Eu sou da galera do front-end, mas fui me arriscar a editar um arquivo .php e tive problemas, busco ajuda..
Meu site vende planos, originalmente é o plano com pagamento mensal e o plano com pagamento anual. O Site já vem integrado PagSeguro, com histórico de pagamento, tudo funciona!
Porém, fui inventar de alterar o pagamento anual para semestral e adicionar pagamento trimestral. Ficando: mensal, trimestral e semestral.
Consegui toda a parte do pagamento, cobra o valor que eu quero, atualiza a conta após a compra ser aprovada, etc..
O problema: Se eu escolher pagamento trimestral ou semestral, serão adicionados apenas 30 dias na conta do usuário. em vez de 90 ou 180.
Se poderem me ajudar ficarei extremamente grato.
o código:
Eu sou da galera do front-end, mas fui me arriscar a editar um arquivo .php e tive problemas, busco ajuda..
Meu site vende planos, originalmente é o plano com pagamento mensal e o plano com pagamento anual. O Site já vem integrado PagSeguro, com histórico de pagamento, tudo funciona!
Porém, fui inventar de alterar o pagamento anual para semestral e adicionar pagamento trimestral. Ficando: mensal, trimestral e semestral.
Consegui toda a parte do pagamento, cobra o valor que eu quero, atualiza a conta após a compra ser aprovada, etc..
O problema: Se eu escolher pagamento trimestral ou semestral, serão adicionados apenas 30 dias na conta do usuário. em vez de 90 ou 180.
Se poderem me ajudar ficarei extremamente grato.
o código:
public function complete(){ if(isset($_POST['notificationCode']) && isset($_POST['notificationType'])){ $code = (isset($_POST['notificationCode']) && trim($_POST['notificationCode']) !== "" ? trim($_POST['notificationCode']) : null); $type = (isset($_POST['notificationType']) && trim($_POST['notificationType']) !== "" ? trim($_POST['notificationType']) : null); if ($code && $type) { $notificationType = new PagSeguroNotificationType($type); $strType = $notificationType->getTypeFromValue(); switch ($strType) { case 'TRANSACTION': $credentials = PagSeguroConfig::getAccountCredentials(); try { $transaction = PagSeguroNotificationService::checkTransaction($credentials, $code); $ids = $transaction->getItems()[0]->getId(); $reference = $transaction->getReference(); $uid = (int)str_replace("REF", "", $reference); $package = $this->model->get("*", $this->tb_packages, "ids = '".$ids."' AND status = 1"); $amount_monthly = $package->price_monthly; $amount_tri = $package->price_tri*3; $amount_annually = $package->price_annually*12; $plan = 1; if($amount_tri == $transaction->getGrossAmount()){ $plan = 2; } elseif($amount_annually == $transaction->getGrossAmount()){ $plan = 3; } $paymentId = get('paymentId'); $PayerID = get('PayerID'); $transaction_id = $transaction->getCode(); $checkPaid = $this->model->get("*", $this->tb_payment_history, "transaction_id = '".$transaction_id."'"); if(!empty($package) && empty($checkPaid) && $transaction->getStatus()->getValue() == 3){ $data = array( 'ids' => ids(), 'uid' => $uid, 'package' => $package->id, 'type' => 'pagseguro_charge', 'transaction_id' => $transaction_id, 'amount' => $transaction->getGrossAmount(), 'plan' => $plan, 'status' => 1, 'created' => NOW ); $this->db->insert($this->tb_payment_history, $data); $this->update_package($package, $plan, $uid); echo "Sucesss"; }else{ die("Invalid notification parameters. Please try to again."); } } catch (PagSeguroServiceException $e) { die($e->getMessage()); } break; default: die("Invalid notification parameters. Please try to again."); } } else { die("Invalid notification parameters. Please try to again."); } }else{ //redirect(cn("dashboard")); } } public function update_package($package_new, $plan, $uid){ $user = $this->model->get("*", $this->tb_users, "id = '".$uid."'"); if(!empty($user)){ $package_old = $this->model->get("*", $this->tb_packages, "id = '".$user->package."'"); $package_id = $package_new->id; $new_days = 30; if($plan == 2){ $new_days = 90; } if($plan == 3){ $new_days = 180; } if(!empty($package_old)){ if(strtotime(NOW) < strtotime($user->expiration_date)){ $date_now = date("Y-m-d", strtotime(NOW)); $date_expiration = date("Y-m-d", strtotime($user->expiration_date)); $diff = abs(strtotime($date_expiration) - strtotime($date_now)); $left_days = floor($diff/86400); if($plan == 2){ $new_days = 90; $day_added = round(($package_old->price_tri/$package_new->price_tri)*$left_days); }if($plan == 3){ $new_days = 180; $day_added = round(($package_old->price_annually/$package_new->price_annually)*$left_days); } else{ $new_days = 30; $day_added = round(($package_old->price_monthly/$package_new->price_monthly)*$left_days); } $total_day = $new_days + $day_added; $expiration_date = date('Y-m-d', strtotime(NOW." +".$total_day." days")); }else{ $expiration_date = date('Y-m-d', strtotime(NOW." +".$new_days." days")); } }else{ $expiration_date = date('Y-m-d', strtotime(NOW." +".$new_days." days")); } $data = array( "package" => $package_id, "expiration_date" => $expiration_date ); $this->db->update($this->tb_users, $data, "id = '".$uid."'"); } } public function process(){ $ids = segment(4); $plan = segment(5); $package = $this->model->get("*", $this->tb_packages, "ids = '".$ids."' AND status = 1"); $user = $this->model->get("*", $this->tb_users, "id = '".session("uid")."' AND status = 1"); if(!empty($package) && !empty($user)){ $amount = $package->price_monthly; if($plan == 2){ $amount = $package->price_tri*3; } if($plan == 3){ $amount = $package->price_annually*6; } // Instantiate a new payment request $paymentRequest = new PagSeguroPaymentRequest(); // Set the currency $paymentRequest->setCurrency("BRL"); // Add an item for this payment request $paymentRequest->addItem($package->ids, $package->name, 1, number_format($amount,2)); // Set a reference code for this payment request. It is useful to identify this payment // in future notifications. $paymentRequest->setReference("REF".session("uid")); // Set your customer information. $paymentRequest->setSender( $user->fullname." customer", $user->email ); // Set the url used by PagSeguro to redirect user after checkout process ends $paymentRequest->setRedirectUrl(cn("payment/pagseguro/complete")); // Another way to set checkout parameters $paymentRequest->addParameter('notificationURL', cn("payment/pagseguro/complete")); $paymentRequest->addIndexedParameter('itemId', $package->ids, 3); $paymentRequest->addIndexedParameter('itemDescription', $package->name, 3); $paymentRequest->addIndexedParameter('itemQuantity', '1', 3); $paymentRequest->addIndexedParameter('itemAmount', number_format($amount,2), 3);
Pedro Buck
Curtidas 0