Documentation
Getting Started
Welcome to the BitcoTasks documentation. Bellow you will find all required informations to integrate our offerwall into your website in just few minutes.
Before integrating our offerwall, make sure you're registered on our website, account is required to use any of our tools.
Add your Website
To be able to integrate our offerwall, first you have to add your website. Once you have added your website you will have an API KEY and a SECRET KEY, that you will need to integrate our offerwall.
To register your website into our service, please follow these steps:
- Login to your BitcoTasks account.
- You should now see the Add New App button at sidebar. Click this button to add your first website or app.
- Set your App Name, URL and application type (platform) and proceed to next step.
- Set your Currency Name in plural form (e.g. Points, Tokens, Coins...), Currency Round (the number of decimals your currency can have, up to 2 decimals) and Exchange Rate (how many of your website currency units will a user earn for every 1 USD that we will pay you).
- Set your Postback URL. Whenever a user completes an offer, we will make a call to this URL by sending all the information needed to help you to credit the virtual currency to your users.
- Done! You have add your website, one of our team members will review it and once it is approved you will receive an email in the meantime you can continue with the integration process. You will find more informatons about postback integration in next chapters of this documentation.
Integrate Offerwall
Our Offerwall enables users to benefit from incentives and rewards thanks to segmented, automatically translated ads. Our offerwall will adapt to any screen and will show offers to your users.
Before being able to integrate our offerwall, you must register your website first. Once you have registered your website you will have an API KEY, SECRET KEY and a BEARER TOKEN, that you will need in the following steps.
- Click on My Apps button on sidebar.
-
From your websites list, you can get your API and Secret keys, anyway if you click Edit button on any of your apps you will be able to get your full integration code of the offerwall.
You can copy the offerwall code and place the code into your website.
Website Integration
If you are looking to integrate the offerwall into your website, either open the offerwall in a new tab (for example using the JavaScript command below) or show the offerwall in an iFrame.
JavaScript Integration
window.open("https://bitcotasks.com//offerwall/[API_KEY]/[USER_ID]")
iFrame Integration
<iframe scrolling="yes"
frameborder="0" src="https://bitcotasks.com//offerwall/[API_KEY]/[USER_ID]"></iframe>
Replace [API_KEY] with your website api key and [USER_ID] by the unique identifier code of the user of your site who is viewing the wall.
API Integration
If you want to take PTC campaign data directly, and adjust its appearance to the appearance of your website.
curl -X GET https://bitcotasks.com/api/[API_KEY]/[USER_ID]/[USER_IP_ADDRESS] -H "Authorization: Bearer [BEARER_TOKEN]"
Our server will return with the following JSON Response.
{
"status": "200",
"message": "success",
"data": [{
"id": "8098",
"image": "",
"title": "Free spin, win BTC! Up to 5 BTC daily! \ud83e\udd11",
"description": "760% deposit bonus! Earn While Playing!",
"duration": "30",
"reward": "600.00",
"currency_name": "Cash",
"url": "https:\/\/bitcotasks.com\/view\/eHpzcjlteGJreGx3cHE0bnw0NTUyfG96YWJ2bHhieXJkeXYyOW5jeWJkcDc0NjRyODJyaQ==",
"boosted_campaign": false,
"ad_type": "Iframe"
}, {
"id": "11206",
"image": "https:\/\/bitcotasks.com\/files\/ptc\/ptc-1-qgow52jm.png",
"title": "BitcoTasks BLOG",
"description": "Check out the new bitcotasks blog",
"duration": "10",
"reward": "40.00",
"currency_name": "Cash",
"url": "https:\/\/bitcotasks.com\/view\/eHNueHQ0aXliMnZydG9kYXw0NTUyfG96YWJ2bHhieXJkeXYyOW5jeWJkcDc0NjRyODJyaQ==",
"boosted_campaign": false,
"ad_type": "Window"
}]
}
API PHP Integration Example
function requestWithFileGetContents($url, $token) {
$options = [
'http' => [
'header' => "Authorization: Bearer $token\r\n"
]
];
$context = stream_context_create($options);
return file_get_contents($url, false, $context);
}
function requestWithCurl($url, $token) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer $token"
]);
$response = curl_exec($ch);
if(curl_errno($ch)) {
$response = false;
}
curl_close($ch);
return $response;
}
$url = 'https://bitcotasks.com/api/[API_KEY]/[USER_ID]/[USER_IP_ADDRESS]';
$token = '[BEARER_TOKEN]';
$response = $this->requestWithFileGetContents($url, $token);
if ($response === false) {
$response = $this->requestWithCurl($url, $token);
}
if($response) {
$responseArray = json_decode($response, true);
if(isset($responseArray['status']) && $responseArray['status'] == 200) {
foreach($responseArray['data'] as $ptc) {
echo $ptc['title']."\r\n";
echo $ptc['description']."\r\n";
echo $ptc['duration']."\r\n";
echo $ptc['url']."\r\n";
}
}elseif(isset($responseArray['status']) && $responseArray['status'] != 200) {
echo $responseArray['message'];
}
}else{
echo "Request Failed";
}
Replace [API_KEY] with your website api key, [BEARER_TOKEN] with your website's generated token, you can generate your Bearer Token when you edit your app, [USER_IP_ADDRESS] with your user's ip, and [USER_ID] by the unique identifier code of the user of your site who is viewing the wall.
API Integration for Vie Script
If you want to take PTC campaign data directly, and adjust its appearance to the appearance of your website.
Our server will return with the following JSON Response.
{
"status": "200",
"message": "success",
"data": [{
"id": "8098",
"image": "",
"title": "Free spin, win BTC! Up to 5 BTC daily! \ud83e\udd11",
"description": "760% deposit bonus! Earn While Playing!",
"duration": "30",
"reward": "600.00",
"currency_name": "Cash",
"url": "https:\/\/bitcotasks.com\/view\/eHpzcjlteGJreGx3cHE0bnw0NTUyfG96YWJ2bHhieXJkeXYyOW5jeWJkcDc0NjRyODJyaQ==",
"boosted_campaign": false,
"ad_type": "Iframe"
}, {
"id": "11206",
"image": "https:\/\/bitcotasks.com\/files\/ptc\/ptc-1-qgow52jm.png",
"title": "BitcoTasks BLOG",
"description": "Check out the new bitcotasks blog",
"duration": "10",
"reward": "40.00",
"currency_name": "Cash",
"url": "https:\/\/bitcotasks.com\/view\/eHNueHQ0aXliMnZydG9kYXw0NTUyfG96YWJ2bHhieXJkeXYyOW5jeWJkcDc0NjRyODJyaQ==",
"boosted_campaign": false,
"ad_type": "Window"
}]
}
PTC Controller Example
private function requestWithFileGetContents($url, $token) {
$options = [
'http' => [
'header' => "Authorization: Bearer $token\r\n"
]
];
$context = stream_context_create($options);
return file_get_contents($url, false, $context);
}
private function requestWithCurl($url, $token) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer $token"
]);
$response = curl_exec($ch);
if(curl_errno($ch)) {
$response = false;
}
curl_close($ch);
return $response;
}
public function index()
{
$this->data['page'] = 'Paid To Click';
$this->data['totalReward'] = 0;
$this->data['ptcAds'] = $this->m_ptc->availableAds($this->data['user']['id']);
$this->data['totalAds'] = count($this->data['ptcAds']);
foreach ($this->data['ptcAds'] as $ad) {
$this->data['totalReward'] += $ad['reward'];
}
$url = 'https://bitcotasks.com/api/[API_KEY]/'.$this->data['user']['id'].'/'.$this->input->ip_address();
$token = '[BEARER_TOKEN]';
$response = $this->requestWithFileGetContents($url, $token);
if ($response === false) {
$response = $this->requestWithCurl($url, $token);
}
if($response) {
$responseArray = json_decode($response, true);
if(isset($responseArray['status']) && $responseArray['status'] == 200) {
$this->data['bitcotasks_ptc'] = $responseArray['data'];
}elseif(isset($responseArray['status']) && $responseArray['status'] != 200) {
$this->data['error_message'] = $responseArray['message'];
}
}
$this->render('ptc', $this->data);
}
Replace [API_KEY] with your website api key, [BEARER_TOKEN] with your website's generated token, you can generate your Bearer Token when you edit your app.
Android Integration
If you are looking to integrate the offerwall into your Android app, either open the offerwall in Google Chrome or use a web view to show the offerwall inside your app.
URL
https://bitcotasks.com//offerwall/[API_KEY]/[USER_ID]
WebView Example
WebView myWebView = new WebView(activityContext);
setContentView(myWebView);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
myWebView.loadUrl("https://bitcotasks.com//offerwall/[API_KEY]/[USER_ID]");
Replace [API_KEY] with your website api key and [USER_ID] by the unique identifier code of the user of your site who is viewing the wall.
iOS Integration
If you are looking to integrate the offerwall into your iOS app, either open the offerwall in Safari or use a web view to show the offerwall inside your app.
URL
https://bitcotasks.com//offerwall/[API_KEY]/[USER_ID]
WebView Example
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {
var webView: WKWebView!
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
let myURL = URL(string:"https://bitcotasks.com//offerwall/[API_KEY]/[USER_ID]")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}}
Replace [API_KEY] with your website api key and [USER_ID] by the unique identifier code of the user of your site who is viewing the wall.
React Native
If you are looking to integrate the offerwall into your React Native app, either open the offerwall in the default browser of the user with the Linking-API or use react-native-webview to show the offerwall inside your app.
Linking
import { Linking } from 'react-native';
Linking.openURL('https://bitcotasks.com//offerwall/[API_KEY]/[USER_ID]');
React Native WebView
/*
Add react-native-webview to your dependencies. Using Yarn:
yarn add react-native-webview
Using npm:
npm install --save react-native-webview
Using Expo:
npx expo install react-native-webview
*/
import { WebView } from 'react-native-webview';
return <WebView source={{ uri: 'https://bitcotasks.com//offerwall/[API_KEY]/[USER_ID]' }} />;
Replace [API_KEY] with your website api key and [USER_ID] by the unique identifier code of the user of your site who is viewing the wall.
Offerwall Parameters
Bellow you can see parameters supported by our offerwall. Make sure you properly replace them during your offerwall integration.
Parameter | Description | Value |
---|---|---|
[API_KEY] |
Unique API Code provided when you registered your website | varchar(32) |
[USER_ID] |
Unique identifier code of the user of your site | varchar(32) |
Intregrate Offerwall on Best Faucet Scripts
We have provide you some Best Faucet scripts intregartion method here,with this tutorial any faucet owner can easyly intregrate on there script
Vie Faucet 4.3 Integration
It takes only three steps to integrate Bitcotasks offerwall into your VieFaucet script.Please find below steps.
First open file - application/controllers/wh.php
and enter the following code before last closing bracket (}
).
Do not forget to enter your secret key under variable $secret
from the BitcoTasks's dashboard.
Otherwise,your users will not be credited properly since postback will not work.
public function bitcotasks()
{
$secret = ""; // UPDATE YOUR SECRET KEY
$hold = 3; // UPDATE HOLD DAYS IF YOU USE HOLD
$minHold= 0.5; // Reward Lower than this amount will not be hold
$userId = isset($_REQUEST['subId']) ? $this->db->escape_str($_REQUEST['subId']) : null;
$transactionId = isset($_REQUEST['transId']) ? $this->db->escape_str($_REQUEST['transId']) : null;
$reward = isset($_REQUEST['reward']) ? $this->db->escape_str($_REQUEST['reward']) : null;
$action = isset($_REQUEST['status']) ? $this->db->escape_str($_REQUEST['status']) : null;
$userIp = isset($_REQUEST['userIp']) ? $this->db->escape_str($_REQUEST['userIp']) : "0.0.0.0";
$signature = isset($_REQUEST['signature']) ? $this->db->escape_str($_REQUEST['signature']) : null;
if (md5($userId . $transactionId . $reward . $secret) != $signature) {
echo "ERROR: Signature doesn't match";
return;
}
$reward = $reward * $this->data['settings']['currency_rate'];
$trans = $this->m_offerwall->getTransaction($transactionId, 'bitcotasks');
if ($action == 2) {
$this->m_offerwall->reduceUserBalance($userId, abs($reward));
$this->m_offerwall->insertTransaction($userId, 'BitcoTasks', $userIp, $reward, $transactionId, 1, time());
echo "ok";
} else {
if (!$trans) {
$hold = 0;
if ($reward > $minHold) {
$hold = 3; // UPDATE HOLD DAYS Which you Use for hold
}
if ($hold == 0) {
$offerId = $this->m_offerwall->insertTransaction($userId, 'BitcoTasks', $userIp, $reward, $transactionId, 2, time());
$this->m_offerwall->updateUserBalance($userId, $reward);
$this->m_core->addNotification($userId, currency($reward, $this->data['settings']['currency_rate']) . " from BitcoTasks Offer #" . $offerId . " was credited to your balance.", 1);
$user = $this->m_core->get_user_from_id($userId);
$this->m_core->addExp($user['id'], $this->data['settings']['offerwall_exp_reward']);
if (($user['exp'] + $this->data['settings']['offerwall_exp_reward']) >= ($user['level'] + 1) * 100) {
$this->m_core->levelUp($user['id']);
}
} else {
$availableAt = time() + $hold * 86400;
$offerId = $this->m_offerwall->insertTransaction($userId, 'BitcoTasks', $userIp, $reward, $transactionId, 0, $availableAt);
$this->m_core->addNotification($userId, "Your BitcoTasks Offer #" . $offerId . " is pending approval.", 0);
}
echo "ok";
} else {
echo "DUP";
}
}
}
Second step is to add our offerwall in the UI. Inside application/controllers/offerwall.php
file, add this code before last closing bracket (}
).
Don't forget to place on proper place your API key from the dashboard under $api_key
variable.
public function bitcotasks()
{
$api_key=""; // UPDATE YOUR API KEY HERE
$this->data['page'] = 'BitcoTasks Offerwall';
$this->data['iframe'] = '<iframe style="width:100%;height:800px;border:0;padding:0;margin:0;" scrolling="yes" frameborder="0" src="https://bitcotasks.com/offerwall/' . $api_key . '/' . $this->data['user']['id'] . '"></iframe>';
$this->data['wait'] = 3; // UPDATE YOUR HOLD TIME
$this->render('offerwall', $this->data);
}
Third step is to add BitcoTasks's offerwall inside your sidebar/ UserPanel Menu on Vie Faucet.
Go to this file application/views/user_template/template.php
,
and place this code above or under some of the existing offerwalls list.
<li><a href="<?= site_url('offerwall/bitcotasks') ?>" key="t-bitcotasks">BitcoTasks</a></li>
Final Step You must Add below code on your config files
Open Application/Config/config.php
Goto $config['csrf_exclude_uris']
this line
Add this code 'wh/bitcotasks',
on that line.
How to set site on BitcoTasks?
PostBack URL Should be : https://yourdomain.com/wh/bitcotasks
Vie Faucet 4.4 Integration
It takes only three steps to integrate BitcoTasks offerwall into your VieFaucet script.Please find below steps.
First open file - application/controllers/wh.php
and enter the following code before last closing bracket (}
).
Do not forget to enter your secret key under variable $secret
from the BitcoTasks's dashboard.
Otherwise,your users will not be credited properly since postback will not work.
public function bitcotasks()
{
$secret = ""; // UPDATE YOUR SECRET KEY
$hold = 3; // UPDATE HOLD DAYS IF YOU USE HOLD
$minHold= 0.5; // Reward Lower than this amount will not be hold
$userId = isset($_REQUEST['subId']) ? $this->db->escape_str($_REQUEST['subId']) : null;
$transactionId = isset($_REQUEST['transId']) ? $this->db->escape_str($_REQUEST['transId']) : null;
$reward = isset($_REQUEST['reward']) ? $this->db->escape_str($_REQUEST['reward']) : null;
$action = isset($_REQUEST['status']) ? $this->db->escape_str($_REQUEST['status']) : null;
$userIp = isset($_REQUEST['userIp']) ? $this->db->escape_str($_REQUEST['userIp']) : "0.0.0.0";
$signature = isset($_REQUEST['signature']) ? $this->db->escape_str($_REQUEST['signature']) : null;
if (md5($userId . $transactionId . $reward . $secret) != $signature) {
echo "ERROR: Signature doesn't match";
return;
}
$reward = $reward * $this->data['settings']['currency_rate'];
$trans = $this->m_offerwall->getTransaction($transactionId, 'BitcoTasks');
if ($action == 2) {
$this->m_offerwall->reduceUserBalance($userId, abs($reward));
$this->m_offerwall->insertTransaction($userId, 'BitcoTasks', $userIp, $reward, $transactionId, 1, time());
echo "ok";
} else {
if (!$trans) {
$hold = 0;
if ($reward > $minHold) {
$hold = 3; // UPDATE HOLD DAYS Which you Use for hold
}
if ($hold == 0) {
$offerId = $this->m_offerwall->insertTransaction($userId, 'BitcoTasks', $userIp, $reward, $transactionId, 2, time());
$this->m_offerwall->updateUserBalance($userId, $reward);
$this->m_core->addNotification($userId, currencyDisplay($reward, $this->data['settings']) . " from BitcoTasks Offer #" . $offerId . " was credited to your balance.", 1);
$user = $this->m_core->getUserFromId($userId);
$this->m_core->addExp($user['id'], $this->data['settings']['offerwall_exp_reward']);
if (($user['exp'] + $this->data['settings']['offerwall_exp_reward']) >= ($user['level'] + 1) * 100) {
$this->m_core->levelUp($user['id']);
}
} else {
$availableAt = time() + $hold * 86400;
$offerId = $this->m_offerwall->insertTransaction($userId, 'BitcoTasks', $userIp, $reward, $transactionId, 0, $availableAt);
$this->m_core->addNotification($userId, "Your BitcoTasks Offer #" . $offerId . " is pending approval.", 0);
}
echo "ok";
} else {
echo "DUP";
}
}
}
Second step is to add our offerwall in the UI. Inside application/controllers/offerwall.php
file, add this code before last closing bracket (}
).
Don't forget to place on proper place your API key from the dashboard under $api_key
variable.
public function bitcotasks()
{
$api_key=""; // UPDATE YOUR API KEY HERE
$this->data['page'] = 'BitcoTasks Offerwall';
$this->data['iframe'] = '<iframe style="width:100%;height:800px;border:0;padding:0;margin:0;" scrolling="yes" frameborder="0" src="https://bitcotasks.com/offerwall/' . $api_key . '/' . $this->data['user']['id'] . '"></iframe>';
$this->data['wait'] = 3; // UPDATE YOUR HOLD TIME
$this->render('offerwall', $this->data);
}
Third step is to add BitcoTasks's offerwall inside your sidebar/ UserPanel Menu on Vie Faucet.
Go to this file application/views/user_template/template.php
,
and place this code above or under some of the existing offerwalls list.
<li><a href="<?= site_url('offerwall/bitcotasks') ?>" key="t-bitcotasks">BitcoTasks</a></li>
Final Step You must Add below code on your config files
Open Application/Config/config.php
Goto $config['csrf_exclude_uris']
this line
Add this code 'wh/bitcotasks',
on that line.
How to set site on BitcoTasks?
PostBack URL Should be : https://yourdomain.com/wh/bitcotasks
CryptoFaucet/ClaimBits Integration
ClaimBits/CryptoFaucet is a Very populer of Crypto Faucet which brings plenty of different features together into a complete system.
BitcoTasks integration is very easy in this script - Just need to create 1 file, Modify 2 line of code, and that's it! Less than 5 minutes and you can bring BitcoTasks offerwall to your users.
To create Postback file - open system/gateways/
and create file bitcotasks.php
, put following code in this file:
<?php
define('BASEPATH', true);
require('../init.php');
$secret = "YOUR SECRET KEY"; //Enter Your BitcoTasks SECRET KEY
$userId = isset($_REQUEST['subId']) ? $db->EscapeString($_REQUEST['subId']) : null;
$survey = isset($_REQUEST['transId']) ? $db->EscapeString($_REQUEST['transId']) : null;
$reward = isset($_REQUEST['reward']) ? $db->EscapeString($_REQUEST['reward']) : null;
$payout = isset($_REQUEST['payout']) ? $db->EscapeString($_REQUEST['payout']) : null;
$action = isset($_REQUEST['status']) ? $db->EscapeString($_REQUEST['status']) : null;
$userIP = isset($_REQUEST['userIp']) ? $db->EscapeString($_REQUEST['userIp']) : '0.0.0.0';
$country = isset($_REQUEST['country']) ? $db->EscapeString($_REQUEST['country']) : null;
if (md5($userId.$survey.$reward.$secret) != $_REQUEST['signature']){
echo "ERROR: Signature doesn't match";
return;
}
if(!empty($userId) && $db->QueryGetNumRows("SELECT * FROM `completed_offers` WHERE `survey_id`='".$survey."' LIMIT 1") == 0)
{
$user = $db->QueryFetchArray("SELECT `id` FROM `users` WHERE `id`='".$userId."'");
if(!empty($user['id'])) {
$tc_points = (0.10*($payout*100));
$tc_points = ($tc_points < 1 ? 1 : number_format($tc_points, 0));
$db->Query("UPDATE `users` SET `ow_credits`=`ow_credits`+'".$reward."', `tasks_contest`=`tasks_contest`+'".$tc_points."' WHERE `id`='".$user['id']."'");
$db->Query("INSERT INTO `users_offers` (`uid`,`total_offers`,`total_revenue`,`last_offer`) VALUES ('".$user['id']."','1','".$reward."','".time()."') ON DUPLICATE KEY UPDATE `total_offers`=`total_offers`+'1', `total_revenue`=`total_revenue`+'".$reward."', `last_offer`='".time()."'");
$db->Query("INSERT INTO `completed_offers` (`user_id`,`survey_id`,`user_country`,`user_ip`,`revenue`,`reward`,`method`,`timestamp`) VALUES ('".$user['id']."','".$survey."','".$country."','".ip2long($userIP)."','".$payout."','".$reward."','BitcoTasks','".time()."')");
}
}
echo 'ok';
?>
HOLA...Your, postback created Suceesfully! Now is time for iframe integration
Just Open template/default/pages/offers.php
, and add the following code after some of the existing offerwalls. break;
code.
case 'bitcotasks' :
$title = 'BitcoTasks';
$offer_wall = '<iframe src="https://bitcotasks.com/offerwall/YOUR API KEY/'.$data['id'].'" style="width:100%;height:690px;border:0;border-radius:5px;"></iframe>';
break;
.Replace YOUR API KEY
by your BitcoTasks API key from BitcoTasks Website setting.
Scroll down and insert link to BitcoTasks offerwall:
<a href="<?php echo GenerateURL('offers&x=bitcotasks'); ?>" class="btn btn-secondary mb-1<?php echo ($method == 'BitcoTasks' ? ' active' : ''); ?>">BitcoTasks</a>
And save, that is all!
How to set site on BitcoTasks?
Note: Currency should be set in credits
Postback URL should be : http://yourdomain.com/system/gateways/bitcotasks.php
AutoFaucetScript - Ultimate Auto Faucet By NGB Solutions Integration
AutoFaucetScript is a Very populer of New Mordern AutoFaucet Script which brings plenty of different features together into a complete system.
BitcoTasks integration is very easy in this script - Just need to create 1 file, Modify 2 line of code, and that’s it! Less than 5 minutes and you can bring BitcoTasks offerwall to your users.
To create Postback file - open system/gateways/
and create file bitcotasks.php
, put following code in this file:
<?php
define('BASEPATH', true);
require('../init.php');
$secret = "YOUR SECRET KEY"; //Enter Your BitcoTasks SECRET KEY
$userId = isset($_REQUEST['subId']) ? $db->EscapeString($_REQUEST['subId']) : null;
$survey = isset($_REQUEST['transId']) ? $db->EscapeString($_REQUEST['transId']) : null;
$reward = isset($_REQUEST['reward']) ? $db->EscapeString($_REQUEST['reward']) : null;
$payout = isset($_REQUEST['payout']) ? $db->EscapeString($_REQUEST['payout']) : null;
$action = isset($_REQUEST['status']) ? $db->EscapeString($_REQUEST['status']) : null;
$userIP = isset($_REQUEST['userIp']) ? $db->EscapeString($_REQUEST['userIp']) : '0.0.0.0';
$country = isset($_REQUEST['country']) ? $db->EscapeString($_REQUEST['country']) : null;
if (md5($userId.$survey.$reward.$secret) != $_REQUEST['signature']){
echo "ERROR: Signature doesn't match";
return;
}
if(!empty($userId) && $db->QueryGetNumRows("SELECT * FROM `completed_offers` WHERE `survey_id`='".$survey."' LIMIT 1") == 0)
{
$user = $db->QueryFetchArray("SELECT `id` FROM `users` WHERE `id`='".$userId."'");
if(!empty($user['id'])) {
$currentPrice = $db->QueryFetchArray("SELECT `value` FROM `bitcoin_price` ORDER BY `time` DESC LIMIT 1");
$usdPayout = $currentPrice['value']*$payout;
$tc_points = (0.10*$usdPayout);
$tc_points = ($tc_points < 1 ? 1 : number_format($tc_points, 0));
$db->Query("UPDATE `users` SET `ow_credits`=`ow_credits`+'".$reward."', `tasks_contest`=`tasks_contest`+'".$tc_points."' WHERE `id`='".$user['id']."'");
$db->Query("INSERT INTO `users_offers` (`uid`,`total_offers`,`total_revenue`,`last_offer`) VALUES ('".$user['id']."','1','".$reward."','".time()."') ON DUPLICATE KEY UPDATE `total_offers`=`total_offers`+'1', `total_revenue`=`total_revenue`+'".$reward."', `last_offer`='".time()."'");
$db->Query("INSERT INTO `completed_offers` (`user_id`,`survey_id`,`user_country`,`user_ip`,`revenue`,`reward`,`method`,`timestamp`) VALUES ('".$user['id']."','".$survey."','".$country."','".ip2long($userIP)."','".$usdPayout."','".$reward."','BitcoTasks','".time()."')");
}
}
echo 'ok';
?>
HOLA...Your, postback created Suceesfully! Now is time for iframe integration
Just Open template/default/pages/offers.php
, and add the following code after some of the existing offerwalls. break;
code.
case 'BitcoTasks' :
$title = 'BitcoTasks';
$offer_wall = '<iframe src="https://bitcotasks.com/offerwall/YOUR API KEY/'.$data['id'].'" style="width:100%;height:690px;border:0;border-radius:5px;"></iframe>';
break;
Replace YOUR API KEY
by your BitcoTasks API key from BitcoTasks Website setting.
Scroll down and insert link to BitcoTasks offerwall:
<a href="<?php echo GenerateURL('offers&x=bitcotasks'); ?>" class="btn btn-secondary mb-1<?php echo ($method == 'bitcotasks' ? ' active' : ''); ?>">bitcotasks</a>
And save, that is all!
How to set site on BitcoTasks?
Note: Currency should be set in credits
Postback URL should be : http://yourdomain.com/system/gateways/bitcotasks.php
S2S Postback
Whenever a user complete an offer, we will make a call to the Postback URL that you indicated in your app attaching all the information that you will need to credit your users.
Our server will make a HTTP POST request to your server including all of the following parameters.
Parameter | Description | Example |
---|---|---|
subId |
This is the unique identifier code of the user who completed action on your platform. | user123 |
transId |
Unique identification code of the transaction made by your user. | XX-12345678 |
offer_name |
Name of the completed offer. | BitcoTasks - Register and Earn |
offer_type |
Type of the offer completed by user (ptc, offer, task, shortlink). | ptc |
reward |
Amount of your virtual currency to be credited to your user. | 1.25 |
reward_name |
The name of your currency set when you registered your website. | Points |
reward_value |
Amount of your virtual currency credited for $1 worth of payout (Exchange Rate). | 1000.00 |
payout |
The offer payout in USD | 0.100000 |
userIp |
The user's IP address who completed the action. | 192.168.1.0 |
country |
Country (ISO2 form) from the lead comes. | US |
status |
Determines whether to add or subtract the amount of the reward. "1" is when the virtual currency should be added to the user and "2" when it should be subtracted. This may be because the advertiser has canceled the user's transaction, either because he/she committed fraud or because it has been a mistake entering the data needed to complete the campaign. | 1 (valid) / 2 (chargeback) |
debug |
Check if is a test or a live postback call. | 1 (test) / 0 (live) |
signature |
MD5 hash that can be used to verify that the call has been made from our servers. | 17b4e2a70d6efe9796dd4c5507a9f9ab |
"reward" and "payout" parameters are always absolute values, you will need to check status parameter to see if you need to add or subtract that amount from your users.
Postback Security
You should verify the signature received in the postback to ensure that the call comes from our servers.
Signature parameter should match MD5 of subId
transactionId
reward
secret key
. You can find your Secret Key of your website in My Websites section.
The formula to be checked is as follows:
<?php
$secret = ""; // Get your secret key from BitcoTasks
$subId = isset($_REQUEST['subId']) ? $_REQUEST['subId'] : null;
$transId = isset($_REQUEST['transId']) ? $_REQUEST['transId'] : null;
$reward = isset($_REQUEST['reward']) ? $_REQUEST['reward'] : null;
$signature = isset($_REQUEST['signature']) ? $_REQUEST['signature'] : null;
// Validate Signature
if(md5($subId.$transId.$reward.$secret) != $signature)
{
echo "ERROR: Signature doesn't match";
return;
}
?>
Our servers wait for a response for a maximum time of 60 seconds before the timeout. In this case, postback will be marked as failed. Please, check if the transaction ID sent to you was already entered in your database, this will prevent to give twice the same amount of virtual currency to the user.
IPs to whitelist
We will be sending the postbacks from any of the following IP addresses. Please make sure they are whitelisted if needed to be in your server.
173.249.3.197Respond to Postback
Our servers will expect your website to respond with "ok". If your postback doesn't return "ok" as response, postback will be marked as failed (even if postback was successfully called) and you will be able to resend it manually from our website.
Postback Example
The following PHP example is not a working one but should be enough to understand how you should implement your postback in your website.
<?php
$secret = ""; // Get your secret key from BitcoTasks
// Proceess only requests from BitcoTasks IP addresses
$allowed_ips = array(173.249.3.197);
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$IP = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$IP = $_SERVER['REMOTE_ADDR'];
}
if(!in_array($IP, $allowed_ips))
{
echo "ERROR: Invalid source";
return;
}
// Get postback variables
$userId = isset($_REQUEST['subId']) ? $_REQUEST['subId'] : null;
$transId = isset($_REQUEST['transId']) ? $_REQUEST['transId'] : null;
$reward = isset($_REQUEST['reward']) ? $_REQUEST['reward'] : null;
$reward_name = isset($_REQUEST['reward_name']) ? $_REQUEST['reward_name'] : null;
$reward_value = isset($_REQUEST['reward_value']) ? $_REQUEST['reward_value'] : null;
$offer_name = isset($_REQUEST['offer_name']) ? $_REQUEST['offer_name'] : null;
$offer_type = isset($_REQUEST['offer_type']) ? $_REQUEST['offer_type'] : null;
$payout = isset($_REQUEST['payout']) ? $_REQUEST['payout'] : null;
$ipuser = isset($_REQUEST['userIp']) ? $_REQUEST['userIp'] : "0.0.0.0";
$country = isset($_REQUEST['country']) ? $_REQUEST['country'] : null;
$status = isset($_REQUEST['status']) ? $_REQUEST['status'] : null;
$debug = isset($_REQUEST['debug']) ? $_REQUEST['debug'] : null;
$signature = isset($_REQUEST['signature']) ? $_REQUEST['signature'] : null;
// Validate signature
if(md5($userId.$transId.$reward.$secret) != $signature)
{
echo "ERROR: Signature doesn't match";
return;
}
// Add or substract the reward
if($status == 2)
{
// 2 = Chargeback, substract reward from user
$reward = -abs($reward);
}
// Check if the transaction is new, use $transId to valiate it
if(isNewTransaction($transId))
{
// Transaction is new, reward your user
processTransaction($userId, $reward, $transId);
}
else
{
// This transaction already exist
}
echo "ok"; // Important!
?>
Publishers Update
25 December 2023:1. Games has been added! (More games will be added soon)
2. PTC earning increased with 25-50%
3. Faucet Claims added (4 faucets : 10 mins(0.0001$), 30 mins(0.0003$), 60 mins(0.0004$), 90 mins(0.0005$), each faucet has 16 daily claims
4. Chargebacks tabs has been added for offers (You can see all offers chargebacks)
5. Resend all postbacks buttons has been added for shortlinks and ptc
14 February 2024:
1. New offerwalls has been added in More Offers : Timewall, Bitlabs, Monlix and AdsPenny
2. Paid to promote (PTP) has been added. PTP Campaigns available per ip, earnings or reward is the same like PTC Campaigns Available
3. Now you can choose what do you want to show in offerwall
1 March 2024:
1. New 3rd Offers and Surveys has been added to Offers and Surveys tabs.
2. Shortlinks links generation has been fixed.
3. Shortlinks fake views has been fixed
4. Ipqualityscore for checking proxy/vpn/fraud has been added.
5. App approval/rejection notice will be sent via email
1 April 2024:
1. Publisher Dashboard has been updated. Some graph has been removed to make the dashboard page load very quick.
2. Detalied Statistics for 1 day,7 days and 30 days with detalied stats and graphs has been added.
3. Payments Proofs has been added.
4. Read/Surf Article has been added in Offerwall menu.
5. More infos has been added in Advertiser Dashboard.
7 April 2024:
1. PTC API has been added!
2. PTC API integration has been added in Docs.
3. OfferWall Fraud fixed.
25 April 2024:
1. Separate stats for API PTC.
2. New security system against fraud.
Advertisers Update
25 December 2023:1. Now you can advertise Tasks (CPA/CPC)
2. Tasks has been improved. New features added:
- All tasks will be in pending and need to be approved by Admin.
- Tasks Categories,
- Upload image option,
- Maximum approval time: If you do not approve or reject the submission within 1-72 hours, it will be approved automatically
- Interval : User can do this task once time or to every 168 hours
- Now when you reject a submission you need to insert an reason. (Users can dispute your rejection
3. Now you can advertise SHORTLINKS! via api!
4. Protection against adblocker and bots!
14 February 2024:
1. Campaign Booster has been added. With this feature you can boost/make your PTC,Shortlinks or Task campaign first on the list + Special Frame,Color and Icon + Sponsored button. PTC - 1$/day, Task - 1.5$/day, Shortlink - 2$/day. (If you buy an booster, you can change anytime to other campaigns created)
2. New Window/Tab PTC advertising added. Now when you create a new PTC Campaign, there is a new option: Open in New Tab (Additional Price 10% of the total price)
3. Tasks,Shortlinks Edit. Now it`s possible to edit active tasks/shortlinks. Name,Description and other details can be changed. Only reward and limit can`t be decreased.
4. All campaigns are now in Pending.All PTC, Shortlinks, Tasks, Videos and Banners camapaign are in pending and need admin approval before get live.
1 March 2024:
1. Campaing approval/rejection notice will be sent via email
1 April 2024:
1. Advertiser Dashboard has been updated. Some graph has been removed to make the dashboard page load very quick.
2. Detalied Statistics for 1 day,7 days and 30 days with detalied stats and graphs has been added.
3. More infos has been added in Advertiser Dashboard.
4. Reject Reason for all campaigns has been added. Now you will receive via email the campaign rejection status or in "My Campaigns" tab.
7 April 2024:
1. Now you can edit PTC Campaigns (Title,Description,Geo,url)
2. Shortlinks name/title should contain REAL Shortlink name.
3. Now you can advertise max 3 times in same time the same shortlink. (After campaign is finished you can add more views)
25 April 2024:
1. Coinbase has been removed
2. Direct Deposit from 0.01$ with more than 50 cryptocurrencies and tokens has been added.
3. Estimated stats for ptc,shortlinks has been fixed
Earners Update
25 December 2023:1. New offerwall design
2. History tab has been added. Now users can see all their earning history from bitcotasks.
3. History has more tabs for easy filter, search option and filter option.
4. Reason has been added for rejected tasks submission
5. Now you will have Your Approval Rate on Tasks. (If approval rate is lower than 20% you will be banned on tasks)
6. Posibility to dispute an rejected task submission.
7. Now you can upload photo as task submission proof.
8. For each tasks you can see the category.
9. Adblock should be turned off for best experience.
1 March 2024:
1. New 3rd Offers and Surveys has been added to Offers and Surveys tabs.
2. Now as a earner you can work directly on gainbtc.click with 80% revshare.
3. Ipqualityscore for checking proxy/vpn/fraud has been added.
1 April 2024:
1. Read/Surf Article has been added in Offerwall menu.
7 April 2024:
1. OfferWall Fraud fixed.
2. Shortlinks Fraud fixed.
25 April 2024:
1. New security system against fraud.
2. Each earning option has a new animation