@@ -92,7 +92,6 @@ class ProducerController extends BackendController | |||
{ | |||
$request = Yii::$app->request; | |||
$model = $this->findModel(GlobalParam::getCurrentProducerId()); | |||
$model->secret_key_payplug = $model->getSecretKeyPayplug() ; | |||
$logoFilenameOld = $model->logo; | |||
$photoFilenameOld = $model->photo; | |||
if (strlen($model->option_dashboard_date_start)) { | |||
@@ -135,7 +134,12 @@ class ProducerController extends BackendController | |||
$model->save(); | |||
} | |||
$model->saveSecretKeyPayplug() ; | |||
$model->savePrivateKeyApiStripe() ; | |||
$model->savePrivateKeyEndpointStripe() ; | |||
$model->option_stripe_private_key = ''; | |||
$model->option_stripe_endpoint_secret = ''; | |||
$model->save(); | |||
Yii::$app->getSession()->setFlash('success', 'Paramètres mis à jour.'); | |||
return $this->redirect(['update', 'id' => $model->id, 'edit_ok' => true]); |
@@ -1,125 +0,0 @@ | |||
<?php | |||
/** | |||
* Copyright distrib (2018) | |||
* | |||
* contact@opendistrib.net | |||
* | |||
* Ce logiciel est un programme informatique servant à aider les producteurs | |||
* à distribuer leur production en circuits courts. | |||
* | |||
* Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||
* respectant les principes de diffusion des logiciels libres. Vous pouvez | |||
* utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||
* de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||
* sur le site "http://www.cecill.info". | |||
* | |||
* En contrepartie de l'accessibilité au code source et des droits de copie, | |||
* de modification et de redistribution accordés par cette licence, il n'est | |||
* offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||
* seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||
* titulaire des droits patrimoniaux et les concédants successifs. | |||
* | |||
* A cet égard l'attention de l'utilisateur est attirée sur les risques | |||
* associés au chargement, à l'utilisation, à la modification et/ou au | |||
* développement et à la reproduction du logiciel par l'utilisateur étant | |||
* donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||
* manipuler et qui le réserve donc à des développeurs et des professionnels | |||
* avertis possédant des connaissances informatiques approfondies. Les | |||
* utilisateurs sont donc invités à charger et tester l'adéquation du | |||
* logiciel à leurs besoins dans des conditions permettant d'assurer la | |||
* sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||
* à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||
* | |||
* Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||
* pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||
* termes. | |||
*/ | |||
namespace backend\controllers; | |||
use common\helpers\GlobalParam; | |||
use common\helpers\MeanPayment; | |||
use common\models\CreditHistory; | |||
use yii\filters\VerbFilter; | |||
class StripeController extends BackendController | |||
{ | |||
public function behaviors() | |||
{ | |||
return [ | |||
/*'access' => [ | |||
'class' => AccessControl::className(), | |||
'rules' => [ | |||
[ | |||
'allow' => true, | |||
'roles' => ['?'], | |||
], | |||
], | |||
],*/ | |||
'verbs' => [ | |||
'class' => VerbFilter::className(), | |||
'actions' => [ | |||
'verification' => ['post'], | |||
], | |||
] | |||
]; | |||
} | |||
public function beforeAction($action) | |||
{ | |||
$this->enableCsrfValidation = false; | |||
return parent::beforeAction($action); | |||
} | |||
public function actionVerification() | |||
{ | |||
// This is your Stripe CLI webhook secret for testing your endpoint locally. | |||
$endpoint_secret = 'whsec_2Prm8JYcikDsN0Bz2MuWrHKSOjcTIb8v'; | |||
$payload = @file_get_contents('php://input'); | |||
$sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE']; | |||
$event = null; | |||
try { | |||
$event = \Stripe\Webhook::constructEvent( | |||
$payload, | |||
$sig_header, | |||
$endpoint_secret | |||
); | |||
} catch (\UnexpectedValueException $e) { | |||
// Invalid payload | |||
http_response_code(400); | |||
exit(); | |||
} catch (\Stripe\Exception\SignatureVerificationException $e) { | |||
// Invalid signature | |||
http_response_code(400); | |||
exit(); | |||
} | |||
// Handle the event | |||
switch ($event->type) { | |||
case 'charge.succeeded': | |||
$paymentIntent = $event->data->object; | |||
$creditHistory = new CreditHistory; | |||
$creditHistory->id_user = 1; | |||
$creditHistory->id_user_action = 1; | |||
$creditHistory->id_producer = 1; | |||
$creditHistory->type = CreditHistory::TYPE_CREDIT ; | |||
$creditHistory->comment = null ; | |||
$creditHistory->amount = $paymentIntent->amount / 100 ; | |||
$creditHistory->mean_payment = MeanPayment::CREDIT_CARD ; | |||
$creditHistory->save(); | |||
break; | |||
// ... handle other event types | |||
default: | |||
echo 'Received unknown event type ' . $event->type; | |||
} | |||
http_response_code(200); | |||
} | |||
} |
@@ -362,7 +362,16 @@ $this->addBreadcrumb($this->getTitle()) ; | |||
<?= $form->field($model, 'credit_limit',[ | |||
'template' => '{label}<div class="input-group">{input}<span class="input-group-addon"><span class="glyphicon glyphicon-euro"></span></span></div>{hint}', | |||
])->hint('Limite de crédit que l\'utilisateur ne pourra pas dépasser. Laisser vide pour permettre un crédit négatif et infini.'); ?> | |||
<?= $form->field($model, 'online_payment') | |||
->dropDownList([ | |||
0 => 'Non', | |||
1 => 'Oui', | |||
], []); ?> | |||
<?= $form->field($model, 'option_stripe_public_key')->textInput(); ?> | |||
<?= $form->field($model, 'option_stripe_private_key')->textInput(); ?> | |||
<?= $form->field($model, 'option_stripe_endpoint_secret')->textInput(); ?> | |||
</div> | |||
</div> | |||
@@ -2,5 +2,5 @@ bootstrap.php | |||
main-local.php | |||
params-local.php | |||
payplug/*.key | |||
stripe/*.key | |||
mailjet/*.key |
@@ -116,12 +116,7 @@ return [ | |||
'enableStrictParsing' => false, | |||
'rules' => [ | |||
], | |||
], | |||
'stripe' => [ | |||
'class' => 'ruskid\stripe\Stripe', | |||
'publicKey' => "pk_test_51IOR6uECzPeOSTMZS8sUzKYnTAMXpdfcXCtIzXHnh9TWJvkYsd1nP2OhhnefAnCnmck8i0xACU6OOhohAFHL2VAa004DxnLOSH", | |||
'privateKey' => "sk_test_51IOR6uECzPeOSTMZmuDYYFdX7SyzCYHdEuyi1YAKBOFgrRNDOhoe6kaliKFmeI0XOWlTRxnwx0aw7PbuNlonGjeA00dlyCRss7", | |||
], | |||
] | |||
], | |||
'language' => 'fr-FR', | |||
]; |
@@ -0,0 +1,49 @@ | |||
<?php | |||
/** | |||
Copyright distrib (2018) | |||
contact@opendistrib.net | |||
Ce logiciel est un programme informatique servant à aider les producteurs | |||
à distribuer leur production en circuits courts. | |||
Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||
respectant les principes de diffusion des logiciels libres. Vous pouvez | |||
utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||
de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||
sur le site "http://www.cecill.info". | |||
En contrepartie de l'accessibilité au code source et des droits de copie, | |||
de modification et de redistribution accordés par cette licence, il n'est | |||
offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||
seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||
titulaire des droits patrimoniaux et les concédants successifs. | |||
A cet égard l'attention de l'utilisateur est attirée sur les risques | |||
associés au chargement, à l'utilisation, à la modification et/ou au | |||
développement et à la reproduction du logiciel par l'utilisateur étant | |||
donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||
manipuler et qui le réserve donc à des développeurs et des professionnels | |||
avertis possédant des connaissances informatiques approfondies. Les | |||
utilisateurs sont donc invités à charger et tester l'adéquation du | |||
logiciel à leurs besoins dans des conditions permettant d'assurer la | |||
sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||
à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||
Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||
pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||
termes. | |||
*/ | |||
?> | |||
<p>Bonjour <?= Html::encode($user->name); ?>,</p> | |||
<p>Nous vous confirmons que votre compte vient d'être crédité de <strong><?= number_format($amount, 2) ?> €</strong>. | |||
<p>Votre compte est désormais à <strong><?= Price::format($userProducer->credit); ?></strong><br /> | |||
<a href="<?= Yii::$app->urlManagerProducer->createAbsoluteUrl(['credit/history','slug_producer' => $producer->slug]) ?>">Cliquez ici</a> pour voir l'historique de votre crédit.</p> | |||
À bientôt,<br /> | |||
<?= Html::encode($producer->name); ?> |
@@ -0,0 +1,48 @@ | |||
<?php | |||
/** | |||
Copyright distrib (2018) | |||
contact@opendistrib.net | |||
Ce logiciel est un programme informatique servant à aider les producteurs | |||
à distribuer leur production en circuits courts. | |||
Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||
respectant les principes de diffusion des logiciels libres. Vous pouvez | |||
utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||
de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||
sur le site "http://www.cecill.info". | |||
En contrepartie de l'accessibilité au code source et des droits de copie, | |||
de modification et de redistribution accordés par cette licence, il n'est | |||
offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||
seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||
titulaire des droits patrimoniaux et les concédants successifs. | |||
A cet égard l'attention de l'utilisateur est attirée sur les risques | |||
associés au chargement, à l'utilisation, à la modification et/ou au | |||
développement et à la reproduction du logiciel par l'utilisateur étant | |||
donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||
manipuler et qui le réserve donc à des développeurs et des professionnels | |||
avertis possédant des connaissances informatiques approfondies. Les | |||
utilisateurs sont donc invités à charger et tester l'adéquation du | |||
logiciel à leurs besoins dans des conditions permettant d'assurer la | |||
sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||
à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||
Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||
pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||
termes. | |||
*/ | |||
?> | |||
Bonjour <?= Html::encode($user->name); ?>, | |||
Nous vous confirmons que votre compte vient d'être crédité de <?= Price::format($amount, 2) ?> €. | |||
Votre compte est désormais à <?= Price::format($userProducer->credit); ?>. | |||
À bientôt, | |||
<?= Html::encode($producer->name); ?> |
@@ -28,7 +28,6 @@ | |||
"mailjet/mailjet-apiv3-php": "^1.4", | |||
"linslin/yii2-curl": "*", | |||
"yiisoft/yii2-jui": "^2.0", | |||
"ruskid/yii2-stripe": "dev-master", | |||
"bower-asset/jquery": "^3.6", | |||
"yidas/yii2-bower-asset": "2.0.13.1", | |||
"stripe/stripe-php": "^7.95" |
@@ -4,7 +4,7 @@ | |||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", | |||
"This file is @generated automatically" | |||
], | |||
"content-hash": "56933f9cf162d6c0fab8cd420d356923", | |||
"content-hash": "bbfd502bb99ed522c5f181c9e809790f", | |||
"packages": [ | |||
{ | |||
"name": "2amigos/yii2-chartjs-widget", | |||
@@ -183,12 +183,12 @@ | |||
"version": "v2.1.6", | |||
"source": { | |||
"type": "git", | |||
"url": "git@github.com:nnnick/Chart.js.git", | |||
"url": "https://github.com/chartjs/Chart.js.git", | |||
"reference": "07662b158d829f395b2c97d732e60599b8b5c4e4" | |||
}, | |||
"dist": { | |||
"type": "zip", | |||
"url": "https://api.github.com/repos/nnnick/Chart.js/zipball/07662b158d829f395b2c97d732e60599b8b5c4e4", | |||
"url": "https://api.github.com/repos/chartjs/Chart.js/zipball/07662b158d829f395b2c97d732e60599b8b5c4e4", | |||
"reference": "07662b158d829f395b2c97d732e60599b8b5c4e4" | |||
}, | |||
"type": "bower-asset", | |||
@@ -217,24 +217,6 @@ | |||
"MIT" | |||
] | |||
}, | |||
{ | |||
"name": "bower-asset/jquery.payment", | |||
"version": "v3.0.0", | |||
"source": { | |||
"type": "git", | |||
"url": "https://github.com/stripe-archive/jquery.payment.git", | |||
"reference": "f0e303b3769e9bbbc22ca2eb4a3e97f64745ab33" | |||
}, | |||
"dist": { | |||
"type": "zip", | |||
"url": "https://api.github.com/repos/stripe-archive/jquery.payment/zipball/f0e303b3769e9bbbc22ca2eb4a3e97f64745ab33", | |||
"reference": "f0e303b3769e9bbbc22ca2eb4a3e97f64745ab33" | |||
}, | |||
"require": { | |||
"bower-asset/jquery": ">=1.5" | |||
}, | |||
"type": "bower-asset" | |||
}, | |||
{ | |||
"name": "bower-asset/leaflet", | |||
"version": "v1.7.1", | |||
@@ -1519,53 +1501,6 @@ | |||
}, | |||
"time": "2017-01-11T14:05:47+00:00" | |||
}, | |||
{ | |||
"name": "ruskid/yii2-stripe", | |||
"version": "dev-master", | |||
"source": { | |||
"type": "git", | |||
"url": "https://github.com/ruskid/yii2-stripe.git", | |||
"reference": "b563afca491e169e41b900d232e9c08a92c6b2ea" | |||
}, | |||
"dist": { | |||
"type": "zip", | |||
"url": "https://api.github.com/repos/ruskid/yii2-stripe/zipball/b563afca491e169e41b900d232e9c08a92c6b2ea", | |||
"reference": "b563afca491e169e41b900d232e9c08a92c6b2ea", | |||
"shasum": "" | |||
}, | |||
"require": { | |||
"bower-asset/jquery.payment": "*", | |||
"yiisoft/yii2": "*" | |||
}, | |||
"default-branch": true, | |||
"type": "library", | |||
"autoload": { | |||
"psr-4": { | |||
"ruskid\\stripe\\": "" | |||
} | |||
}, | |||
"notification-url": "https://packagist.org/downloads/", | |||
"license": [ | |||
"GPL-3.0-or-later" | |||
], | |||
"authors": [ | |||
{ | |||
"name": "Victor Demin", | |||
"email": "demmbox@gmail.com" | |||
} | |||
], | |||
"description": "Yii2 Stripe Wrapper", | |||
"homepage": "https://github.com/ruskid/yii2-stripe", | |||
"keywords": [ | |||
"stripe", | |||
"yii2" | |||
], | |||
"support": { | |||
"issues": "https://github.com/ruskid/yii2-stripe/issues", | |||
"source": "https://github.com/ruskid/yii2-stripe/tree/master" | |||
}, | |||
"time": "2019-09-04T16:17:12+00:00" | |||
}, | |||
{ | |||
"name": "setasign/fpdi", | |||
"version": "v2.3.6", | |||
@@ -6105,8 +6040,7 @@ | |||
"stability-flags": { | |||
"kartik-v/yii2-mpdf": 20, | |||
"c006/yii2-paypal-ipn": 20, | |||
"yurkinx/yii2-image": 20, | |||
"ruskid/yii2-stripe": 20 | |||
"yurkinx/yii2-image": 20 | |||
}, | |||
"prefer-stable": false, | |||
"prefer-lowest": false, |
@@ -0,0 +1,43 @@ | |||
<?php | |||
use yii\db\Migration; | |||
use yii\db\Schema; | |||
/** | |||
* Class m210914_132350_add_options_online_payment | |||
*/ | |||
class m210914_132350_add_options_online_payment extends Migration | |||
{ | |||
/** | |||
* {@inheritdoc} | |||
*/ | |||
public function safeUp() | |||
{ | |||
$this->addColumn('producer', 'option_stripe_public_key', Schema::TYPE_STRING); | |||
$this->addColumn('producer', 'option_stripe_private_key', Schema::TYPE_STRING); | |||
} | |||
/** | |||
* {@inheritdoc} | |||
*/ | |||
public function safeDown() | |||
{ | |||
$this->dropColumn('producer', 'option_stripe_public_key'); | |||
$this->dropColumn('producer', 'option_stripe_private_key'); | |||
} | |||
/* | |||
// Use up()/down() to run migration code without a transaction. | |||
public function up() | |||
{ | |||
} | |||
public function down() | |||
{ | |||
echo "m210914_132350_add_options_online_payment cannot be reverted.\n"; | |||
return false; | |||
} | |||
*/ | |||
} |
@@ -0,0 +1,41 @@ | |||
<?php | |||
use yii\db\Migration; | |||
use yii\db\Schema; | |||
/** | |||
* Class m210915_064446_add_option_stripe_endpoint | |||
*/ | |||
class m210915_064446_add_option_stripe_endpoint extends Migration | |||
{ | |||
/** | |||
* {@inheritdoc} | |||
*/ | |||
public function safeUp() | |||
{ | |||
$this->addColumn('producer', 'option_stripe_endpoint_secret', Schema::TYPE_STRING); | |||
} | |||
/** | |||
* {@inheritdoc} | |||
*/ | |||
public function safeDown() | |||
{ | |||
$this->dropColumn('producer', 'option_stripe_endpoint_secret'); | |||
} | |||
/* | |||
// Use up()/down() to run migration code without a transaction. | |||
public function up() | |||
{ | |||
} | |||
public function down() | |||
{ | |||
echo "m210915_064446_add_option_stripe_endpoint cannot be reverted.\n"; | |||
return false; | |||
} | |||
*/ | |||
} |
@@ -1,115 +1,261 @@ | |||
<?php | |||
/** | |||
Copyright distrib (2018) | |||
contact@opendistrib.net | |||
Ce logiciel est un programme informatique servant à aider les producteurs | |||
à distribuer leur production en circuits courts. | |||
Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||
respectant les principes de diffusion des logiciels libres. Vous pouvez | |||
utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||
de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||
sur le site "http://www.cecill.info". | |||
En contrepartie de l'accessibilité au code source et des droits de copie, | |||
de modification et de redistribution accordés par cette licence, il n'est | |||
offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||
seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||
titulaire des droits patrimoniaux et les concédants successifs. | |||
A cet égard l'attention de l'utilisateur est attirée sur les risques | |||
associés au chargement, à l'utilisation, à la modification et/ou au | |||
développement et à la reproduction du logiciel par l'utilisateur étant | |||
donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||
manipuler et qui le réserve donc à des développeurs et des professionnels | |||
avertis possédant des connaissances informatiques approfondies. Les | |||
utilisateurs sont donc invités à charger et tester l'adéquation du | |||
logiciel à leurs besoins dans des conditions permettant d'assurer la | |||
sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||
à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||
Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||
pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||
termes. | |||
*/ | |||
/** | |||
* Copyright distrib (2018) | |||
* | |||
* contact@opendistrib.net | |||
* | |||
* Ce logiciel est un programme informatique servant à aider les producteurs | |||
* à distribuer leur production en circuits courts. | |||
* | |||
* Ce logiciel est régi par la licence CeCILL soumise au droit français et | |||
* respectant les principes de diffusion des logiciels libres. Vous pouvez | |||
* utiliser, modifier et/ou redistribuer ce programme sous les conditions | |||
* de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA | |||
* sur le site "http://www.cecill.info". | |||
* | |||
* En contrepartie de l'accessibilité au code source et des droits de copie, | |||
* de modification et de redistribution accordés par cette licence, il n'est | |||
* offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, | |||
* seule une responsabilité restreinte pèse sur l'auteur du programme, le | |||
* titulaire des droits patrimoniaux et les concédants successifs. | |||
* | |||
* A cet égard l'attention de l'utilisateur est attirée sur les risques | |||
* associés au chargement, à l'utilisation, à la modification et/ou au | |||
* développement et à la reproduction du logiciel par l'utilisateur étant | |||
* donné sa spécificité de logiciel libre, qui peut le rendre complexe à | |||
* manipuler et qui le réserve donc à des développeurs et des professionnels | |||
* avertis possédant des connaissances informatiques approfondies. Les | |||
* utilisateurs sont donc invités à charger et tester l'adéquation du | |||
* logiciel à leurs besoins dans des conditions permettant d'assurer la | |||
* sécurité de leurs systèmes et ou de leurs données et, plus généralement, | |||
* à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. | |||
* | |||
* Le fait que vous puissiez accéder à cet en-tête signifie que vous avez | |||
* pris connaissance de la licence CeCILL, et que vous en avez accepté les | |||
* termes. | |||
*/ | |||
namespace producer\controllers; | |||
use common\models\CreditHistory ; | |||
use producer\models\CreditForm ; | |||
use common\models\User ; | |||
use common\helpers\Mailjet; | |||
use common\helpers\MeanPayment; | |||
use common\models\CreditHistory; | |||
use common\models\UserProducer; | |||
use producer\models\CreditForm; | |||
use common\models\User; | |||
use Stripe\PaymentIntent; | |||
use yii\filters\VerbFilter; | |||
class CreditController extends ProducerBaseController | |||
class CreditController extends ProducerBaseController | |||
{ | |||
/** | |||
* @inheritdoc | |||
*/ | |||
public function behaviors() | |||
public function behaviors() | |||
{ | |||
return []; | |||
return [ | |||
'verbs' => [ | |||
'class' => VerbFilter::className(), | |||
'actions' => [ | |||
'stripe-verification' => ['post'], | |||
], | |||
] | |||
]; | |||
} | |||
public function actions() | |||
public function actions() | |||
{ | |||
return [ | |||
'captcha' => [ | |||
'class' => 'yii\captcha\CaptchaAction', | |||
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null, | |||
], | |||
'captcha' => [ | |||
'class' => 'yii\captcha\CaptchaAction', | |||
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null, | |||
], | |||
]; | |||
} | |||
public function beforeAction($action) | |||
{ | |||
$this->enableCsrfValidation = false; | |||
return parent::beforeAction($action); | |||
} | |||
/** | |||
* Affiche l'historique du crédit client. | |||
* | |||
* | |||
*/ | |||
public function actionHistory($returnPayment = '') | |||
public function actionHistory($returnPayment = '') | |||
{ | |||
$searchModel = new CreditHistorySearch() ; | |||
$searchModel->id_user = User::getCurrentId() ; | |||
$producer = $this->getProducer(); | |||
$searchModel = new CreditHistorySearch(); | |||
$searchModel->id_user = User::getCurrentId(); | |||
$dataProvider = $searchModel->search(Yii::$app->request->queryParams); | |||
$userProducer = UserProducer::searchOne([ | |||
'id_producer' => $this->getProducer()->id, | |||
'id_user' => User::getCurrentId() | |||
]) ; | |||
if(strlen($returnPayment)) { | |||
if($returnPayment == 'success') { | |||
'id_producer' => $producer->id, | |||
'id_user' => User::getCurrentId() | |||
]); | |||
if (strlen($returnPayment)) { | |||
if ($returnPayment == 'success') { | |||
Yii::$app->getSession()->setFlash('success', "Paiement accepté : votre compte vient d'être crédité."); | |||
} | |||
if($returnPayment == 'cancel') { | |||
Yii::$app->getSession()->setFlash('error', 'Paiement annulé'); | |||
if ($returnPayment == 'cancel') { | |||
Yii::$app->getSession()->setFlash('error', 'Paiement annulé.'); | |||
} | |||
} | |||
return $this->render('history',[ | |||
'searchModel' => $searchModel, | |||
'dataProvider' => $dataProvider, | |||
'creditUser' => $userProducer->credit | |||
]) ; | |||
return $this->render('history', [ | |||
'searchModel' => $searchModel, | |||
'dataProvider' => $dataProvider, | |||
'creditUser' => $userProducer->credit | |||
]); | |||
} | |||
public function actionStripeCharge() | |||
public function actionAdd() | |||
{ | |||
$amount = (float) $_POST['amount']; | |||
$source = $_POST['token_id']; | |||
$producer = $this->getProducer(); | |||
if ($producer->online_payment) { | |||
$stripe = new \Stripe\StripeClient( | |||
'sk_test_51IOR6uECzPeOSTMZmuDYYFdX7SyzCYHdEuyi1YAKBOFgrRNDOhoe6kaliKFmeI0XOWlTRxnwx0aw7PbuNlonGjeA00dlyCRss7' | |||
); | |||
$creditForm = new CreditForm; | |||
$stripe->charges->create([ | |||
'amount' => $amount * 100, | |||
'currency' => 'eur', | |||
'source' => $source, | |||
]); | |||
if ($creditForm->load(Yii::$app->request->post()) && $creditForm->validate()) { | |||
$user = User::getCurrent(); | |||
\Stripe\Stripe::setApiKey( | |||
$producer->getPrivateKeyApiStripe() | |||
); | |||
$checkout_session = \Stripe\Checkout\Session::create([ | |||
'line_items' => [ | |||
[ | |||
'price_data' => [ | |||
'currency' => 'eur', | |||
'product_data' => [ | |||
'name' => 'Alimentation crédit', | |||
], | |||
'unit_amount' => (float)$creditForm->amount * 100, | |||
], | |||
'quantity' => 1, | |||
] | |||
], | |||
'payment_method_types' => ['card'], | |||
'mode' => 'payment', | |||
'customer_email' => $user->email, | |||
'client_reference_id' => $user->id, | |||
'payment_intent_data' => [ | |||
'metadata' => [ | |||
'user_id' => $user->id, | |||
'producer_id' => $producer->id | |||
], | |||
], | |||
'success_url' => \Yii::$app->urlManagerProducer->createAbsoluteUrl( | |||
[ | |||
'credit/history', | |||
'returnPayment' => 'success' | |||
] | |||
), | |||
'cancel_url' => \Yii::$app->urlManagerProducer->createAbsoluteUrl( | |||
[ | |||
'credit/history', | |||
'returnPayment' => 'cancel' | |||
] | |||
), | |||
]); | |||
header("HTTP/1.1 303 See Other"); | |||
header("Location: " . $checkout_session->url); | |||
die(); | |||
} | |||
return $this->render('add', [ | |||
'creditForm' => $creditForm | |||
]); | |||
} else { | |||
throw new \yii\base\UserException('Cette option est désactivée chez ce producteur.'); | |||
} | |||
} | |||
public function actionStripeVerification() | |||
{ | |||
$producer = $this->getProducer(); | |||
$payload = @file_get_contents('php://input'); | |||
$sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE']; | |||
$event = null; | |||
try { | |||
$event = \Stripe\Webhook::constructEvent( | |||
$payload, | |||
$sig_header, | |||
$producer->getPrivateKeyEndpointStripe() | |||
); | |||
} catch (\UnexpectedValueException $e) { | |||
// Invalid payload | |||
http_response_code(400); | |||
exit(); | |||
} catch (\Stripe\Exception\SignatureVerificationException $e) { | |||
// Invalid signature | |||
http_response_code(400); | |||
exit(); | |||
} | |||
// Handle the event | |||
switch ($event->type) { | |||
case 'charge.succeeded': | |||
$paymentIntent = $event->data->object; | |||
$paymentIntentMetadata = $paymentIntent->metadata; | |||
$amount = $paymentIntent->amount / 100; | |||
$idUser = $paymentIntentMetadata->user_id; | |||
$idProducer = $paymentIntentMetadata->producer_id; | |||
// on crédite le crédit du client | |||
$creditHistory = new CreditHistory; | |||
$creditHistory->id_user = $idUser; | |||
$creditHistory->id_user_action = $idUser; | |||
$creditHistory->id_producer = $idProducer; | |||
$creditHistory->type = CreditHistory::TYPE_CREDIT; | |||
$creditHistory->comment = null; | |||
$creditHistory->amount = $amount; | |||
$creditHistory->mean_payment = MeanPayment::CREDIT_CARD; | |||
$creditHistory->save(); | |||
// envoi d'un email de confirmation | |||
$user = User::findOne($paymentIntentMetadata->user_id); | |||
$userProducer = UserProducer::find() | |||
->where([ | |||
'id_user' => $idUser, | |||
'id_producer' => $idProducer | |||
]) | |||
->one(); | |||
$paramsEmail = [ | |||
'from_email' => $producer->getEmailOpendistrib(), | |||
'from_name' => $producer->name, | |||
'to_email' => $user->email, | |||
'to_name' => $user->getUsername(), | |||
'subject' => '['.$producer->name.'] Alimentation de votre crédit', | |||
'content_view_text' => '@common/mail/creditConfirm-text.php', | |||
'content_view_html' => '@common/mail/creditConfirm-html.php', | |||
'content_params' => [ | |||
'user' => $user, | |||
'userProducer' => $userProducer, | |||
'producer' => $producer, | |||
'amount' => $amount, | |||
] | |||
] ; | |||
Mailjet::sendMail($paramsEmail); | |||
break; | |||
// ... handle other event types | |||
default: | |||
echo 'Received unknown event type ' . $event->type; | |||
} | |||
http_response_code(200); | |||
} | |||
} |
@@ -53,7 +53,7 @@ class CreditForm extends Model | |||
{ | |||
return [ | |||
[['amount'], 'required'], | |||
[['amount'], 'double'], | |||
[['amount'], 'double', 'min' => 15], | |||
]; | |||
} | |||
@@ -47,11 +47,13 @@ $this->setPageTitle('Crédit mon compte'); | |||
<div class="form"> | |||
<?php $form = ActiveForm::begin(); ?> | |||
<?= $form->field($creditForm, 'amount',[ | |||
'template' => '{label}<div class="input-group">{input}<span class="input-group-addon"><span class="glyphicon glyphicon-euro"></span></span></div>', | |||
])->label('Quel montant souhaitez-vous créditer ?'); ?> | |||
'template' => '{label}<div class="input-group">{input}<span class="input-group-addon"><span class="glyphicon glyphicon-euro"></span></span></div>{hint}', | |||
]) | |||
->label('Quel montant souhaitez-vous créditer ?') | |||
->hint('<br />Montant minimum : 15 €'); ?> | |||
<div class="form-group"> | |||
<?= Html::submitButton( '<span class="glyphicon glyphicon-lock"></span> Payer sur Payplug', ['class' => 'btn btn-primary']) ?> | |||
<?= Html::submitButton( '<span class="glyphicon glyphicon-lock"></span> Payer sur Stripe', ['class' => 'btn btn-primary']) ?> | |||
</div> | |||
<?php ActiveForm::end(); ?> | |||
</div> |
@@ -56,36 +56,6 @@ if ($this->context->getProducer()->online_payment) { | |||
?> | |||
<div id="button-test-payment-stripe"> | |||
<?= | |||
StripeCheckoutCustom::widget([ | |||
//'action' => '/', | |||
'action' => Yii::$app->urlManagerProducer->createUrl(['credit/stripe-charge']), | |||
'label' => 'Alimenter 20 €', | |||
'panelLabel' => 'Payer', | |||
'currency' => 'EUR', | |||
'name' => $producer->name, | |||
'description' => '20 €', | |||
'amount' => 2000, | |||
//'image' => Yii::$app->urlManagerProducer->getBaseUrl() .'/img/logo-distrib.png', | |||
//'image' => Yii::$app->urlManager->baseUrl .'/uploads/'.$producer->logo, | |||
'image' => null, | |||
'userEmail' => Yii::$app->user->identity->email, | |||
'tokenFunction' => new JsExpression( | |||
'function(token) { | |||
console.log(token); | |||
$.post(opendistrib_base_url(true)+"credit/stripe-charge", { | |||
amount: 20, | |||
token_id: token.id | |||
}, function(data) { | |||
window.location.href = opendistrib_base_url(true)+"credit/history?returnPayment=success" ; | |||
}); | |||
}' | |||
), | |||
]); | |||
?> | |||
</div> | |||
<?= GridView::widget([ | |||
// 'filterModel' => $searchModel, | |||
'dataProvider' => $dataProvider, |
@@ -1704,11 +1704,6 @@ termes. | |||
color: gray; | |||
} | |||
/* line 2, ../sass/credit/_history.scss */ | |||
#button-test-payment-stripe { | |||
display: none; | |||
} | |||
/* line 4, ../sass/subscription/_form.scss */ | |||
.subscription-create .subscription-form, | |||
.subscription-update .subscription-form { |
@@ -1,4 +0,0 @@ | |||
#button-test-payment-stripe { | |||
display: none; | |||
} |