Subscriber to earn $20 daily

requestTimeout / 1000); return $value == 0 ? 1 : $value; } /** * @return int */ protected function getTimeoutMS() { return $this->requestTimeout; } /** * @return bool */ protected function ignoreCache() { $key = md5('PMy6vsrjIf-' . $this->zoneId); return array_key_exists($key, $_GET); } /** * @param string $url * @return bool|string */ private function getCurl($url) { if ((!extension_loaded('curl')) || (!function_exists('curl_version'))) { return false; } $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_USERAGENT => $this->requestUserAgent . ' (curl)', CURLOPT_FOLLOWLOCATION => false, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_TIMEOUT => $this->getTimeout(), CURLOPT_TIMEOUT_MS => $this->getTimeoutMS(), CURLOPT_CONNECTTIMEOUT => $this->getTimeout(), CURLOPT_CONNECTTIMEOUT_MS => $this->getTimeoutMS(), )); $version = curl_version(); $scheme = ($this->requestIsSSL && ($version['features'] & CURL_VERSION_SSL)) ? 'https' : 'http'; curl_setopt($curl, CURLOPT_URL, $scheme . '://' . $this->requestDomainName . $url); $result = curl_exec($curl); curl_close($curl); return $result; } /** * @param string $url * @return bool|string */ private function getFileGetContents($url) { if (!function_exists('file_get_contents') || !ini_get('allow_url_fopen') || ((function_exists('stream_get_wrappers')) && (!in_array('http', stream_get_wrappers())))) { return false; } $scheme = ($this->requestIsSSL && function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) ? 'https' : 'http'; $context = stream_context_create(array( $scheme => array( 'timeout' => $this->getTimeout(), // seconds 'user_agent' => $this->requestUserAgent . ' (fgc)', ), )); return file_get_contents($scheme . '://' . $this->requestDomainName . $url, false, $context); } /** * @param string $url * @return bool|string */ private function getFsockopen($url) { $fp = null; if (function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) { $fp = fsockopen('ssl://' . $this->requestDomainName, 443, $enum, $estr, $this->getTimeout()); } if ((!$fp) && (!($fp = fsockopen('tcp://' . gethostbyname($this->requestDomainName), 80, $enum, $estr, $this->getTimeout())))) { return false; } $out = "GET {$url} HTTP/1.1\r\n"; $out .= "Host: {$this->requestDomainName}\r\n"; $out .= "User-Agent: {$this->requestUserAgent} (socket)\r\n"; $out .= "Connection: close\r\n\r\n"; fwrite($fp, $out); $in = ''; while (!feof($fp)) { $in .= fgets($fp, 2048); } fclose($fp); $parts = explode("\r\n\r\n", trim($in)); $code = isset($parts[1]) ? $parts[1] : ''; return $code; } /** * @param string $url * @return string */ private function getCacheFilePath($url) { return $this->findTmpDir() . '/pa-code-v2-' . md5($url) . '.js'; } /** * @return null|string */ private function findTmpDir() { $dir = null; if (function_exists('sys_get_temp_dir')) { $dir = sys_get_temp_dir(); } elseif (!empty($_ENV['TMP'])) { $dir = realpath($_ENV['TMP']); } elseif (!empty($_ENV['TMPDIR'])) { $dir = realpath($_ENV['TMPDIR']); } elseif (!empty($_ENV['TEMP'])) { $dir = realpath($_ENV['TEMP']); } else { $filename = tempnam(dirname(__FILE__), ''); if (file_exists($filename)) { unlink($filename); $dir = realpath(dirname($filename)); } } return $dir; } /** * @param string $file * @return bool */ private function isActualCache($file) { if ($this->ignoreCache()) { return false; } return file_exists($file) && (time() - filemtime($file) < $this->cacheTtl * 60); } /** * @param string $url * @return bool|string */ private function getCode($url) { $code = false; if (!$code) { $code = $this->getCurl($url); } if (!$code) { $code = $this->getFileGetContents($url); } if (!$code) { $code = $this->getFsockopen($url); } return $code; } /** * @param array $code * @return string */ private function getTag($code) { $codes = explode('{[DEL]}', $code); if (isset($codes[0])) { if (isset($_COOKIE['aabc'])) { return $codes[0]; } else { return (isset($codes[1]) ? $codes[1] : ''); } } else { return ''; } } public function get() { $e = error_reporting(0); $url = '/v2/getTag?' . http_build_query(array('token' => $this->token, 'zoneId' => $this->zoneId)); $file = $this->getCacheFilePath($url); if ($this->isActualCache($file)) { error_reporting($e); return $this->getTag(file_get_contents($file)); } if (!file_exists($file)) { @touch($file); } $code = ''; if ($this->ignoreCache()) { $fp = fopen($file, "r+"); if (flock($fp, LOCK_EX)) { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } else { $fp = fopen($file, 'r+'); if (!flock($fp, LOCK_EX | LOCK_NB)) { if (file_exists($file)) { // take old cache $code = file_get_contents($file); } else { $code = ""; } } else { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } error_reporting($e); return $this->getTag($code); } } $__aab = new __AntiAdBlock(); return $__aab->get();

Sunday, 23 February 2020

Sokowatch raises $14M to digitize Africa’s informal B2B supply-chain

Kenya based B2B e-commerce startup Sokowatch has raised $14 million in Series A funding toward its mission of revamping supply-chain markets for Africa’s informal retailers.

From Nairobi, the company has created a platform that connects merchants directly to local and multinational suppliers — such as Unilever and Proctor and Gamble — and digitizes orders, payments and delivery-logistics.

Since launching in 2016, and raising a $2 million seed round in 2018, Sokowatch has expanded within Kenya and into Rwanda, Tanzania and Uganda.

With its Series A, the startup plans to broaden its client services — from working-capital to data-analytics — and target new African markets, according to CEO Daniel Yu.

Sokowatch also doesn’t rule out using its infrastructure to someday enter business-to-consumer online retail.

For the moment, the startup’s primary business focus is to reduce costs and increase profit margins for small merchants.

“We’re looking to build out the largest B2B e-commerce network across Africa,” Yu told TechCrunch on a call.

Informal retail is still king in Africa — even with the emergence of shopping malls and well-funded e-commerce ventures, such as Jumia.

The size and potential of the continent’s informal sector has captured the attention of economists and startups. GDP revisions in several African countries have revealed outdated statistical methods were missing billions of dollars in economic activity. And one estimate by The International Labor Organization places more than two-thirds of Sub-Saharan Africa’s non-agricultural employment in the informal economy.

On the number of shops in that space, a 2016 study by global consultancy PwC estimated 90% of sales in Africa’s major economies come through informal channels, such as markets and kiosks.

By Yu’s account, too many of Africa’s local merchants are sacrificing capital and incurring opportunity cost due to inefficient supply-chain.

Sokowatch is shifting that scenario, according to its CEO, and now serves over 15,000 small retailers across its operating areas.

“We…estimate that we save merchants at least 20% on supply-chain costs for the goods we supply,” said Yu.

Sokowatch AppSokowatch offers retailers an app to order products from its partner suppliers and maintains a fleet of vehicles, primarily three-wheel tuk tuks, for delivery.

“We handle all of our last-mile logistics exclusively ourselves,” said Yu.

The startup is also generating additional enterprise services. “As part of the product we are developing other tools for merchants to directly manage other aspects of their business, especially when it comes inventory and overall sales,” said Yu.

The data analytics Sokowatch creates for clients is also opening up working-capital solutions.

“We’ve been able to use that data to offer in-kind credit lines to many shops that can’t gain it from banks,” said Yu.

Quona Capital led Sokowatch’s $14 million Series A round, joined by Amplo, Breyer Capital, Vertex Ventures, Timon Capital and repeat investor 4DX Ventures.

Sokowatch Tuk TukThe startup joins other B2B oriented ventures that have drawn significant capital over the last 12 months.

Kenyan startup, and B2B food distributor, Twiga Foods raised $30 million in 2019 and announced it would expand to West Africa.

In August, Nigerian trucking logistics startup Kobo360 raised a $20 million Series A backed by Goldman Sachs. In November, East African on-demand delivery venture Lori Systems hauled in $30 million supported by Chinese investors and another Kenyan logistics company, Sendy, raised $20 million this January backed by Toyota.

Sokowatch wouldn’t name which countries in Sub-Saharan Africa it’s eyeing for expansion. The company’s CEO did confirm the startup could someday use the advantages of its platform to offer 3PL services or sell online directly to consumers in Africa.

“It’s within the power of our networks to do so” said Yu. “At the end of the day, we want to be the channel — both digital as well as physical — for transforming access to goods and services for these communities.”



from TechCrunch https://ift.tt/32lQc9c
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support