'failed_general', 'message' => '{--WERNIS_API_REQUEST_DATA_INVALID--}' ); } // END - if // Is the API id and MD5 hash there? if ((getWernisApiId() == '') || (getWernisApiMd5() == '')) { // Abort here... return array( 'status' => 'failed_general', 'message' => '{--WERNIS_API_REQUEST_DATA_MISSING--}' ); } // END - if // Add more request data $requestData['api_id'] = getWernisApiId(); $requestData['api_key'] = getWernisApiMd5(); // Is a purpose there? if (isset($requestData['purpose'])) { // Eval the purpose eval('$purpose = "' . doFinalCompilation($requestData['purpose'], FALSE) . '";'); // Prepare the purpose, it needs encoding $requestData['purpose'] = encodeString($purpose); } // END - if // Construct the request string $requestString = getWernisApiUrl() . $scriptName; // Get the raw response from the lower function $response = sendHttpPostRequest($requestString, $requestData); // Check the response header if all is fine if (!isHttpStatusOkay($response[0])) { // Something bad happend... :( return array( 'status' => 'request_error', 'message' => '{%message,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' => '{--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' => '{--WERNIS_API_REQUEST_FAILED_USER--}' ); break; case 'OWN': // Transfer to own account $return = array( 'status' => 'own_failed', 'message' => '{--WERNIS_API_REQUEST_FAILED_OWN--}' ); break; case 'AMOUNT': // Amount is depleted $return = array( 'status' => 'amount_failed', 'message' => '{--WERNIS_API_REQUEST_FAILED_AMOUNT--}' ); break; case 'AMOUNT-SEND': // API amount is depleted $return = array( 'status' => 'api_amount_failed', 'message' => '{--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' => '{%message,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 () { // Only as admin assert(isAdmin()); // Result is always failed $result = FALSE; // Prepare the request data $requestData = array( 't_uid' => getWernisRefid(), 't_md5' => getWernisPassMd5() ); // Return the result from the lower functions $return = WERNIS_SEND_REQUEST('balance.php', $requestData); // Did it went smoothly? if ($return['status'] == 'OK') { // All fine! $result = TRUE; } else { // Status failure 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 (!isWernisWithdrawActive()) { 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 request data $requestData = array( 'sub_request' => 'receive', 't_uid' => bigintval($wdsId), 't_md5' => $userMd5, 'r_uid' => getWernisRefid(), 'amount' => bigintval($amount), 'purpose' => getMaskedMessage('WERNIS_API_PURPOSE_WITHDRAW', getMemberId()) ); // 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, 'WITHDRAW'); } else { // Status failure 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 request data $requestData = array( 'sub_request' => 'send', 't_uid' => getWernisRefid(), 't_md5' => getWernisPassMd5(), 'r_uid' => bigintval($wdsId), 'amount' => bigintval($amount), 'purpose' => getMaskedMessage('WERNIS_API_PURPOSE_PAYOUT', getMemberId()) ); // 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, 'PAYOUT'); } else { // Status failure 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 translateWernisTransferStatus ($status) { // Default status is unknown $return = '{%message,WERNIS_STATUS_UNKNWOWN=' . $status . '%}'; // Construct message id $messageId = 'WERNIS_STATUS_' . $status; // Is it there? if (isMessageIdValid($messageId)) { // Then use it as message string $return = '{--' . $messageId . '--}'; } // END - if // Return the status return $return; } // Log the transfer function WERNIS_LOG_TRANSFER ($wdsId, $amount, $type = 'FAILED', $message = '', $status = '') { // Register this wernis movement sqlQueryEscaped("INSERT INTO `{?_MYSQL_PREFIX?}_user_wernis` (`userid`, `wernis_account`, `wernis_amount`, `wernis_timestamp`, `wernis_type`, `wernis_api_message`, `wernis_api_status`) VALUES (%s, %s, %s, 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: */ debugOutput('mode=' . $mode . ',points=' . $points); if (!in_array($mode, array('payout', 'withdraw'))) { // Log error and abort logDebugMessage(__FUNCTION__, __LINE__, 'userid=' . getMemberId() . ',mode=' . $mode . ',points=' . $points . ' - unknown mode detected.'); 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 / getWernisPayoutFactor(); } else { // Multiply for withdraw $points = $points * getWernisWithdrawFactor(); } // Return value //* DEBUG: */ debugOutput('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 (getWernisWithdrawFeePercent() > 0) { // Percentage fee $points += $points * getWernisWithdrawFeePercent() / 100; } elseif (getWernisWithdrawFeeFix() > 0) { // Fixed fee $points += getWernisWithdrawFeeFix(); } // Return value return $points; } //----------------------------------------------------------------------------- // Wrapper functions //----------------------------------------------------------------------------- // Wrapper function for 'wernis_refid' function getWernisRefid () { // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Get config entry $GLOBALS[__FUNCTION__] = getConfig('wernis_refid'); } // END - if // Return cache return $GLOBALS[__FUNCTION__]; } // Wrapper function for 'wernis_pass_md5' function getWernisPassMd5 () { // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Get config entry $GLOBALS[__FUNCTION__] = getConfig('wernis_pass_md5'); } // END - if // Return cache return $GLOBALS[__FUNCTION__]; } // Wrapper function for 'wernis_api_id' function getWernisApiId () { // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Get config entry $GLOBALS[__FUNCTION__] = getConfig('wernis_api_id'); } // END - if // Return cache return $GLOBALS[__FUNCTION__]; } // Wrapper function for 'wernis_api_md5' function getWernisApiMd5 () { // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Get config entry $GLOBALS[__FUNCTION__] = getConfig('wernis_api_md5'); } // END - if // Return cache return $GLOBALS[__FUNCTION__]; } // Wrapper function for 'wernis_api_url' function getWernisApiUrl () { // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Get config entry $GLOBALS[__FUNCTION__] = getConfig('wernis_api_url'); } // END - if // Return cache return $GLOBALS[__FUNCTION__]; } // Wrapper function for 'wernis_withdraw_active' function getWernisWithdrawActive () { // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Get config entry $GLOBALS[__FUNCTION__] = getConfig('wernis_withdraw_active'); } // END - if // Return cache return $GLOBALS[__FUNCTION__]; } // Wrapper function for 'wernis_payout_active' function getWernisPayoutActive () { // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Get config entry $GLOBALS[__FUNCTION__] = getConfig('wernis_payout_active'); } // END - if // Return cache return $GLOBALS[__FUNCTION__]; } // Wrapper function for 'wernis_withdraw_active' function isWernisWithdrawActive () { // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Get config entry $GLOBALS[__FUNCTION__] = (getConfig('wernis_withdraw_active') == 'Y'); } // END - if // Return cache return $GLOBALS[__FUNCTION__]; } // Wrapper function for 'wernis_payout_active' function isWernisPayoutActive () { // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Get config entry $GLOBALS[__FUNCTION__] = (getConfig('wernis_payout_active') == 'Y'); } // END - if // Return cache return $GLOBALS[__FUNCTION__]; } // Wrapper function for 'wernis_withdraw_factor' function getWernisWithdrawFactor () { // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Get config entry $GLOBALS[__FUNCTION__] = getConfig('wernis_withdraw_factor'); } // END - if // Return cache return $GLOBALS[__FUNCTION__]; } // Wrapper function for 'wernis_payout_factor' function getWernisPayoutFactor () { // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Get config entry $GLOBALS[__FUNCTION__] = getConfig('wernis_payout_factor'); } // END - if // Return cache return $GLOBALS[__FUNCTION__]; } // Wrapper function for 'wernis_withdraw_fee_percent' function getWernisWithdrawFeePercent () { // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Get config entry $GLOBALS[__FUNCTION__] = getConfig('wernis_withdraw_fee_percent'); } // END - if // Return cache return $GLOBALS[__FUNCTION__]; } // Wrapper function for 'wernis_withdraw_fee_fix' function getWernisWithdrawFeeFix () { // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Get config entry $GLOBALS[__FUNCTION__] = getConfig('wernis_withdraw_fee_fix'); } // END - if // Return cache return $GLOBALS[__FUNCTION__]; } // Wrapper function for 'wernis_payout_fee_percent' function getWernisPayoutFeePercent () { // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Get config entry $GLOBALS[__FUNCTION__] = getConfig('wernis_payout_fee_percent'); } // END - if // Return cache return $GLOBALS[__FUNCTION__]; } // Wrapper function for 'wernis_payout_fee_fix' function getWernisPayoutFeeFix () { // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Get config entry $GLOBALS[__FUNCTION__] = getConfig('wernis_payout_fee_fix'); } // END - if // Return cache return $GLOBALS[__FUNCTION__]; } // Wrapper function for 'wernis_min_payout' function getWernisMinPayout () { // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Get config entry $GLOBALS[__FUNCTION__] = getConfig('wernis_min_payout'); } // END - if // Return cache return $GLOBALS[__FUNCTION__]; } // Wrapper function for 'wernis_min_withdraw' function getWernisMinWithdraw () { // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Get config entry $GLOBALS[__FUNCTION__] = getConfig('wernis_min_withdraw'); } // END - if // Return cache return $GLOBALS[__FUNCTION__]; } // [EOF] ?>