'failed_general', 'message' => getMessage('WERNIS_API_REQUEST_DATA_INVALID') ); } // END - if // Is the API id and MD5 hash there? if ((getConfig('wernis_api_id') == '') || (getConfig('wernis_api_md5') == '')) { // Abort here... return array( 'status' => 'failed_general', 'message' => getMessage('WERNIS_API_REQUEST_DATA_MISSING') ); } // END - if // Add more request data $requestData['api_id'] = getConfig('wernis_api_id'); $requestData['api_key'] = getConfig('wernis_api_md5'); // Construct the request string $requestString = getConfig('wernis_api_url') . $scriptName; // Get the raw response from the lower function $response = sendPostRequest($requestString, $requestData); // Check the response header if all is fine if (strpos($response[0], '200') === false) { // Something bad happend... :( return array( 'status' => 'request_error', 'message' => getMaskedMessage('WERNIS_API_REQUEST_ERROR', $response[0]) ); } // END - if // All (maybe) fine so remove the response header from server $responseLine = '*INVALID*'; for ($idx = (count($response) - 1); $idx > 1; $idx--) { $line = trim($response[$idx]); if (!empty($line)) { $responseLine = $line; break; } // END - if } // END - for // Is the response leaded by a & symbol? if (substr($responseLine, 0, 1) != '&') { // Something badly happened on server-side return array( 'status' => 'request_problem', 'message' => sprintf(getMessage('WERNIS_API_REQUEST_PROBLEM'), $response[0], secureString($responseLine)) ); } // END - if // Remove the leading & (which can be used in Flash) $responseLine = substr($responseLine, 1); // Bring back the response $data = explode('=', $responseLine); // Default return array (should not stay empty) $return = array(); // We use only the first two entries (which shall be fine) if ($data[0] === 'error') { // The request has failed... :( switch ($data[1]) { case '404': // Invalid API id case 'AUTH': // Authorization has failed $return = array( 'status' => 'auth_failed', 'message' => getMessage('WERNIS_API_REQUEST_FAILED_AUTH') ); break; case 'LOCKED': // User account is locked! case 'PASS': // Bad passphrase entered case 'USER': // Missing account or invalid password $return = array( 'status' => 'user_failed', 'message' => getMessage('WERNIS_API_REQUEST_FAILED_USER') ); break; case 'OWN': // Transfer to own account $return = array( 'status' => 'own_failed', 'message' => getMessage('WERNIS_API_REQUEST_FAILED_OWN') ); break; case 'AMOUNT': // Amount is depleted $return = array( 'status' => 'amount_failed', 'message' => getMessage('WERNIS_API_REQUEST_FAILED_AMOUNT') ); break; case 'AMOUNT-SEND': // API amount is depleted $return = array( 'status' => 'api_amount_failed', 'message' => getMessage('WERNIS_API_REQUEST_FAILED_API_AMOUNT') ); break; default: // Unknown error (maybe new?) logDebugMessage(__FUNCTION__, __LINE__, sprintf("Unknown error %s from WDS66 API received.", $data[1])); $return = array( 'status' => 'request_failed', 'message' => getMaskedMessage('WERNIS_API_REQUEST_FAILED', $data[1]) ); break; } } else { // All fine here $return = array( 'status' => 'OK', 'response' => $responseLine ); } // Return the result return $return; } // Tests the function by calling balance.php on the API function WERNIS_TEST_API () { // Result is always failed $result = false; // Return the result from the lower functions $return = WERNIS_SEND_REQUEST('balance.php'); if ($return['status'] == 'OK') { // All fine! $result = true; } else { // Status failture text WERNIS_STATUS_MESSAGE($return['message'], $return['status']); } // Return result return $result; } // Widthdraw this amount function WERNIS_EXECUTE_WITHDRAW ($wdsId, $userMd5, $amount) { // Is the sponsor extension installed? if (getConfig('wernis_withdraw_active') != 'Y') { if (!isExtensionActive('sponsor')) { // No, abort here return false; } elseif (!isSponsor()) { // No sponsor, not allowed to withdraw! return false; } } // END - if // Default is failed attempt $result = false; // Prepare the purpose eval('$purpose = "' . preCompileCode(getMaskedMessage('WERNIS_API_PURPOSE_WITHDRAW', getMemberId())) . '";'); // Prepare the request data $requestData = array( 'sub_request' => 'receive', 't_uid' => bigintval($wdsId), 't_md5' => $userMd5, 'r_uid' => getConfig('wernis_refid'), 'amount' => bigintval($amount), 'purpose' => encodeString($purpose, false) ); // Return the result from the lower functions $return = WERNIS_SEND_REQUEST('book.php', $requestData); if ($return['status'] == 'OK') { // All fine! $result = true; // Log the transfer WERNIS_LOG_TRANSFER($wdsId, $amount, 'IN'); } else { // Status failture text WERNIS_STATUS_MESSAGE($return['message'], $return['status']); // Log the transfer WERNIS_LOG_TRANSFER($wdsId, $amount, 'FAILED', $return['message'], $return['status']); } // Return result return $result; } // Payout this amount function WERNIS_EXECUTE_PAYOUT ($wdsId, $amount) { // Default is failed attempt $result = false; // Prepare the purpose eval('$purpose = "' . preCompileCode(getMaskedMessage('WERNIS_API_PURPOSE_PAYOUT', getMemberId())) . '";'); // Prepare the request data $requestData = array( 'sub_request' => 'send', 't_uid' => getConfig('wernis_refid'), 't_md5' => getConfig('wernis_pass_md5'), 'r_uid' => bigintval($wdsId), 'amount' => bigintval($amount), 'purpose' => encodeString($purpose, false) ); // Return the result from the lower functions $return = WERNIS_SEND_REQUEST('book.php', $requestData); if ($return['status'] == 'OK') { // All fine! $result = true; // Log the transfer WERNIS_LOG_TRANSFER($wdsId, $amount, 'OUT'); } else { // Status failture text WERNIS_STATUS_MESSAGE($return['message'], $return['status']); // Log the transfer WERNIS_LOG_TRANSFER($wdsId, $amount, 'FAILED', $return['message'], $return['status']); } // Return result return $result; } // Translate the status IN/OUT function WERNIS_TRANSFER_STATUS ($status) { // Default status $return = getMaskedMessage('WERNIS_STATUS_UNKNWOWN', $status); switch ($status) { case 'IN': // Withdraw $return = getMessage('WERNIS_STATUS_WITHDRAW'); break; case 'OUT': // Payout $return = getMessage('WERNIS_STATUS_PAYOUT'); break; case 'FAILED': // Payout $return = getMessage('WERNIS_STATUS_FAILED'); break; } // Return the status return $return; } // Log the transfer function WERNIS_LOG_TRANSFER ($wdsId, $amount, $type = 'FAILED', $message = '', $status = '') { // Register this wernis movement SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_user_wernis` (`userid`,`wernis_account`,`wernis_amount`,`wernis_timestamp`,`wernis_type`,`wernis_api_message`,`wernis_api_status`) VALUES (%d, %d, %d, UNIX_TIMESTAMP(), '%s', '%s', '%s')", array(getMemberId(), bigintval($wdsId), bigintval($amount), $type, $message, $status), __FUNCTION__, __LINE__); } // Take fees and factor function WERNIS_TAKE_FEE ($points, $mode) { // Payout or withdraw are allowed modes! //* DEBUG: */ outputHtml("mode={$mode},points={$points}
"); if (!in_array($mode, array('payout', 'withdraw'))) { // Log error and abort logDebugMessage(__FUNCTION__, __LINE__, "userid={getMemberId()},mode={$mode},points={$points}"); return false; } // END - if // Is there a percentage or fixed fee? if (getConfig('wernis_'.$mode.'_fee_percent') > 0) { // Percentage fee $points -= $points * getConfig('wernis_'.$mode.'_fee_percent') / 100; } elseif (getConfig('wernis_'.$mode.'_fee_fix') > 0) { // Fixed fee $points -= getConfig('wernis_'.$mode.'_fee_fix'); } // Divide/multiply the factor if ($mode == 'payout') { // Divide for payout $points = $points / getConfig('wernis_payout_factor'); } else { // Multiply for withdraw $points = $points * getConfig('wernis_withdraw_factor'); } // Return value //* DEBUG: */ outputHtml("mode={$mode},points={$points}
"); return $points; } // Add withdraw fees and factor function WERNIS_ADD_WITHDRAW_FEE ($points) { // Is there a percentage or fixed fee? if (getConfig('wernis_withdraw_fee_percent') > 0) { // Percentage fee $points += $points * getConfig('wernis_withdraw_fee_percent') / 100; } elseif (getConfig('wernis_withdraw_fee_fix') > 0) { // Fixed fee $points += getConfig('wernis_withdraw_fee_fix'); } // Return value return $points; } // Add all fees to the array function WERNIS_ADD_FEES_TO_ARRAY (&$array) { // Is the array an array? ;-) if (!is_array($array)) { // Log error and return logDebugMessage(__FUNCTION__, __LINE__, 'Type ' . gettype($array) . ' != array.'); return; } // END - if // Add both factors $array['withdraw_factor'] = translateComma(getConfig('wernis_withdraw_factor')); // Add all fees $array['withdraw_fee_percent'] = translateComma(getConfig('wernis_withdraw_fee_percent')); $array['withdraw_fee_fix'] = translateComma(getConfig('wernis_withdraw_fee_fix')); } // [EOF] ?>