Estou trabalhando com a API do Instagram no magento. Estou dando cupons aos meus seguidores do Instagram se eles seguirem nossa loja no Instagram.
Estou fazendo as chamadas de API para o instagram em PHP usando curl. Atualmente, estou agrupando as chamadas da API em funções auxiliares dentro do meu módulo personalizado. Em vez disso, eu deveria agrupar essas chamadas em uma função dentro de um modelo?
Por exemplo. Estou fazendo uma chamada de API para o Instagram para determinar se o usuário atual está seguindo minha conta. Portanto, no meu controlador, estou fazendo uma chamada para minha função auxiliar, que retorna o status a seguir ao meu controlador. No meu controlador, atualizarei meus modelos, se necessário.
Estou correto em colocar essas chamadas de API nas funções auxiliares? Quando uso ajudantes em vez de modelos?
<?php
class Company_SocialCoupons_InstagramController extends Mage_Core_Controller_Front_Action
{
public function followAction() {
$status = Mage::helper('socialcoupons/instagram')->getFollow();
if ($status == 'follows') {
// 1. ADD DATA TO MY DATABASE using my custom model
// - Ex. Mage::getModel('socialcoupons/instagram')->setInstagramId(*IGID*), etc.
// 2. CREATE COUPON
// 3. EMAIL COUPON TO CUSTOMER
}
}
class Company_SocialCoupons_Helper_Instagram extends Mage_Core_Helper_Abstract
{
public function getfollow() {
$accessToken = $this->getAccessToken();
$relationshipsUrl = 'https://api.instagram.com/v1/users/' . $this->getUserId() . '/relationship?access_token=' . $accessToken;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $relationshipsUrl);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$jsonData = curl_exec($ch);
curl_close($ch);
$response = json_decode($jsonData, true);
$status = $response['data']['outgoing_status'];
return $status;
}
public function generateAccessToken($code) {
// exchange code for access token
$accessTokenUrl = 'https://api.instagram.com/oauth/access_token';
$data = array(
'client_id' => $this->getClientId(),
'client_secret' => $this->getClientSecret(),
'code' => $code,
'grant_type' => 'authorization_code',
'redirect_uri' => $this->getRedirectUri()
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $accessTokenUrl);
curl_setopt($ch, CURLOPT_POST, count($data));
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$jsonData = curl_exec($ch);
curl_close($ch);
$response = json_decode($jsonData, true);
if (isset($response['error_type'])) { // no error
Mage::getSingleton('core/session')->unsInstagramAccessToken();
Mage::getSingleton('core/session')->addError($response['error_message']);
return $this->_redirect('*/*/authorize');
}
$accessToken = $response['access_token'];
$id = $response['user']['id'];
$username = $response['user']['username'];
Mage::getSingleton('core/session')->setInstagramAccessToken($accessToken);
return array(
'id' => $id,
'username' => $username
);
}
}
fonte
Eu argumentaria que é mais adequado a um modelo, pois seu objetivo principal é acessar e representar dados.
fonte
Modelo:
Ajudante:
Se tem um ESTADO INTERNO, é um modelo. Caso contrário, é um auxiliar com todas as funções matemáticas corretas, como
sin(x)
oustr_tolower($text)
. Um Modelo tem um estado interno que um Auxiliar recebe um estado injetado como uma dependência.fonte
Se os métodos são usados por muitas classes (blocos / modelos / controladores) e comuns entre vários modelos, um auxiliar é a escolha óbvia.
Se os métodos forem usados apenas quando um único modelo for instanciado, nesse modelo será o lugar certo.
fonte