Projet

Général

Profil

Anomalie #1511 » stop_doublons.txt

git diff - Manuel Her, 13/11/2020 19:07

 
diff --git a/_routes.php b/_routes.php
index 2eb30ec..ac9274d 100644
--- a/_routes.php
+++ b/_routes.php
@@ -261,70 +261,84 @@ $this->post(
) {
$real_contrib = true;
}
-
- //we'll now try to add the relevant cotisation
- if ($post['payment_status'] == 'Completed') {
- /**
- * We will use the following parameters:
- * - mc_gross: the amount
- * - custom: member id
- * - item_number: contribution type id
- *
- * If no member id is provided, we only send to post contribution
- * script, Galette does not handle anonymous contributions
- */
- $args = array(
- 'type' => $post['item_number'],
- 'adh' => $post['custom'],
- 'payment_type' => PaymentType::PAYPAL
- );
- if ($this->preferences->pref_membership_ext != '') {
- $args['ext'] = $this->preferences->pref_membership_ext;
- }
- $contrib = new Contribution($this->zdb, $this->login, $args);
- $contrib->amount = $post['mc_gross'];
-
- //all goes well, we can proceed
- if ($contrib->isCotis() && $real_contrib) {
- // Check that membership fees does not overlap
- $overlap = $contrib->checkOverlap();
- if ($overlap !== true) {
- if ($overlap === false) {
+
+ if ($ph->isProcessed($post))
+ {
+ $ph->setState('already');
+ Analog::log(
+ 'A paypal payment notification has been received, but it is already processed!',
+ Analog::WARNING
+ );
+ }
+ else
+ {
+ //we'll now try to add the relevant cotisation
+ if ($post['payment_status'] == 'Completed') {
+ /**
+ * We will use the following parameters:
+ * - mc_gross: the amount
+ * - custom: member id
+ * - item_number: contribution type id
+ *
+ * If no member id is provided, we only send to post contribution
+ * script, Galette does not handle anonymous contributions
+ */
+ $args = array(
+ 'type' => $post['item_number'],
+ 'adh' => $post['custom'],
+ 'payment_type' => PaymentType::PAYPAL
+ );
+ if ($this->preferences->pref_membership_ext != '') {
+ $args['ext'] = $this->preferences->pref_membership_ext;
+ }
+ $contrib = new Contribution($this->zdb, $this->login, $args);
+ $contrib->amount = $post['mc_gross'];
+
+ //all goes well, we can proceed
+ if ($contrib->isCotis() && $real_contrib) {
+ // Check that membership fees does not overlap
+ $overlap = $contrib->checkOverlap();
+ if ($overlap !== true) {
+ if ($overlap === false) {
+ Analog::log(
+ 'An eror occured checking overlaping fees :(',
+ Analog::ERROR
+ );
+ } else {
+ //method directly return error message
+ Analog::log(
+ 'Error while calculating overlaping fees from paypal payment: ' . $overlap,
+ Analog::ERROR
+ );
+ }
+ }
+ }
+
+ if ($real_contrib) {
+ $store = $contrib->store();
+ if ($store === true) {
+ $ph->setState('processed');
+ //contribution has been stored :)
Analog::log(
- 'An eror occured checking overlaping fees :(',
- Analog::ERROR
+ 'Paypal payment has been successfully registered as a contribution',
+ Analog::INFO
);
} else {
- //method directly return error message
+ //something went wrong :'(
+ $ph->setState('errorstoring');
Analog::log(
- 'Error while calculating overlaping fees from paypal payment: ' . $overlap,
+ 'An error occured while storing a new contribution from Paypal payment',
Analog::ERROR
);
}
}
+ } else {
+ $ph->setState('notcompleted');
+ Analog::log(
+ 'A paypal payment notification has been received, but is not completed!',
+ Analog::WARNING
+ );
}
-
- if ($real_contrib) {
- $store = $contrib->store();
- if ($store === true) {
- //contribution has been stored :)
- Analog::log(
- 'Paypal payment has been successfully registered as a contribution',
- Analog::INFO
- );
- } else {
- //something went wrong :'(
- Analog::log(
- 'An error occured while storing a new contribution from Paypal payment',
- Analog::ERROR
- );
- }
- }
- } else {
- Analog::log(
- 'A paypal payment notification has been received, but is not completed!',
- Analog::WARNING
- );
}
} else {
Analog::log(
diff --git a/lib/GalettePaypal/PaypalHistory.php b/lib/GalettePaypal/PaypalHistory.php
index 0cab2b7..c2b2810 100644
--- a/lib/GalettePaypal/PaypalHistory.php
+++ b/lib/GalettePaypal/PaypalHistory.php
@@ -63,6 +63,8 @@ class PaypalHistory extends History
public const TABLE = 'history';
public const PK = 'id_paypal';
+ private $_id;
+
protected $_types = array(
'text',
'date',
@@ -110,13 +112,18 @@ class PaypalHistory extends History
'history_date' => date('Y-m-d H:i:s'),
'amount' => $request['mc_gross'],
'comments' => $request['item_name'],
- 'request' => serialize($request)
+ 'request' => serialize($request),
+ 'signature' => $request['verify_sign'],
+ 'state' => ''
);
+ //ALTER TABLE `galetteT1_paypal_history` ADD `signature` VARCHAR(255) NOT NULL AFTER `id_paypal`;
+ //ALTER TABLE `galetteT1_paypal_history` ADD `state` VARCHAR(20) NOT NULL AFTER `signature`;
$insert = $this->zdb->insert($this->getTableName());
$insert->values($values);
$this->zdb->execute($insert);
-
+ $this->_id = $this->zdb->driver->getLastGeneratedValue();
+
Analog::log(
'An entry has been added in paypal history',
Analog::INFO
@@ -216,4 +223,32 @@ class PaypalHistory extends History
return $order;
}
+
+ public function isProcessed($request)
+ {
+ $select = $this->zdb->select($this->getTableName());
+ $select->where([
+ 'signature' => $request['verify_sign'],
+ 'state' => 'processed'
+ ]);
+ $results = $this->zdb->execute($select);
+ return count($results)>0;
+ }
+
+ public function setState($state)
+ {
+ try {
+ $update = $this->zdb->update($this->getTableName());
+ $update->set(['state' => $state])
+ ->where(['id_paypal' => $this->_id]);
+ $this->zdb->execute($update);
+ }
+ catch (\Exception $e) {
+ Analog::log(
+ 'An error occurred when updating state field | ' . $e->getMessage(),
+ Analog::ERROR
+ );
+ }
+ }
+
}
    (1-1/1)