duanna2026 2015-11-17 16:34
浏览 45
已采纳

无法从paypal支付speckPaypal zf2获取令牌

i'm trying to use the module speckpaypal for zf2 , but can't get the token , here is my code :

    public function passTransactionAction(){

        $config = $this->getServiceLocator()->get('Config');
        $paypalConfig = new \SpeckPaypal\Element\Config($config);

        //Then, set up http client using curl libraries provided by Zf2:

        $client = new \Zend\Http\Client;
        $client->setMethod('POST');
        $client->setAdapter(new \Zend\Http\Client\Adapter\Curl);
        $paypalRequest = new \SpeckPaypal\Service\Request;
        $paypalRequest->setClient($client);
        $paypalRequest->setConfig($paypalConfig);


        $paymentDetails = new \SpeckPaypal\Element\PaymentDetails(array(
                'amt' => '20.00'
            ));
        $express = new \SpeckPaypal\Request\SetExpressCheckout(array('paymentDetails' => $paymentDetails));
        $express->setReturnUrl('http://project.local/return');
        $express->setCancelUrl('http://project.local/cancel');
        $response = $paypalRequest->send($express);

        echo $response->isSuccess();

        $token = $response->getToken();
        echo "---------------------- token : $token----------------------";
$this->redirect()->toUrl('https://www.sandbox.paypal.com/webscr?cmd=_express-checkout&token='.$token);

    }

i had set the params in the config file ( a test account sandbox.paypal ), and when showing the $response value , i get this :

SpeckPaypal\Response\Response Object ( [_rawResponse:protected] => [_success:protected] => [_errors:protected] => Array ( [0] => ACK key not found in response. [1] => Configuration is not valid. ) [_response:protected] => [_multiFieldMap:protected] => Array ( [ERRORS] => Array ( [0] => LONGMESSAGE [1] => SEVERITYCODE [2] => SHORTMESSAGE [3] => ERRORCODE ) [FILTERS] => Array ( [0] => FMFfilterID [1] => FMFfilterNAME ) [ITEMS] => Array ( [0] => NAME [1] => DESC [2] => AMT [3] => NUMBER [4] => QTY [5] => TAXAMT [6] => ITEMWEIGHTVALUE [7] => ITEMWEIGHTUNIT [8] => ITEMLENGTHVALUE [9] => ITEMLENGTHUNIT [10] => ITEMWIDTHVALUE [11] => ITEMWIDTHUNIT [12] => ITEMHEIGHTVALUE [13] => ITEMHEIGHTUNIT [14] => ITEMCATEGORY ) ) ) 

Any idea from where comes the bug ? Thanks.

  • 写回答

