首页 > 解决方案 > 我如何在 Symfony 项目中实现 aZarinpal 网关?

问题描述

我想在我的 Symfony 项目中放置一个 zarinpal 网关我使用了 zarinpal/zarinpal网关,但是我在验证支付时得到 -11 错误号这个错误是针对无法访问的请求,有没有人可以帮助我?

标签: symfony4

解决方案


经过多次尝试,我发现这个库有问题并自己尝试以下代码对我有用,你应该只确保soap_client在你的电脑上可用

 public function ZarinpalRequest($price, $size, $cardID)
    {
        $session = new Session();
        $session->start();


        /*zarinpal copy code*/
        $MerchantID = 'xxxxxxxxxxxxxxxxxxxxxx'; //Required
        $amount = ((int)$price);
        $Description = 'test desc';
        $Email = 'example@gmaol.com';
//callback url most be absolute url
        $CallbackURL = $this->generateUrl('verifyTemplate', array(), UrlGeneratorInterface::ABSOLUTE_URL);

//this is sandbox mode gateway address
        $client = new \SoapClient('https://sandbox.zarinpal.com/pg/services/WebGate/wsdl', ['encoding' => 'UTF-8']);

        $result = $client->PaymentRequest(
            [
                'MerchantID' => $MerchantID,
                'Amount' => $amount,
                'Description' => $Description,
                'Email' => $Email,
                'CallbackURL' => $CallbackURL,
            ]
        );



        if ($result->Status == 100) {
            $session->set('amount',$amount);
            $session->set('authority',$result->Authority);
            $session->set('cardID',$cardID);
            $session->set('checked',true);

           return new RedirectResponse("https://sandbox.zarinpal.com/pg/StartPay/".$result->Authority);
        } else {
            dd('ERR: ' . $result->Status) ;
        }
    }


     public function ZarinpalResponse()
    {
        $session = new Session();
        $session->start();
        $MerchantID = 'xxxxxxxxxxxxxxxxxxxxx';
        $Amount = $session->get('amount');
        $check = $session->get('checked');

        $Authority = $_GET['Authority'];

        if ($_GET['Status'] == 'OK') {

            $client = new \SoapClient('https://sandbox.zarinpal.com/pg/services/WebGate/wsdl', ['encoding' => 'UTF-8']);

            $result = $client->PaymentVerification(
                [
                    'MerchantID' => $MerchantID,
                    'Authority' => $Authority,
                    'Amount' => $Amount,
                ]);

            if ($result->Status == 100  && $check ) {

                $repository=$this->getDoctrine()->getRepository(Carts::class);
                $cart=$repository->find($cardID);
                if ($cart!==null){
//this is transaction number and should save it
                   $refid=$result->RefID
                    $this->sendEmail($cardID,$this->mailer,$this->helper);
                    $session->clear();

                }

                return $this->render('verify.twig',array('refID'=>$result->RefID));




            } else {
                return new Response('Transaction failed. Status:' . $result->Status) ;
            }
        } else {
            return new Response('Transaction canceled by user') ;
        }
    }

并且在您的代码中仅使用正确的参数调用 ZarrinpalRequest


推荐阅读