Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save torunar/6109f557e0d693e266aebe3ae5af77ae to your computer and use it in GitHub Desktop.
Save torunar/6109f557e0d693e266aebe3ae5af77ae to your computer and use it in GitHub Desktop.
diff --git a/app/addons/yandex_checkout/controllers/common/yandex_checkout.php b/app/addons/yandex_checkout/controllers/common/yandex_checkout.php
index 7eb2edd951..0c2fe8b8a3 100644
--- a/app/addons/yandex_checkout/controllers/common/yandex_checkout.php
+++ b/app/addons/yandex_checkout/controllers/common/yandex_checkout.php
@@ -30,10 +30,15 @@ if ($mode == 'check_payment') {
}
$order_info = fn_get_order_info($metadata['order_id']);
$payment_data = $order_info['payment_info'];
- if ($payment_data['id'] !== $service->getPaymentIdFromNotification($response)) {
+ if ($payment_data['payment_id'] !== $service->getPaymentIdFromNotification($response)) {
return [CONTROLLER_STATUS_DENIED];
}
+
$status = $service->getStatusFromNotification($response);
+ if (isset($payment_data['status']) && $payment_data['status'] === $status) {
+ fn_update_order_payment_info($order_info['order_id'], ['yandex_checkout.notification_received' => __('yes')]);
+ return [CONTROLLER_STATUS_NO_CONTENT];
+ }
switch ($status) {
case PaymentStatus::SUCCEEDED:
fn_change_order_status($order_info['order_id'], 'P');
@@ -80,14 +85,16 @@ if ($mode == 'check_payment') {
$service
);
try {
- $payment_status = $payment_processor->getPaymentInfo($payment_data['id'])->getStatus();
+ $payment_status = $payment_processor->getPaymentInfo($payment_data['payment_id'])->getStatus();
switch ($payment_status) {
case PaymentStatus::SUCCEEDED:
fn_change_order_status($order_info['order_id'], 'P');
+ fn_update_order_payment_info($order_info['order_id'], ['status' => $payment_status]);
fn_order_placement_routines('route', $order_info['order_id'], false);
break;
case PaymentStatus::CANCELED:
fn_set_notification('W', __('important'), __('text_transaction_cancelled'), 'S', 'transaction_cancelled');
+ fn_update_order_payment_info($order_info['order_id'], ['status' => $payment_status]);
fn_order_placement_routines('route', $order_info['order_id'], false);
break;
case PaymentStatus::WAITING_FOR_CAPTURE:
diff --git a/app/addons/yandex_checkout/payments/yandex_checkout.php b/app/addons/yandex_checkout/payments/yandex_checkout.php
index 5126d2aa59..3442777f45 100644
--- a/app/addons/yandex_checkout/payments/yandex_checkout.php
+++ b/app/addons/yandex_checkout/payments/yandex_checkout.php
@@ -23,7 +23,7 @@ try {
$response = $payment->createPayment($order_info, $processor_data);
$confirmation_url = $response->getConfirmation()->getConfirmationUrl();
- fn_update_order_payment_info($order_info['order_id'], ['id' => $response->getId()]);
+ fn_update_order_payment_info($order_info['order_id'], ['payment_id' => $response->getId()]);
fn_create_payment_form($confirmation_url, [], __('yandex_checkout.yandex_checkout'), true, 'get');
} catch (Exception $exception) {
$pp_response['reason_text'] = $exception->getMessage();
diff --git a/app/addons/yandex_checkout/src/HookHandlers/OrdersHookHandler.php b/app/addons/yandex_checkout/src/HookHandlers/OrdersHookHandler.php
index b10fd2fdbb..6849094779 100644
--- a/app/addons/yandex_checkout/src/HookHandlers/OrdersHookHandler.php
+++ b/app/addons/yandex_checkout/src/HookHandlers/OrdersHookHandler.php
@@ -33,18 +33,19 @@ class OrdersHookHandler
public function onCompletePurchase($order_id, $status_to, $status_from, $force_notification, $place_order, $order_info, $edp_data)
{
$processor_id = db_get_field('SELECT processor_id FROM ?:payment_processors WHERE processor_script = ?s AND addon = ?s', 'yandex_checkout.php', 'yandex_checkout');
- if ($order_info['payment_method']['processor_id'] != $processor_id) {
+ if (isset($order_info['payment_method']['processor_id']) && $order_info['payment_method']['processor_id'] != $processor_id) {
return;
}
if (YesNo::toBool($order_info['payment_method']['processor_params']['send_receipt'])
&& $status_to === $order_info['payment_method']['processor_params']['final_success_status']
+ && !isset($order_info['payment_info']['yandex_checkout.full_payment_receipt_id'])
) {
$payment_processor = new YandexCheckout($order_info['payment_method']['processor_params']['shop_id'], $order_info['payment_method']['processor_params']['scid'], Tygh::$app['addons.yandex_checkout.receipt_service']);
try {
- $payment_info = $payment_processor->getPaymentInfo($order_info['payment_info']['id']);
+ $payment_info = $payment_processor->getPaymentInfo($order_info['payment_info']['payment_id']);
if ($payment_info->getStatus() === PaymentStatus::SUCCEEDED) {
- $payment_processor->createReceipt($order_info);
- fn_update_order_payment_info($order_id, ['status' => PaymentStatus::SUCCEEDED]);
+ $receipt = $payment_processor->createReceipt($order_info);
+ fn_update_order_payment_info($order_id, ['yandex_checkout.full_payment_receipt_id' => $receipt->getId()]);
}
} catch (Exception $exception) {
fn_set_notification('E', __('error'), $exception->getMessage());
diff --git a/app/addons/yandex_checkout/src/Payments/YandexCheckout.php b/app/addons/yandex_checkout/src/Payments/YandexCheckout.php
index f65be1e2fb..63da9f76cc 100644
--- a/app/addons/yandex_checkout/src/Payments/YandexCheckout.php
+++ b/app/addons/yandex_checkout/src/Payments/YandexCheckout.php
@@ -126,11 +126,12 @@ class YandexCheckout
/**
* @param array $order_info
*
- * @return bool
+ * @return \YandexCheckout\Request\Receipts\AbstractReceiptResponse|null
+ *
+ * @throws BadApiRequestException
* @throws \YandexCheckout\Common\Exceptions\ApiConnectionException
* @throws \YandexCheckout\Common\Exceptions\ApiException
* @throws \YandexCheckout\Common\Exceptions\AuthorizeException
- * @throws \YandexCheckout\Common\Exceptions\BadApiRequestException
* @throws \YandexCheckout\Common\Exceptions\ForbiddenException
* @throws \YandexCheckout\Common\Exceptions\InternalServerError
* @throws \YandexCheckout\Common\Exceptions\NotFoundException
@@ -141,8 +142,6 @@ class YandexCheckout
public function createReceipt(array $order_info)
{
$receipt = $this->receipt_service->getPaymentReceiptFromOrder($order_info);
-
- $this->client->createReceipt($receipt);
- return true;
+ return $this->client->createReceipt($receipt);
}
}
\ No newline at end of file
diff --git a/app/addons/yandex_checkout/src/Services/ReceiptService.php b/app/addons/yandex_checkout/src/Services/ReceiptService.php
index 7da6df435f..ca899d6bcd 100644
--- a/app/addons/yandex_checkout/src/Services/ReceiptService.php
+++ b/app/addons/yandex_checkout/src/Services/ReceiptService.php
@@ -95,7 +95,7 @@ class ReceiptService
$receipt = [
'type' => 'payment',
- 'payment_id' => $order_info['payment_info']['id'],
+ 'payment_id' => $order_info['payment_info']['payment_id'],
'customer' => $prepayment_receipt['customer'],
'items' => $prepayment_receipt['items'],
'send' => true,
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment