function buyPostage() { global $messageStack, $currencies; $amount = db_prepare_input($_POST['endicia_postage']); if (!in_array($amount, array('10', '25', '100', '250', '500', '1000'))) { $messageStack->add('The postage purchase amount submitted is an invalid amount!', 'error'); return false; } $data = array('RecreditRequest' => array('RequesterID' => MODULE_SHIPPING_ENDICIA_PARTNER_ID, 'RequestID' => time(), 'CertifiedIntermediary' => array('AccountID' => MODULE_SHIPPING_ENDICIA_ACCOUNT_NUMBER, 'PassPhrase' => MODULE_SHIPPING_ENDICIA_PASS_PHRASE), 'RecreditAmount' => $amount)); $url = MODULE_SHIPPING_ENDICIA_TEST_MODE == 'Prod' ? MODULE_SHIPPING_ENDICIA_WSDL_URL : MODULE_SHIPPING_ENDICIA_TEST_WSDL_URL; $client = new SoapClient($url, array('trace' => 1)); try { $response = $client->BuyPostage($data); if ($response->RecreditRequestResponse->Status == 0) { $messageStack->add(sprintf(SHIPPING_ENDICIA_PURCHASE_SUCCESS_MSG, $currencies->format($response->RecreditRequestResponse->CertifiedIntermediary->PostageBalance), $response->RecreditRequestResponse->CertifiedIntermediary->SerialNumber), 'success'); } else { $messageStack->add(TEXT_ERROR . ' (' . $response->RecreditRequestResponse->Status . ') ' . $response->RecreditRequestResponse->ErrorMessage, 'error'); return false; } } catch (SoapFault $exception) { $messageStack->add("SOAP error ({$exception->faultcode}) {$exception->faultstring}", 'error'); return false; } return true; }