Example #1
0
    public function checkPaymentStatus($event, $request)
    {
        $sql = "SELECT idpaymentmethod FROM paymentmethod WHERE controller = 'paybynet' AND active=1";
        $stmt = Db::getInstance()->prepare($sql);
        $stmt->execute();
        $rs = $stmt->fetch();
        if (!$rs) {
            return;
        }
        $settings = $this->registry->core->loadModuleSettings('paybynet', Helper::getViewId());
        if (empty($settings)) {
            return;
        }
        $id = $request['id'];
        $sql = "SELECT\n\t\t\t\tidorder\n\t\t\tFROM\n\t\t\t\t`order`\n\t\t\tWHERE\n\t\t\t\tidorder = :id\n\t\t\tAND\n\t\t\t\tpaymentmethodid = :paymentmethodid\n\t\t\tAND\n\t\t\t\torderstatusid = :positiveorderstatusid";
        $stmt = Db::getInstance()->prepare($sql);
        $stmt->bindValue('id', $id);
        $stmt->bindValue('idpaymentmethod', $rs['idpaymentmethod']);
        $stmt->bindValue('positiveorderstatusid', $settings['positiveorderstatusid']);
        $stmt->execute();
        if ($stmt->fetch()) {
            return;
        }
        try {
            $soap = new \SoapClient(self::WSDL);
            $statusCode = $soap->getStatusByPaymentID($id, $settings['id_client']);
        } catch (\SoapFault $e) {
            throw new CoreException('Nie można połączyć się z pbn.paybynet.com.pl');
        }
        $status = 0;
        if ($statusCode >= 1000 && $statusCode <= 1012) {
            $status = $settings['verificationrejectedorderstatusid'];
            $comment = 'Weryfikacja odrzucona';
        } else {
            if ($statusCode == 2303) {
                $status = $settings['positiveorderstatusid'];
                $comment = 'Płatność zakończona sukcesem';
            } else {
                if ($statusCode == 2301 || $statusCode == 2302) {
                    $status = $settings['negativeorderstatusid'];
                    $comment = 'Płatność zakończona niepowodzeniem';
                }
            }
        }
        if ($status == 0) {
            return;
        }
        $sql = "UPDATE `order` SET orderstatusid = :status WHERE idorder = :idorder";
        $stmt = Db::getInstance()->prepare($sql);
        $stmt->bindValue('status', $status);
        $stmt->bindValue('idorder', $id);
        $stmt->execute();
        $sql = 'INSERT INTO orderhistory SET
					content = :content,
					orderstatusid = :status,
					orderid = :idorder,
					inform = 0';
        $stmt = Db::getInstance()->prepare($sql);
        $stmt->bindValue('content', $comment);
        $stmt->bindValue('idorder', $id);
        $stmt->bindValue('status', $status);
        $stmt->execute();
    }