致命错误:访问未声明的静态属性(带有realexpayments)

时间:2018-10-25 19:09:55

标签: php

我在第38行收到此错误:

  

致命错误:访问未声明的静态属性:com \ realexpayments \ remote \ sdk \ domain \ CardType :: $ cardType

第38行:

->addType(CardType::$cardType)

我的代码:

$numCard = isset($_POST['numCard']);
$expCardMont = isset($_POST['expCardMont']);
$expCardYear = isset($_POST['expCardYear']);
$expDate = $expCardMont.$expCardYear;
$cvnCard = isset($_POST['cvnCard']);
$titulaireNameCard = isset($_POST['titulaireNameCard']);
$cardType = isset($_POST['cardType']);
$total = isset($_POST['total']);

// var_dump($numCard);

require_once ( dirname(__FILE__) . '/vendor/autoload.php');
use com\realexpayments\remote\sdk\domain\Card;
use com\realexpayments\remote\sdk\domain\CardType;
use com\realexpayments\remote\sdk\domain\PresenceIndicator;
use com\realexpayments\remote\sdk\domain\payment\AutoSettle;
use com\realexpayments\remote\sdk\domain\payment\AutoSettleFlag;
use com\realexpayments\remote\sdk\domain\payment\PaymentRequest;
use com\realexpayments\remote\sdk\domain\payment\PaymentResponse;
use com\realexpayments\remote\sdk\domain\payment\PaymentType;
use com\realexpayments\remote\sdk\domain\payment\Mpi;
use com\realexpayments\remote\sdk\RealexClient;
use com\realexpayments\remote\sdk\RealexException;
use com\realexpayments\remote\sdk\RealexServerException;
use com\realexpayments\remote\sdk\http\HttpConfiguration;

$card = (new Card())
->addType(CardType::$cardType)
->addNumber($numCard)
->addExpiryDate($expDate)
->addCvn($cvnCard)
->addCvnPresenceIndicator(PresenceIndicator::CVN_PRESENT)
->addCardHolderName($titulaireNameCard);

$request = (new PaymentRequest())
->addType(PaymentType::AUTH)
->addMerchantId("xxx")
->addAccount("internet")
->addAmount($total)
->addCurrency("CAD")
->addCard($card)
->addAutoSettle((new AutoSettle())->addFlag(AutoSettleFlag::TRUE));

$httpConfiguration = new HttpConfiguration();
$httpConfiguration->setEndpoint("https://test.realexpayments.com/epage-remote.cgi");
$client = new RealexClient("xxx", $httpConfiguration);

try {
$paymentResponse = $client->send($request);
echo $paymentResponse->getResult(); // '00' == success
//get the details required for Transaction Management requests
$paymentsReference = $paymentResponse->getPaymentsReference();
$authCode = $paymentResponse->getAuthCode();
$orderId = $paymentResponse->getorderId();

return $paymentResponse->getMessage();
}
catch ( RealexServerException $e ) {
return $e->getMessage();
}
catch ( RealexException $e ) {
return $e->getMessage();
}

一个为什么的想法?谢谢!

CardType代码(如果需要):

<?php


namespace com\realexpayments\remote\sdk\domain;


use com\realexpayments\remote\sdk\EnumBase;


/**
 * Enumeration representing card types.
 */
class CardType extends EnumBase {

    const __default = self::VISA;

    const VISA = "VISA";
    const MASTERCARD = "MC";
    const AMEX = "AMEX";
    const CB = "CB";
    const DINERS = "DINERS";
    const JCB = "JCB";

    /**
     * @var string The card type
     */
    private $type;

    /**
     * @param string $type
     */
    public function __construct( $type ) {
        parent::__construct( $type );

        $this->type = $type;
    }

    /**
     * Getter for the card type
     *
     * @return string
     */
    public function getType() {
        return $this->type;
    }

}

1 个答案:

答案 0 :(得分:0)

代码说明

$cardType = isset($_POST['cardType']);

$cardType设置为布尔值,因此CardType::$cardType不仅无效,而且在技术上也没有意义。

您可能想要的是

$cardType = isset($_POST['cardType']) ? $_POST['cardType'] : null;

然后

->addType(new CardType($cardType))

总体而言,配置更好的输入验证将对您有很大帮助,因为$cardTypenull可能还会引发错误。