1条回答 默认 最新

  • doucitao2944 2015-11-24 10:41
    关注

    here is the correct way to implement SpeckPaypal ZF2 for ExpressCheckOut , i followed this tuto : http://phpcantho24h.blogspot.com/2014/04/paypal-express-checkout-creating-simple.html

     // fonction permettant de generer le paypal request : 
        protected function getPaypalRequest() {
            // recuperer la configuration du speckPaypal ( depuis son fichier de configuration speck-paypal.local.php dans config/autoload/ )
            $config = $this->getServiceLocator()->get('Config');
            $paypalConfig = new \SpeckPaypal\Element\Config(
                    $config['speck-paypal-api']);
    
            $adapter = new \Zend\Http\Client\Adapter\Curl();
            $adapter->setOptions(array('curloptions' => array(
                    CURLOPT_SSL_VERIFYPEER => false,
                )
            ));
    
            $client = new \Zend\Http\Client;
            $client->setMethod('POST');
            $client->setAdapter($adapter);
    
            $paypalRequest = new \SpeckPaypal\Service\Request;
            $paypalRequest->setClient($client);
            $paypalRequest->setConfig($paypalConfig);
    
            return $paypalRequest;
        }
    
        //Fonction qui va envoyer les informations de payment et rediriger le client vers PayPal Express Checkout:
        public function paypalExpressCheckoutAction() {
    
            // recuperer les infos depuis le form :
            $request = $this->getRequest();
            $montant = $request->getPost('montant');
            $paypalRequest = $this->getPaypalRequest();
            $fk_annonceur = $request->getPost('annonceur');
    
            // preparer le paymentDetails :
            $paymentDetails = new \SpeckPaypal\Element\PaymentDetails(array('amt' => $montant));
            $express = new \SpeckPaypal\Request\SetExpressCheckout(array('paymentDetails' => $paymentDetails));
    
            // définir les liens de retour en cas de Success ( ReturnUrl ) et de Annulation (CancelUrl )
            $express->setReturnUrl('/application/client/paymentConfirmh');
            $express->setCancelUrl('/application/client/paymentCancel');
    
            // Envoyer les infos à PayPal
            $response = $paypalRequest->send($express);
            // Récuperer le token generé :
            $token = $response->getToken();
    
            // Créer une variable session contenant les infos utiles ( à utiliser plus tard dans la fonction de confirm de payment )  :
            $paypalSession = new \Zend\Session\Container('paypal');
            $paypalSession->tokenId = $token;
            $paypalSession->montant = $montant;
            $paypalSession->client= $client;
    
            // Return le lien pour rediriger l'utilisateur vers Paypal Express Checkout :
            $this->redirect()->toUrl('https://www.sandbox.paypal.com/webscr?cmd=_express-checkout&token=' . $token);
    
        }
    
        // fonction en cas de success de payment from Express Checkout , recuperer les infos from Paypal , enregistrer les données dans prepaiement :
        public function paymentConfirmAction() {
    
            $this->layout('layout/anlayout');
            // Recuperer payment information depuis PayPal:
            // Recuperer Payer Information depuis PayPal
            $paypalSession = new \Zend\Session\Container('paypal');
            $paypalRequest = $this->getPaypalRequest();
    
            $expressCheckoutInfo = new \SpeckPaypal\Request\ GetExpressCheckoutDetails();
            $expressCheckoutInfo->setToken($paypalSession->tokenId);
            $response = $paypalRequest->send($expressCheckoutInfo);
    
    
            $montant = $paypalSession->montant;
            $paymentDetails = new \SpeckPaypal\Element\PaymentDetails(array('amt' => $montant));
    
            $token = $response->getToken();
            $payerId = $response->getPayerId();
    
            $captureExpress = new \SpeckPaypal\Request\ DoExpressCheckoutPayment(
                    array(
                'token' => $token, 'payerId' => $payerId, 'paymentDetails' => $paymentDetails
            ));
            $confirmPaymentResponse = $paypalRequest->send($captureExpress);
            // Enregistrer le prepaiement :
                       $prepaiementObject = new \Application\Entity\Prepaiement();
            $prepaiementObject->setClient($client);
            $prepaiementObject->setPaymentamount($montant);
            $prepaiementObject->setPaymentapi('Paypal');
            $prepaiementObject->setPaymentdate(new \DateTime("now"));
            $prepaiementObject->setCorrelatinid($response->getCorrelationId());
            $this->getEntityManager()->persist($prepaiementObject);
            $this->getEntityManager()->flush();
    
    
            // recuperer les infos de payer :
            /* $first_name = $response->getFirstName();
              $last_name = $response->getLastName();
              $ship_to_street = $response->getShipToStreet();
              $ship_to_city = $response->getShipToCity();
              $ship_to_state = $response->getShipToState();
              $ship_to_zip = $response->getShipToZip();
              $email = $response->getEmail();*/
    
        }
    
        // Fonction pour traiter payment en cas d'annulation depuis Express Checkout :
        public function paymentCancelAction() {
            $this->layout('layout/anlayout');
            $paypalSession = new \Zend\Session\Container('paypal');
            $view = new ViewModel();
            return $view;
        }
    

    Hope it helps.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建