Follow up to #2907071: Add the configuration form..
Blocked by #2912356: Allow for altering requests in alterRequestParams.

Need to add a way to configure sandbox modes and execute them. See commerce_amazon_lpa_commerce_amazon_lpa_request_params_alter

/**
 * Implements hook_commerce_amazon_lpa_request_params_alter().
 */
function commerce_amazon_lpa_commerce_amazon_lpa_request_params_alter(array &$params, $type, $data) {
  // We must be in sandbox, and have simulation turned on to alter the params
  // and set simulation messages.
  $simulation_code = variable_get('commerce_amazon_lpa_simulation', '_none');
  if (!AmazonLPA::is_sandbox() || $simulation_code == '_none') {
    return;
  }
  // Do not run simulations during IPN.
  if (isset($_SERVER['HTTP_X_AMZ_SNS_MESSAGE_TYPE'])) {
    return;
  }

  switch ($type) {
    case 'authorize':
      switch ($simulation_code) {
        case 'Authorizations_InvalidPaymentMethod':
          $params['seller_authorization_note'] = '{"SandboxSimulation": {"State":"Declined", "ReasonCode":"InvalidPaymentMethod", "PaymentMethodUpdateTimeInMins":1}}';
          break;

        case 'Authorizations_AmazonRejected':
          $params['seller_authorization_note'] = '{"SandboxSimulation": {"State":"Declined", "ReasonCode":"AmazonRejected"}}';
          break;

        case 'Authorizations_AmazonClosed':
          $params['seller_authorization_note'] = '{"SandboxSimulation": {"State":"Closed", "ReasonCode":"AmazonClosed"}} ';
          break;

        case 'Authorizations_TransactionTimedOut':
          $params['seller_authorization_note'] = '{"SandboxSimulation": {"State":"Declined", "ReasonCode":"TransactionTimedOut"}}';
          break;

        case 'Captures_Pending':
          if (AmazonLPA::get_capture_mode() == AmazonLPA::CAPTURE_AUTH_CAPTURE) {
            $params['seller_authorization_note'] = '{"SandboxSimulation": {"State":"Pending"}}';
          }
          break;

        case 'Captures_AmazonRejected':
          if (AmazonLPA::get_capture_mode() == AmazonLPA::CAPTURE_AUTH_CAPTURE) {
            $params['seller_authorization_note'] = '{"SandboxSimulation": {"State":"Declined", "ReasonCode":"AmazonRejected"}}';
          }
          break;

        case 'Captures_AmazonClosed':
          if (AmazonLPA::get_capture_mode() == AmazonLPA::CAPTURE_AUTH_CAPTURE) {
            $params['seller_authorization_note'] = '{"SandboxSimulation": {"State":"Closed", "ReasonCode":"AmazonClosed"}}';
          }
          break;
        case 'Authorizations_ExpiredUnused':
          $params['seller_authorization_note'] = '{"SandboxSimulation": {"State":"Closed", "ReasonCode":"ExpiredUnused", "ExpirationTimeInMins":1}}';
          break;
      }
      break;

    case 'cancel_order_reference':
      break;

    case 'capture':
      switch ($simulation_code) {
        case 'Captures_Pending':
          $params['seller_capture_note'] = '{"SandboxSimulation": {"State":"Pending"}}';
          break;

        case 'Captures_AmazonRejected':
          $params['seller_capture_note'] = '{"SandboxSimulation": {"State":"Declined", "ReasonCode":"AmazonRejected"}}';
          break;

        case 'Captures_AmazonClosed':
          $params['seller_capture_note'] = '{"SandboxSimulation": {"State":"Closed", "ReasonCode":"AmazonClosed"}}';
          break;
      }
      break;

    case 'close_authorization':
      break;

    case 'close_order_reference':
      switch ($simulation_code) {
        case 'OrderReference_AmazonClosed':
          $params['closure_reason'] = '{"SandboxSimulation": {"State":"Closed", "ReasonCode":"AmazonClosed"}}';
          break;
      }
      break;

    case 'confirm_order_reference':
      break;

    case 'get_capture_details':
      break;

    case 'get_order_reference':
      break;

    case 'refund':
      switch ($simulation_code) {
        case 'Refund_AmazonRejected':
          $params['seller_refund_note'] = '{"SandboxSimulation": {"State":"Declined", "ReasonCode":"AmazonRejected"}}';
          break;
      }
      break;

    case 'set_order_reference':
      break;
  }
}
Support from Acquia helps fund testing for Drupal Acquia logo

Comments

mglaman created an issue. See original summary.

mglaman’s picture

Issue summary: View changes
mglaman’s picture

mglaman’s picture

Issue summary: View changes

Fix issue summary.

mglaman’s picture

Issue summary: View changes

Just add 7.,x code for easy reference.

czigor’s picture

Status: Postponed » Needs review

This is totally untested, still need to figure out how to make amazon pay work.

czigor’s picture

  • mglaman committed 8db4b56 on 8.x-2.x authored by czigor
    Issue #2909310 by czigor: Sandbox simulation modes
    
mglaman’s picture

Status: Needs review » Fixed

This works, however it has uncovered some logic handling bugs. Invalid payment methods are allowing checkout to continue.

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.