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();

Thursday, 30 April 2020

African fintech firm Flutterwave launches SME e-commerce portal

San Francisco and Lagos-based fintech startup Flutterwave has launched Flutterwave Store, a portal for African merchants to create digital shops to sell online.

The product is less Amazon and more eBay — with no inventory or warehouse requirements. Flutterwave insists the move doesn’t represent any shift away from its core payments business.

The company accelerated the development of Flutterwave Store in response to COVID-19, which has brought restrictive measures to SMEs and traders operating in Africa’s largest economies.

After creating a profile, users can showcase inventory and link up to a payment option. For pickup and delivery, Flutterwave Store operates through existing third party logistics providers, such as Sendy in Kenya and Sendbox in Nigeria.

The service will start in 15 African countries and the only fees Flutterwave will charge (for now) are on payments. Otherwise, it’s free for SMEs to create an online storefront and for buyers and sellers to transact goods.

While the initiative is born out of the spread of coronavirus cases in Africa, it will continue beyond the pandemic. And Flutterwave’s CEO Olugbenga Agboola — aka GB — is adamant Flutterwave Store is not a pivot for the fintech company, which is an alum of Silicon Valley accelerator Y-Combinator.

“It’s not a direction change. We’re still a B2B payment infrastructure company. We are not moving into becoming an online retailer, and no we’re not looking to become Jumia,” GB told TechCrunch on a call.

Image Credits: Flutterwave

He was referring to Africa’s largest e-commerce company, which operates in 11 countries and listed in an NYSE IPO last year.

Flutterwave has a very different business than the continent’s big e-commerce players and plans to stick with it, according to GB.

When it comes to reach, VC and partnerships, the startup is one of the more connected and visible operating in Africa’s tech ecosystem. The Nigerian-founded venture’s main business is providing B2B payments services for companies operating in Africa to pay other companies on the continent and abroad.

Launched in 2016, Flutterwave allows clients to tap its APIs and work with Flutterwave developers to customize payments applications. Existing customers include Uber and Booking.com.

In 2019, Flutterwave processed 107 million transactions worth $5.4 billion, according to company data. Over the last 12 months the startup has been on a tear of investment, product and partnership activity.

In July 2019, Flutterwave joined forces with Chinese e-commerce company Alibaba’s Alipay to offer digital payments between Africa and China.

The Alipay collaboration followed one between Flutterwave and Visa to launch a consumer payment product for Africa, called GetBarter.

Then in January of this year, the startup raised a $35 million Series B round and announced a partnership with Worldpay FIS for payments in Africa.

On the potential for Flutterwave Store, there’s certainly a large pool of traders and small businesses across Africa that could appreciate the opportunity to take their businesses online. The IFC has estimated that SMEs make up 90% of Sub-Saharan Africa’s business serving the region’s one-billion people.

Flutterwave confirmed Flutterwave Store’s initial 15 countries will include Africa’s top economies and population countries of Nigeria, Ghana, Kenya and South Africa.

Those markets already have a number of players driving digital commerce, including options for small businesses to post their wares online. Jumia’s Jumia Marketplace allows vendors register on its platform and use the company’s resources to do online retail.

Facebook has made a push into Africa that includes its overall push to get more users to sell on Facebook Marketplace. The social media giant now offers the service in Nigeria — with 200 million people and the continent’s largest economy.

GB Flutterwave disrupt

Flutterwave CEO GB, Image Credits: TechCrunch

eBay has not yet gone live in Africa with its business to consumer website, that allows any cottage industry to create a storefront. The American company does have an arrangement with e-commerce startup MallforAfrica.com for limited sales of African goods on eBay’s U.S. shopping site.

On where Flutterwave’s new product fits into Africa’s online sales space, CEO GB says Flutterwave Store will maintain a niche focus on mom and pop type businesses.

“The goal is not be become like eBay, that’s advocating for everybody. We’re just giving small merchants the infrastructure to create an online store at zero cost right from scratch,” he said.

That’s something Flutterwave expects to be useful to Africa’s SMEs through the COVID-19 crisis and beyond.



from TechCrunch https://ift.tt/2yf1CB3
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support