PayPal
l'ajax encore et toujours
Créations de Modules
Yoda741 Membre non connecté
Booster Minigun
- Booster Minigun
- Voir le profil du membre Yoda741
- Inscrit le : 03/12/2016
- Groupes :
Alors voila j'essaye d'inclure paypal sur un site en phpboost et je suis confronté à un problème.
Donc Paypal utilise un script JS permettant de payer dans une popup et cette popup fait appel à une page sur le serveur afin d'obtenir les informations.
La page coté serveur fonctionne lorsque je la lance dans le navigateur, or, quand je la lance à partir du script JS ca me met une erreur : Jeton de session invalide.
Existe-t-il une fonction permettant, dans une class, de désactiver la vérification de session ?
Merci
janus57 Membre non connecté
- Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
- Equipe Assistance
le jeton de session est présent à chaque fois qu'il y a la présence d'un formulaire pour garantir que ce formulaire a été demandé et validé par la même personne et cela pour des question de sécurité (car par exemple on peu masquer un lien qui permet de supprimer un membre, l'admin clique dessus et supprime le membre sans s'en rendre compte, là avec cette sécurité c'est impossible l'action se fait bloquer).
Donc si vous utilisez un développement perso il faut bien prendre en compte la protection CSRF (le petit jeton).
Cordialement, janus57
Yoda741 Membre non connecté
Booster Minigun
- Booster Minigun
- Voir le profil du membre Yoda741
- Inscrit le : 03/12/2016
- Groupes :
janus57 Membre non connecté
- Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
- Equipe Assistance
vous souhaitez faire quoi très exactement ?
Cordialement, janus57
Yoda741 Membre non connecté
Booster Minigun
- Booster Minigun
- Voir le profil du membre Yoda741
- Inscrit le : 03/12/2016
- Groupes :
Pour faire simple j'ai un script accessible via " /PayPal/?url=/payment/1 " qui interroge paypal pour creer un paiement sur paypal et me retourne des valeur
Sur la page ou je souhaite effectuer un paiement il y a un script qui ouvre une popup du site paypal qui interroge cette page
Or, cette popup recois une erreur de jeton
Sinon, à l'heure d'aujourd'hui j'essaye déjà d'implémenter paypal sous forme d'un module distinct et par la suite pourquoi pas faire un module boutique qui utilisera les fonctions paypal mais déjà si j'arrive a faire fonctionner paypal avec des objets fixes ce sera déjà pas mal
Et sinon dans cette page y a pas de formulaire !
Édité par Yoda741 Le 16/12/2017 à 18h51
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
C'est sûrement parce que tu utilises un <FORM>, je te suggère donc de mettre ceci :
<input type="hidden" name="token" value="{TOKEN}">
Yoda741 Membre non connecté
Booster Minigun
- Booster Minigun
- Voir le profil du membre Yoda741
- Inscrit le : 03/12/2016
- Groupes :
Code PHP :
class PayPalAjaxPayment extends AbstractController { public function execute(HTTPRequestCustom $request) { $id_article = $request->get_int('id', 0); $config = PayPalConfig::load(); require PATH_TO_ROOT . '/PayPal/API/PayPal-PHP-SDK/autoload.php'; $apiContext = new \PayPal\Rest\ApiContext( new \PayPal\Auth\OAuthTokenCredential( $config->get_id(), // ClientID $config->get_secret() // ClientSecret ) ); $apiContext->setConfig( array( 'log.LogEnabled' => true, 'log.FileName' => 'PayPal.log', 'log.LogLevel' => 'DEBUG' ) ); $result = PersistenceContext::get_querier()->select_single_row(ShopSetup::$shop_table_articles, array('name', 'montant'), 'WHERE id_article=:id', array( 'id' => $id_article )); $item = new \PayPal\Api\Item(); $item->setName($result['name']); $item->setPrice($result['montant']); $item->setCurrency($config->get_currency()); $item->setQuantity(1); $payer = new \PayPal\Api\Payer(); $payer->setPaymentMethod('paypal'); $list = new \PayPal\Api\ItemList(); $list->addItem($item); $amount = new \PayPal\Api\Amount(); $amount->setTotal('4.99'); $amount->setCurrency($config->get_currency()); $transaction = new \PayPal\Api\Transaction(); $transaction->setAmount($amount); $transaction->setCustom('demo-1'); $transaction->setItemList($list); $redirectUrls = new \PayPal\Api\RedirectUrls(); $redirectUrls->setReturnUrl($config->get_ok_return()) ->setCancelUrl($config->get_cancel_return()); $payment = new \PayPal\Api\Payment(); $payment->setIntent('sale') ->setPayer($payer) ->setTransactions(array($transaction)) ->setRedirectUrls($redirectUrls); try { $payment->create($apiContext); //AppContext::get_response()->redirect($payment->getApprovalLink()); return new JSONResponse(array('id' => $payment->getId())); //echo "\n\nRedirect user to approval_url: " . $payment->getApprovalLink() . "\n"; } catch (\PayPal\Exception\PayPalConnectionException $ex) { // This will print the detailed information on the exception. //REALLY HELPFUL FOR DEBUGGING return var_dump(json_decode($ex->getData())); } } }
janus57 Membre non connecté
- Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
- Equipe Assistance
donc cela se passe dans votre module "PayPal", mais sans code (complet) difficile de dire plus.
Je vous conseil de regarder comment sont fait les formulaire et comment ils sont validé niveau CSRF.
Les fonctions de gestion CSRF se trouve dans la Class SessionData (https://codedoc.pub/PHPBoost/PHPBoost/5.1/class-SessionData.html#_csrf_post_protect).
Cordialement, janus57
Yoda741 Membre non connecté
Booster Minigun
- Booster Minigun
- Voir le profil du membre Yoda741
- Inscrit le : 03/12/2016
- Groupes :
tout se passe dans le fichier au dessus qui est executé par paypal !
ce fichier dis a paypal il y a une commande qui vaut tel prix etil retourne un id, ensuite l'id est utilisé par la fenetre paypal pour faire la liaison ...
Il n'y a aucuns formulaires d'aucune sorte sauf pour la gestion des configs mais elle n'intervient pas !
Quand je lance la page dans le navigateur il me ressort bien l'id et quand c'est paypal qui la lance ca ressors une erreur de token
Édité par Yoda741 Le 16/12/2017 à 20h00
janus57 Membre non connecté
- Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
- Equipe Assistance
sauf que si il y a passage de paramètres (en GET ou POST) alors il y a vérification contre une éventuel attaque CSRF il me semble.
Après le plus simple serait de Debug avec le dit module pour voir qui fait quoi comme requête (genre paypal qui doit un POST suivie un GET ou inversement).
Cordialement, janus57
Yoda741 Membre non connecté
Booster Minigun
- Booster Minigun
- Voir le profil du membre Yoda741
- Inscrit le : 03/12/2016
- Groupes :
quand j'utilise le lien sous la forme /paypal/?url=/admin/config j'ai pas de soucis mais si je met /paypal/admin/config ca ne marche pas
il y a une manip à faire pour que ca fonctionne ?
Et sinon quelqu'un serais pas m'aider pour une regex sur un UrlControllerMapper ? Paypal rajoute ces arguments à la fin de l'url :
?paymentId=PAY-4BY26663JC414861SLI22ODQ&token=EC-03L98363WL635984G&PayerID=ELSFTAHF3VUUW
ce qui me donne une url qui ressemble à ca :
www.site.com/paypal/pay/?paymentId=PAY-4BY26663JC414861SLI22ODQ&token=EC-03L98363WL635984G&PayerID=ELSFTAHF3VUUW
Quelle regex faudrait mettre pour récupérer les 3 valeurs ?
Merci
PS: Si j'arrive a faire quelque chose de correct je le partargerais
Édité par Yoda741 Le 17/12/2017 à 00h17
janus57 Membre non connecté
- Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
- Equipe Assistance
non si le module a bien été fait cela est ajouté automatiquement dans le .htaccess
et non pas besoin de regex vu que cela se récupère dans le GET, ce qui en PHP "pure" va donner $_GET["paymentId"] / $_GET["token"] / $_GET["PayerID"] et côté PHPBoost il y a plusieurs moyen selon ce qui est attendu ou selon le traitement que l'on souhaite faire derrière (voir les fonction get_get*, Cf : https://codedoc.pub/PHPBoost/PHPBoost/5.1/class-HTTPRequestCustom.html#__get_parameters_array).
Cordialement, janus57
Yoda741 Membre non connecté
Booster Minigun
- Booster Minigun
- Voir le profil du membre Yoda741
- Inscrit le : 03/12/2016
- Groupes :
Yoda741 Membre non connecté
Booster Minigun
- Booster Minigun
- Voir le profil du membre Yoda741
- Inscrit le : 03/12/2016
- Groupes :
Je l'ai rajouté à la main du coup ca fonctionne mais quelqu'un peut me dire ce qui va pas la dedans :
Code PHP :
new UrlControllerMapper('PayPalAjaxPay', '`^/pay/\?paymentId=([a-zA-Z0-9\-]*)&token=([a-zA-Z0-9\-]*)&PayerID=([a-zA-Z0-9\-]*)/?$`', array('paymentId', 'token', 'PayerID'))
Merci
Édité par Yoda741 Le 18/12/2017 à 00h39
janus57 Membre non connecté
- Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
- Equipe Assistance
comme dit il faudrait le module au complet.
Mais déjà on ne peut pas utiliser directement & il faut encoder en
Code HTML :
& amp;
Si pas déjà fait.
Cordialement, janus57
Édité par janus57 Le 18/12/2017 à 09h29
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie