{ | { | ||||
$request = Yii::$app->request; | $request = Yii::$app->request; | ||||
$model = $this->findModel(GlobalParam::getCurrentProducerId()); | $model = $this->findModel(GlobalParam::getCurrentProducerId()); | ||||
$model->secret_key_payplug = $model->getSecretKeyPayplug() ; | |||||
$logoFilenameOld = $model->logo; | $logoFilenameOld = $model->logo; | ||||
$photoFilenameOld = $model->photo; | $photoFilenameOld = $model->photo; | ||||
if (strlen($model->option_dashboard_date_start)) { | if (strlen($model->option_dashboard_date_start)) { | ||||
$model->save(); | $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.'); | Yii::$app->getSession()->setFlash('success', 'Paramètres mis à jour.'); | ||||
return $this->redirect(['update', 'id' => $model->id, 'edit_ok' => true]); | return $this->redirect(['update', 'id' => $model->id, 'edit_ok' => true]); |
<?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); | |||||
} | |||||
} |
<?= $form->field($model, 'credit_limit',[ | <?= $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}', | '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.'); ?> | ])->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> | ||||
</div> | </div> | ||||
main-local.php | main-local.php | ||||
params-local.php | params-local.php | ||||
payplug/*.key | |||||
stripe/*.key | |||||
mailjet/*.key | mailjet/*.key |
'enableStrictParsing' => false, | 'enableStrictParsing' => false, | ||||
'rules' => [ | 'rules' => [ | ||||
], | ], | ||||
], | |||||
'stripe' => [ | |||||
'class' => 'ruskid\stripe\Stripe', | |||||
'publicKey' => "pk_test_51IOR6uECzPeOSTMZS8sUzKYnTAMXpdfcXCtIzXHnh9TWJvkYsd1nP2OhhnefAnCnmck8i0xACU6OOhohAFHL2VAa004DxnLOSH", | |||||
'privateKey' => "sk_test_51IOR6uECzPeOSTMZmuDYYFdX7SyzCYHdEuyi1YAKBOFgrRNDOhoe6kaliKFmeI0XOWlTRxnwx0aw7PbuNlonGjeA00dlyCRss7", | |||||
], | |||||
] | |||||
], | ], | ||||
'language' => 'fr-FR', | 'language' => 'fr-FR', | ||||
]; | ]; |
<?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); ?> |
<?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); ?> |
"mailjet/mailjet-apiv3-php": "^1.4", | "mailjet/mailjet-apiv3-php": "^1.4", | ||||
"linslin/yii2-curl": "*", | "linslin/yii2-curl": "*", | ||||
"yiisoft/yii2-jui": "^2.0", | "yiisoft/yii2-jui": "^2.0", | ||||
"ruskid/yii2-stripe": "dev-master", | |||||
"bower-asset/jquery": "^3.6", | "bower-asset/jquery": "^3.6", | ||||
"yidas/yii2-bower-asset": "2.0.13.1", | "yidas/yii2-bower-asset": "2.0.13.1", | ||||
"stripe/stripe-php": "^7.95" | "stripe/stripe-php": "^7.95" |
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", | ||||
"This file is @generated automatically" | "This file is @generated automatically" | ||||
], | ], | ||||
"content-hash": "56933f9cf162d6c0fab8cd420d356923", | |||||
"content-hash": "bbfd502bb99ed522c5f181c9e809790f", | |||||
"packages": [ | "packages": [ | ||||
{ | { | ||||
"name": "2amigos/yii2-chartjs-widget", | "name": "2amigos/yii2-chartjs-widget", | ||||
"version": "v2.1.6", | "version": "v2.1.6", | ||||
"source": { | "source": { | ||||
"type": "git", | "type": "git", | ||||
"url": "git@github.com:nnnick/Chart.js.git", | |||||
"url": "https://github.com/chartjs/Chart.js.git", | |||||
"reference": "07662b158d829f395b2c97d732e60599b8b5c4e4" | "reference": "07662b158d829f395b2c97d732e60599b8b5c4e4" | ||||
}, | }, | ||||
"dist": { | "dist": { | ||||
"type": "zip", | "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" | "reference": "07662b158d829f395b2c97d732e60599b8b5c4e4" | ||||
}, | }, | ||||
"type": "bower-asset", | "type": "bower-asset", | ||||
"MIT" | "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", | "name": "bower-asset/leaflet", | ||||
"version": "v1.7.1", | "version": "v1.7.1", | ||||
}, | }, | ||||
"time": "2017-01-11T14:05:47+00:00" | "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", | "name": "setasign/fpdi", | ||||
"version": "v2.3.6", | "version": "v2.3.6", | ||||
"stability-flags": { | "stability-flags": { | ||||
"kartik-v/yii2-mpdf": 20, | "kartik-v/yii2-mpdf": 20, | ||||
"c006/yii2-paypal-ipn": 20, | "c006/yii2-paypal-ipn": 20, | ||||
"yurkinx/yii2-image": 20, | |||||
"ruskid/yii2-stripe": 20 | |||||
"yurkinx/yii2-image": 20 | |||||
}, | }, | ||||
"prefer-stable": false, | "prefer-stable": false, | ||||
"prefer-lowest": false, | "prefer-lowest": false, |
<?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; | |||||
} | |||||
*/ | |||||
} |
<?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; | |||||
} | |||||
*/ | |||||
} |
<?php | <?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; | 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 | * @inheritdoc | ||||
*/ | */ | ||||
public function behaviors() | |||||
public function behaviors() | |||||
{ | { | ||||
return []; | |||||
return [ | |||||
'verbs' => [ | |||||
'class' => VerbFilter::className(), | |||||
'actions' => [ | |||||
'stripe-verification' => ['post'], | |||||
], | |||||
] | |||||
]; | |||||
} | } | ||||
public function actions() | |||||
public function actions() | |||||
{ | { | ||||
return [ | 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. | * 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); | $dataProvider = $searchModel->search(Yii::$app->request->queryParams); | ||||
$userProducer = UserProducer::searchOne([ | $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é."); | 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); | |||||
} | |||||
} | } |
{ | { | ||||
return [ | return [ | ||||
[['amount'], 'required'], | [['amount'], 'required'], | ||||
[['amount'], 'double'], | |||||
[['amount'], 'double', 'min' => 15], | |||||
]; | ]; | ||||
} | } | ||||
<div class="form"> | <div class="form"> | ||||
<?php $form = ActiveForm::begin(); ?> | <?php $form = ActiveForm::begin(); ?> | ||||
<?= $form->field($creditForm, 'amount',[ | <?= $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"> | <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> | </div> | ||||
<?php ActiveForm::end(); ?> | <?php ActiveForm::end(); ?> | ||||
</div> | </div> |
?> | ?> | ||||
<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([ | <?= GridView::widget([ | ||||
// 'filterModel' => $searchModel, | // 'filterModel' => $searchModel, | ||||
'dataProvider' => $dataProvider, | 'dataProvider' => $dataProvider, |
color: gray; | color: gray; | ||||
} | } | ||||
/* line 2, ../sass/credit/_history.scss */ | |||||
#button-test-payment-stripe { | |||||
display: none; | |||||
} | |||||
/* line 4, ../sass/subscription/_form.scss */ | /* line 4, ../sass/subscription/_form.scss */ | ||||
.subscription-create .subscription-form, | .subscription-create .subscription-form, | ||||
.subscription-update .subscription-form { | .subscription-update .subscription-form { |
#button-test-payment-stripe { | |||||
display: none; | |||||
} |