public function charge($requestParameters = array())
{
$requestParameters = array_change_key_case($requestParameters, CASE_LOWER);
$requestParameters = $this->trimArray($requestParameters);
$setParameters = $authorizeParameters = $confirmParameters = $requestParameters;
$chargeType = '';
if (!empty($requestParameters['amazon_order_reference_id'])) {
$chargeType = 'OrderReference';
} elseif (!empty($requestParameters['amazon_billing_agreement_id'])) {
$chargeType = 'BillingAgreement';
} elseif (!empty($requestParameters['amazon_reference_id'])) {
switch (substr(strtoupper($requestParameters['amazon_reference_id']), 0, 1)) {
case 'P':
case 'S':
$chargeType = 'OrderReference';
$setParameters['amazon_order_reference_id'] = $requestParameters['amazon_reference_id'];
$authorizeParameters['amazon_order_reference_id'] = $requestParameters['amazon_reference_id'];
$confirmParameters['amazon_order_reference_id'] = $requestParameters['amazon_reference_id'];
break;
case 'B':
case 'C':
$chargeType = 'BillingAgreement';
$setParameters['amazon_billing_agreement_id'] = $requestParameters['amazon_reference_id'];
$authorizeParameters['amazon_billing_agreement_id'] = $requestParameters['amazon_reference_id'];
$confirmParameters['amazon_billing_agreement_id'] = $requestParameters['amazon_reference_id'];
break;
default:
throw new \Exception('Invalid Amazon Reference ID');
}
} else {
throw new \Exception('key amazon_order_reference_id or amazon_billing_agreement_id is null and is a required parameter');
}
// Set the other parameters if the values are present
$setParameters['amount'] = !empty($requestParameters['charge_amount']) ? $requestParameters['charge_amount'] : '';
$authorizeParameters['authorization_amount'] = !empty($requestParameters['charge_amount']) ? $requestParameters['charge_amount'] : '';
$setParameters['seller_note'] = !empty($requestParameters['charge_note']) ? $requestParameters['charge_note'] : '';
$authorizeParameters['seller_authorization_note'] = !empty($requestParameters['charge_note']) ? $requestParameters['charge_note'] : '';
$authorizeParameters['seller_note'] = !empty($requestParameters['charge_note']) ? $requestParameters['charge_note'] : '';
$setParameters['seller_order_id'] = !empty($requestParameters['charge_order_id']) ? $requestParameters['charge_order_id'] : '';
$setParameters['seller_billing_agreement_id'] = !empty($requestParameters['charge_order_id']) ? $requestParameters['charge_order_id'] : '';
$authorizeParameters['seller_order_id'] = !empty($requestParameters['charge_order_id']) ? $requestParameters['charge_order_id'] : '';
$authorizeParameters['capture_now'] = !empty($requestParameters['capture_now']) ? $requestParameters['capture_now'] : false;
$response = $this->makeChargeCalls($chargeType, $setParameters, $confirmParameters, $authorizeParameters);
return $response;
}