Saya bekerja dengan API Instagram di magento. Saya memberikan kupon kepada pengikut instagram saya jika mereka mengikuti toko kami di Instagram.
Saya membuat panggilan API ke instagram di PHP menggunakan curl. Saat ini saya sedang membungkus panggilan API dalam fungsi pembantu di dalam modul khusus saya. Haruskah saya membungkus panggilan ini dalam suatu fungsi di dalam model?
Sebagai contoh. Saya membuat panggilan API ke Instagram untuk menentukan apakah pengguna saat ini mengikuti akun saya. Jadi, di controller saya, saya membuat panggilan ke fungsi helper saya yang mengembalikan status follow ke controller saya. Di controller saya, saya kemudian akan memperbarui model saya jika perlu.
Apakah saya benar menempatkan panggilan API ini di dalam fungsi pembantu? Kapan saya menggunakan pembantu dibandingkan dengan model?
<?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
);
}
}
sumber
Saya berpendapat bahwa itu lebih cocok untuk model, karena tujuan utamanya adalah mengakses dan mewakili data.
sumber
Model:
Pembantu:
Jika memiliki NEGARA INTERNAL itu adalah model. Jika tidak, ini membantu dengan semua fungsi matematika yang benar, seperti
sin(x)
ataustr_tolower($text)
. Model memiliki status internal yang bisa diterima oleh Pembantu sebagai kondisi ketergantungan.sumber
Jika metode ini digunakan oleh banyak kelas (blok / model / pengontrol) dan umum di antara banyak model, maka helper adalah pilihan yang jelas.
Jika metode hanya pernah digunakan ketika model tunggal dipakai, maka di dalam model itu adalah tempat yang tepat.
sumber