Какой обратный URL у Ubercart после успешной оплаты? - PullRequest
1 голос
/ 23 марта 2012

У меня есть следующий код в моем простом модуле платежного шлюза Ubercart, чтобы перенаправить его в мою платежную форму продавца после оформления заказа:

  $data = array(
  'merchantId' => "1",  
  'amount' => $total,
  'orderRef' => $order->order_id,
  'currCode' => 608,
  'successUrl' => 'http://mydomain.com/cart/checkout/complete',
  'failUrl' => 'http://mydomain.com/Fail.html',
  'cancelUrl' => 'http://mydomain.com/Cancel.html',
  'payType' => 'N',
  'lang' => 'E',
  'pdesc' => t('You have !num_of_products products in your cart', array('!num_of_products' => count($order->products))),
);

$form['#action'] = 'https://test.mymerchantgateway.com/payment/pay.jsp';

В приведенном выше коде я могу инициировать платеж успешно.Проблема в том, как вернуться на мой сайт и пометить заказ как завершенный.После некоторых исследований я добавил "http://mydomain.com/cart/checkout/complete" в качестве URL-адреса возврата на мой сайт, но он не работает.

Кто-нибудь знает, каков правильный URL-адрес возврата, чтобы пометить заказ Ubercart после оформления заказа как завершенный?

Я использую drupal 6.0

1 Ответ

2 голосов
/ 02 апреля 2012

Если это ваш пользовательский модуль оплаты, вы должны создать свой собственный URL перенаправления
(вы можете создать его для всех случаев [успех, ошибка, отмена] и перенаправить после возвращения сообщения о состоянии):

1.Укажите обратный вызов меню и функцию для перехвата переменных POST, возвращаемых вашим платежным шлюзом

например, для имени модуля: uc_mypayment

/**
 * Implementation of hook_menu().
 */
function uc_mypayment_menu() {
  $items['cart/mypayment/complete'] = array(
    'title' => 'Order complete',
    'page callback' => 'uc_mypayment_complete',
    'access callback' => 'uc_mypayment_completion_access',
    'type' => MENU_CALLBACK,
    'file' => 'uc_mypayment.pages.inc',
  );
}

2. Затем вам нужно реализовать функцию обратного вызова, которая обрабатывает возвращаемые переменные:

function uc_mypayment_complete($cart_id = 0) {
  $order_id = check_plain($_POST['Param1']);
  $payment_status = check_plain($_POST['Result']);
  $payment_amount = check_plain($_POST['Charge']);
  $payment_currency = check_plain($_POST['Currency']);
  $ErrorMessage = check_plain($_POST['ErrorMessage']);
  ...
}

настроить его в соответствии с вашим протоколом шлюза.

3.В зависимости от статуса и сообщения, которое вы получаете, вы можете перенаправить на соответствующую страницу статуса (то есть, успех, ошибка, отмена), например,

//assuming you have saved your success, error and cancel Urls into the variables: uc_mypayment_success_return_url, uc_mypayment_error_return_url, uc_mypayment_cancel_return_url

switch ($payment_status) {
    case 1: // successful transaction
        $comment = t('MyPaymentGateway transaction ID: @PayId', array('@PayId' => $PayId));
        uc_payment_enter($order->order_id, 'myPaymentGateway', $payment_amount, $order->uid, NULL, $comment);
        uc_cart_complete_sale($order);
        uc_order_comment_save($order->order_id, 0, t('Payment of @amount @currency submitted through myPaymentGateway.', array('@amount' =>   $price , '@currency' => $payment_currency)), 'order', 'payment_received');
        uc_order_comment_save($order->order_id, 0, t('MyPaymentGateway reported a payment of @amount @currency', array('@amount' =>   $payment_amount , '@currency' => $payment_currency)));
        drupal_set_message($debugmessage . t('Your payment was completed.'));
        drupal_goto(variable_get('uc_mypayment_success_return_url', 'cart'));
        break;  
    case 2: //error
        $message = $debugmessage . t("Your payment failed with following error message: @Error", array('@Error' => $ErrorMessage));
        uc_order_comment_save($order->order_id, 0, $message, 'admin');
        drupal_set_message($message . t(' Please try again in a few moments.'));
        drupal_goto(variable_get('uc_mypayment_error_return_url', 'cart'));
    break;
    case 3: //user cancelled
        uc_order_comment_save($order->order_id, 0, t("The customer cancelled payment."), 'order', 'canceled' );
        drupal_set_message($debugmessage .t('Your payment was cancelled. Please feel free to continue shopping or contact us for assistance.'));
        unset($_SESSION['cart_order']);
        drupal_goto(variable_get('uc_mypayment_cancel_return_url', 'cart'));
    break;
}

Теперь вы можете просто указать один URL для всех случаев, в этом примере: cart / mypayment / complete

...