<?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); | |||||
} | |||||
} |
$serverName = $_SERVER['SERVER_NAME']; | $serverName = $_SERVER['SERVER_NAME']; | ||||
return [ | return [ | ||||
'aliases' => [ | |||||
'@bower' => '@vendor/bower-asset', | |||||
], | |||||
'vendorPath' => dirname(dirname(__DIR__)) . '/vendor', | 'vendorPath' => dirname(dirname(__DIR__)) . '/vendor', | ||||
'on beforeRequest' => function () { | 'on beforeRequest' => function () { | ||||
if (method_exists(Yii::$app->request, 'getAbsoluteUrl')) { | if (method_exists(Yii::$app->request, 'getAbsoluteUrl')) { | ||||
'rules' => [ | 'rules' => [ | ||||
], | ], | ||||
], | ], | ||||
'stripe' => [ | |||||
'class' => 'ruskid\stripe\Stripe', | |||||
'publicKey' => "pk_test_51IOR6uECzPeOSTMZS8sUzKYnTAMXpdfcXCtIzXHnh9TWJvkYsd1nP2OhhnefAnCnmck8i0xACU6OOhohAFHL2VAa004DxnLOSH", | |||||
'privateKey' => "sk_test_51IOR6uECzPeOSTMZmuDYYFdX7SyzCYHdEuyi1YAKBOFgrRNDOhoe6kaliKFmeI0XOWlTRxnwx0aw7PbuNlonGjeA00dlyCRss7", | |||||
], | |||||
], | ], | ||||
'language' => 'fr-FR', | 'language' => 'fr-FR', | ||||
]; | ]; |
"payplug/payplug-php": "^2.5", | "payplug/payplug-php": "^2.5", | ||||
"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", | |||||
"yidas/yii2-bower-asset": "2.0.13.1", | |||||
"stripe/stripe-php": "^7.95" | |||||
}, | }, | ||||
"require-dev": { | "require-dev": { | ||||
"yiisoft/yii2-codeception": "*", | "yiisoft/yii2-codeception": "*", | ||||
"npm-asset-library": "vendor/npm", | "npm-asset-library": "vendor/npm", | ||||
"bower-asset-library": "vendor/bower" | "bower-asset-library": "vendor/bower" | ||||
} | } | ||||
} | |||||
}, | |||||
"repositories": [ | |||||
{ | |||||
"type": "composer", | |||||
"url": "https://asset-packagist.org" | |||||
} | |||||
] | |||||
} | } |
} | } | ||||
} | } | ||||
/** | |||||
* 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' ; | |||||
} | |||||
} | |||||
} | } |
<?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. | |||||
*/ | |||||
use yii\helpers\Html; | 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'); | $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([ | <?= 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 ''; | |||||
} | |||||
], | |||||
], | |||||
]); | |||||
?> | ?> |
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; | |||||
} |
@import "compass"; | @import "compass"; | ||||
@import "compass/reset"; | @import "compass/reset"; | ||||
@import "_layout.scss"; | @import "_layout.scss"; | ||||
@import "site/_index.scss"; | @import "site/_index.scss"; | ||||
@import "site/_credit_history.scss"; | @import "site/_credit_history.scss"; | ||||
@import "order/_order.scss"; | @import "order/_order.scss"; | ||||
@import "order/_confirm.scss"; | @import "order/_confirm.scss"; | ||||
@import "credit/_add.scss"; | @import "credit/_add.scss"; | ||||
@import "credit/_history.scss"; | |||||
@import "subscription/_form.scss"; | @import "subscription/_form.scss"; | ||||
@import "_responsive.scss"; | @import "_responsive.scss"; |