Я всегда получаю эту ошибку:
Произошла ошибка при обработке вашей транзакции Неверный идентификатор платежа
всякий раз, когда я использую созданный токен оплаты из секретного ключа песочницы. документация показывает, что verifyCharge()
принимает токен оплаты в качестве параметра, но когда я передаю его, я получил указанную ошибку.
PaymentTokenAPI
use com\checkout;
class PaymentTokenAPI {
private $apiClient;
private $tokenService;
private $tokenPayload;
function __construct($secretKey) {
$this->apiClient = new checkout\ApiClient($secretKey);
$this->tokenService = $this->apiClient->tokenService();
$this->tokenPayload = new checkout\ApiServices\Tokens\RequestModels\PaymentTokenCreate();
}
public function setInvestmentValue($value) {
$this->tokenPayload->setCurrency('PHP');
$this->tokenPayload->setValue("$value");
}
public function createPaymentToken() {
$paymentToken = $this->tokenService->createPaymentToken($this->tokenPayload);
return $paymentToken;
}
}
VerifyPaymentTokenAPI
use com\checkout;
class VerifyPaymentTokenAPI {
private $apiClient;
private $charge;
function __construct($secretKey) {
$this->apiClient = new checkout\ApiClient($secretKey);
$this->charge = $this->apiClient->chargeService();
}
public function getCharge($paymentToken) {
$chargeResponse = $this->charge->verifyCharge($paymentToken);
return $chargeResponse;
}
}
использование
$paymentToken = new PaymentTokenAPI('sk_test_aaaaaaaaaaaaaaaaa');
$paymentToken->setInvestmentValue('1000');
try {
$token = ($paymentToken->createPaymentToken())->getId();
}catch (checkout\helpers\ApiHttpClientCustomException $e) {
echo 'Caught exception Message: ', $e->getErrorMessage(), "\n";
echo 'Caught exception Error Code: ', $e->getErrorCode(), "\n";
echo 'Caught exception Event id: ', $e->getEventId(), "\n";
}
$getCharge = new VerifyPaymentTokenAPI('sk_test_aaaaaaaaaaaaaaaaa');
try {
$charge = $getCharge->getCharge($token);
}catch (checkout\helpers\ApiHttpClientCustomException $e) {
echo 'Caught exception Message: ', $e->getErrorMessage(), "\n";
echo 'Caught exception Error Code: ', $e->getErrorCode(), "\n";
echo 'Caught exception Event id: ', $e->getEventId(), "\n";
}
Что еще я пропустил? Для простоты я опустил другие детали, которые являются необязательными только при создании токена оплаты.
Просто чтобы быть уверенным, я повторил $token
и показывает токен оплаты.
Проблема в том, что собственно токен оплаты передаваться при проверке будет переменная с именем СКО-платежно-токен, а не недавно созданный токен оплаты.
Это можно получить после успешного платежа в Лайтбокс оплаты, вот так:
if (isset($_POST['cko-payment-token'])) {
$ckoPaymentToken = $_POST['cko-payment-token'];
//then put the verifying code here, passing $ckoPaymentToken
$verifyPaymentToken = new VerifyPaymentTokenAPI('sk_test_aaaaaaaaaaaaaaaaa');
try {
$verifyPaymentTokenObj = $verifyPaymentToken->verifyPaymentToken($ckoPaymentToken);
}catch (checkout\helpers\ApiHttpClientCustomException $e) {
echo 'Caught exception Message: ', $e->getErrorMessage(), "\n";
echo 'Caught exception Error Code: ', $e->getErrorCode(), "\n";
echo 'Caught exception Event id: ', $e->getEventId(), "\n";
}
}
Других решений пока нет …