我在第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;
}
}
答案 0 :(得分:0)
代码说明
$cardType = isset($_POST['cardType']);
将$cardType
设置为布尔值,因此CardType::$cardType
不仅无效,而且在技术上也没有意义。
您可能想要的是
$cardType = isset($_POST['cardType']) ? $_POST['cardType'] : null;
然后
->addType(new CardType($cardType))
总体而言,配置更好的输入验证将对您有很大帮助,因为$cardType
被null
可能还会引发错误。