@@ -0,0 +1,126 @@ | |||
<?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 'payment_intent.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); | |||
} | |||
} |
@@ -39,6 +39,9 @@ | |||
$serverName = $_SERVER['SERVER_NAME']; | |||
return [ | |||
'aliases' => [ | |||
'@bower' => '@vendor/bower-asset', | |||
], | |||
'vendorPath' => dirname(dirname(__DIR__)) . '/vendor', | |||
'on beforeRequest' => function () { | |||
if (method_exists(Yii::$app->request, 'getAbsoluteUrl')) { | |||
@@ -114,6 +117,11 @@ return [ | |||
'rules' => [ | |||
], | |||
], | |||
'stripe' => [ | |||
'class' => 'ruskid\stripe\Stripe', | |||
'publicKey' => "pk_test_51IOR6uECzPeOSTMZS8sUzKYnTAMXpdfcXCtIzXHnh9TWJvkYsd1nP2OhhnefAnCnmck8i0xACU6OOhohAFHL2VAa004DxnLOSH", | |||
'privateKey' => "sk_test_51IOR6uECzPeOSTMZmuDYYFdX7SyzCYHdEuyi1YAKBOFgrRNDOhoe6kaliKFmeI0XOWlTRxnwx0aw7PbuNlonGjeA00dlyCRss7", | |||
], | |||
], | |||
'language' => 'fr-FR', | |||
]; |
@@ -27,7 +27,11 @@ | |||
"payplug/payplug-php": "^2.5", | |||
"mailjet/mailjet-apiv3-php": "^1.4", | |||
"linslin/yii2-curl": "*", | |||
"yiisoft/yii2-jui": "^2.0" | |||
"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" | |||
}, | |||
"require-dev": { | |||
"yiisoft/yii2-codeception": "*", | |||
@@ -44,5 +48,11 @@ | |||
"npm-asset-library": "vendor/npm", | |||
"bower-asset-library": "vendor/bower" | |||
} | |||
} | |||
}, | |||
"repositories": [ | |||
{ | |||
"type": "composer", | |||
"url": "https://asset-packagist.org" | |||
} | |||
] | |||
} |
@@ -139,41 +139,4 @@ class CreditController extends ProducerBaseController | |||
} | |||
} | |||
/** | |||
* Interface de notification suite aux actions effectuées sur Payplug. | |||
* | |||
* @param integer $idUser | |||
*/ | |||
public function actionPaymentNotifications($idUser) | |||
{ | |||
$producer = $this->getProducer() ; | |||
\Payplug\Payplug::setSecretKey($producer->getSecretKeyPayplug()); | |||
$input = file_get_contents('php://input'); | |||
try { | |||
$resource = \Payplug\Notification::treat($input); | |||
if ($resource instanceof \Payplug\Resource\Payment | |||
&& $resource->is_paid | |||
) { | |||
$creditHistory = new CreditHistory; | |||
$creditHistory->id_user = $idUser; | |||
$creditHistory->id_user_action = $idUser; | |||
$creditHistory->id_producer = $producer->id ; | |||
$creditHistory->type = CreditHistory::TYPE_CREDIT ; | |||
$creditHistory->comment = '' ; | |||
$creditHistory->amount = $resource->amount ; | |||
$creditHistory->mean_payment = MeanPayment::CREDIT_CARD ; | |||
$creditHistory->save(); | |||
} else if ($resource instanceof \Payplug\Resource\Refund) { | |||
echo 'refund' ; | |||
} | |||
} | |||
catch (\Payplug\Exception\PayplugException $exception) { | |||
echo 'error' ; | |||
} | |||
} | |||
} |
@@ -1,102 +1,134 @@ | |||
<?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. | |||
*/ | |||
use yii\helpers\Html; | |||
use ruskid\stripe\StripeCheckoutCustom; | |||
use yii\web\JsExpression; | |||
$this->setTitle('Crédit : <span id="credit-user">'.number_format($creditUser, 2).' €</span>'); | |||
$producer = $this->context->getProducer(); | |||
$this->setTitle('Crédit : <span id="credit-user">' . number_format($creditUser, 2) . ' €</span>'); | |||
$this->setPageTitle('Crédit'); | |||
if($this->context->getProducer()->online_payment) { | |||
$this->addButton(['label' => '<span class="glyphicon glyphicon-credit-card"></span> Créditer mon compte', 'url' => 'credit/add', 'class' => 'btn btn-primary']) ; | |||
if ($this->context->getProducer()->online_payment) { | |||
$this->addButton( | |||
[ | |||
'label' => '<span class="glyphicon glyphicon-credit-card"></span> Créditer mon compte', | |||
'url' => 'credit/add', | |||
'class' => 'btn btn-primary' | |||
] | |||
); | |||
} | |||
?> | |||
<div id="button-test-payment-stripe"> | |||
<?= | |||
StripeCheckoutCustom::widget([ | |||
'action' => '/', | |||
'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); | |||
//window.location.href = opendistrib_base_url(true)+"credit/history?returnPayment=success" ; | |||
}' | |||
), | |||
]); | |||
?> | |||
</div> | |||
<?= GridView::widget([ | |||
// 'filterModel' => $searchModel, | |||
'dataProvider' => $dataProvider, | |||
'columns' => [ | |||
[ | |||
'attribute' => 'date', | |||
'value' => function($model) { | |||
return $model->getDate(true) ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'id_user_action', | |||
'value' => function($model) { | |||
return $model->strUserAction() ; | |||
} | |||
], | |||
[ | |||
'label' => 'Type', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
return $model->getStrWording() ; | |||
} | |||
], | |||
[ | |||
'attribute' => 'mean_payment', | |||
'value' => function($model) { | |||
return $model->getStrMeanPayment() ; | |||
} | |||
], | |||
[ | |||
'label' => '- Débit', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
if($model->isTypeDebit()) { | |||
return '- '.$model->getAmount(true) ; | |||
} | |||
return '' ; | |||
} | |||
], | |||
[ | |||
'label' => '+ Crédit', | |||
'format' => 'raw', | |||
'value' => function($model) { | |||
if($model->isTypeCredit()) { | |||
return '+ '.$model->getAmount(true) ; | |||
} | |||
return '' ; | |||
} | |||
], | |||
], | |||
]); | |||
// 'filterModel' => $searchModel, | |||
'dataProvider' => $dataProvider, | |||
'columns' => [ | |||
[ | |||
'attribute' => 'date', | |||
'value' => function ($model) { | |||
return $model->getDate(true); | |||
} | |||
], | |||
[ | |||
'attribute' => 'id_user_action', | |||
'value' => function ($model) { | |||
return $model->strUserAction(); | |||
} | |||
], | |||
[ | |||
'label' => 'Type', | |||
'format' => 'raw', | |||
'value' => function ($model) { | |||
return $model->getStrWording(); | |||
} | |||
], | |||
[ | |||
'attribute' => 'mean_payment', | |||
'value' => function ($model) { | |||
return $model->getStrMeanPayment(); | |||
} | |||
], | |||
[ | |||
'label' => '- Débit', | |||
'format' => 'raw', | |||
'value' => function ($model) { | |||
if ($model->isTypeDebit()) { | |||
return '- ' . $model->getAmount(true); | |||
} | |||
return ''; | |||
} | |||
], | |||
[ | |||
'label' => '+ Crédit', | |||
'format' => 'raw', | |||
'value' => function ($model) { | |||
if ($model->isTypeCredit()) { | |||
return '+ ' . $model->getAmount(true); | |||
} | |||
return ''; | |||
} | |||
], | |||
], | |||
]); | |||
?> |
@@ -1704,6 +1704,11 @@ 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 { |
@@ -0,0 +1,4 @@ | |||
#button-test-payment-stripe { | |||
display: none; | |||
} |
@@ -36,6 +36,7 @@ termes. | |||
@import "compass"; | |||
@import "compass/reset"; | |||
@import "_layout.scss"; | |||
@import "site/_index.scss"; | |||
@import "site/_credit_history.scss"; | |||
@@ -44,5 +45,6 @@ termes. | |||
@import "order/_order.scss"; | |||
@import "order/_confirm.scss"; | |||
@import "credit/_add.scss"; | |||
@import "credit/_history.scss"; | |||
@import "subscription/_form.scss"; | |||
@import "_responsive.scss"; |