Neler yeni

Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

  • Forumdan daha fazla yararlanmak için, profilinizi telefon numaranız 📱 ile doğrulayın ve daha ayrıcalıklı olun 😉
    Daha fazla bilgi!

Güncel Shopier Ekletisi Yapmak

Bu sorun halen çözme ulaştırılamamıştır!

lazenes

Sabit kullanıcı
SMS onaylı
Kullanıcı
Katılım
21 Eyl 2017
Mesajlar
72
Çözümler
1
Destek istenen forum
http://78.138.31.186/
Arkadaşlar Shopier.com için bir Eklenti geliştirmek istedim ilk eklentim olsun istiyordum ve Xenforo da bir eksik Türk kullanıcılar için her ne ise Eklentiyi Çalışır vaziyete Getirdim fakat Hesap yükseltmeleri Kısmında 2 Farklı satın alına bilir Özellik varsa ve kullanıcı Sırasıyla 1. içeriği seçip işleme devam etmeyip çıkan pencereyi kapatırsa ve 2. içeriği seçip ilerlemek isteyince satın alına bilir içerik misal 1. seçenek 5 tl 2. içerik 10 tl ise kullanıcının hesabını 5 tl lik pakete yükseltip 2. seçenek tutarını karttan çekiyor bunun sorunu xf_purchase_request tablosunda oluşturulan request_key alanının düzgün bir şekilde sql den okutulup işleme dahil edilmemesi bu benim php içeriğim burada nasıl bir düzenleme yapmalıyım da kullanıcının hesap yükseltme aşamasında talep ettiği ilk seçeneğe değil de son talebini işleme aldırabilirim
PHP:
<?php

namespace ShopierPayment\Payment;

use XF;
use XF\Entity\PurchaseRequest;
use XF\Http\Request;
use XF\Mvc\Controller;
use XF\Payment\AbstractProvider;
use XF\Payment\CallbackState;
use XF\Purchasable\Purchase;

class Shopier extends AbstractProvider
{

    /**
     * @var string[]
     */
    protected $supportedCurrencies = [
        'TRY', 'USD', 'EUR', 'RUB', 'GBP',
    ];

    /**
     * @return string
     */
    public function getTitle(): string
    {
        return 'Shopier Çevrimiçi Ödeme Sistemi';
    }

    /**
     * @param array $options
     * @param array $errors
     * @return bool
     */
    public function verifyConfig(array &$options, &$errors = []): bool
    {
        if (!$options['merchant_id'] || !$options['merchant_key'])
        {
            $errors[] = XF::phrase('merchant_id_or_merchant_key_or_merchant_salt_required');
        }
        return !$errors;
    }

    /**
     * @param Controller $controller
     * @param PurchaseRequest $purchaseRequest
     * @param Purchase $purchase
     * @return XF\Mvc\Reply\View
     */
    public function initiatePayment(Controller $controller, PurchaseRequest $purchaseRequest, Purchase $purchase): XF\Mvc\Reply\View
    {
        $paymentProfile                         = $purchase->paymentProfile;
        $viewParams                             = $this->getPaymentParams($purchaseRequest, $purchase);
        $viewParams['shopier_error_message']      = false;
        $viewParams['shopier_display_title']      = $paymentProfile->display_title;
        $viewParams['shopier_request_key']        = $purchaseRequest->request_key;
        
        if(!in_array($purchase->currency, $this->supportedCurrencies)){
            $viewParams['shopier_error_message'] = XF::phrase('shopier_currency_error');
        }else{
            $shopier_init     = (new ShopierHelper())
                ->setMerchantId($paymentProfile->options['merchant_id'])
                ->setMerchantKey($paymentProfile->options['merchant_key'])
                ->setRandKod(rand(100000,999999))
                ->setEmail($purchase->purchaser->email)
                ->setUserName($purchase->purchaser->username)
                ->setMerchantOkUrl($purchase->returnUrl)
                ->setMerchantFailUrl($purchase->cancelUrl)
                ->setPaymentAmount($purchase->cost)
                ->setUserBasket($purchase->title)
                ->setMerchantOid($purchaseRequest->purchase_request_id)
                ->setCurrency($purchase->currency);
            $viewParams['shopier']                      = $shopier_init->makePostVariables();
            $viewParams['cost']                       = $purchase->cost;
            $viewParams['currency']                   = $purchase->currency;
            $viewParams['phone_number_description']   = $paymentProfile->options['phone_number_description'];
            $viewParams['address_description']        = $paymentProfile->options['address_description'];
            $viewParams['iframe_type']                = $paymentProfile->options['iframe_type'];
            $viewParams['typeHandlers']               = [
                1 => $paymentProfile->options['credit_card_title']
                
            ];
        }
        return $controller->view('ShopierPayment:Payment\Initiate', 'payment_initiate_shopier', $viewParams);
    }

    /**
     * @param Request $request
     * @return CallbackState
     */
    public function setupCallback(Request $request): CallbackState
    {
    
        $state = new CallbackState();
        $state->merchant_oid        = $request->filter('payment_id', 'str');
        $state->hash                = $state->request_key;//$request->filter('signature', 'str');
        $state->status              = $request->filter('status', 'str');   
        $state->random_nr           = $request->filter('random_nr', 'str');   
        $state->payment_type        = $request->filter('platform_order_id', 'str');
        $state->UrlYonlendirme      = "index.php?account/upgrades";
        $state->transactionId       = $state->merchant_oid;
        $state->requestKey          = $this->resolveRequestKey($state->request_key);
        
        return $state;
    }

    /**
     * @param CallbackState $state
     * @return bool
     */
    public function validateCallback(CallbackState $state): bool
    {
      

     if ($state->status !== 'success') {
            $state->logType = 'error';
            $state->logMessage = 'OK';
        
            return false;
        }
    
    
        return true;
    }

    /**
     * @param CallbackState $state
     * @return bool
     */
    public function validateTransaction(CallbackState $state): bool
    {
        if (!$state->transactionId)
        {
            return false;
        }
        return true;
    }

    /**
     * @param CallbackState $state
     */
    public function getPaymentResult(CallbackState $state)
    {
        switch ($state->status)
        {
            case 'success':
                $state->paymentResult = CallbackState::PAYMENT_RECEIVED;
                break;

            case 'failed':
                $state->paymentResult = CallbackState::PAYMENT_REINSTATED;
                break;
        }
    }

    /**
     * @param CallbackState $state
     */
   public function completeTransaction(CallbackState $state)
{
  if ($state->status == 'success') {
    parent::completeTransaction($state);
    if ($state->UrlYonlendirme) {
      header("Location: " . $state->UrlYonlendirme);
      exit;
    }
    $state->logType = 'info';
    $state->logMessage = 'Ödemeniz Alındı Anasayfaya Dönebilirsiniz';
  } else {
    $state->logType = 'error';
  }

  $state->logDetails = [
    '_GET' => $_GET,
    '_POST' => $_POST
  ];
}
 
    /**
     * @param CallbackState $state
     */
    public function prepareLogData(CallbackState $state)
    {
        $state->logDetails = [
            '_GET' => $_GET,
            '_POST' => $_POST
        ];
    }

    /**
     * @param $merchant_oid
     * @return false|mixed|null
    */
    public function resolveRequestKey($merchant_oid){
        if(!$merchant_oid){
            return false;
        }
        $merchant_oid = str_replace('SP', '', explode('XF', $merchant_oid)[0]);
        $db = XF::db();
        return $db->fetchOne('SELECT request_key FROM xf_purchase_request WHERE purchase_request_id = ?', $merchant_oid);
    }
 
}
 
Eklentiyi Hallettim Dün bir domaine kurdum sorunsuz çalışıyor da Bir Kaç Optimizasyon yapmam gerekecek kullanıcı Adres bilgisi ile GSM bilgisi aldığımız ekranda hatalı post verisi oluşturuyor ve İframe Özelliği aktif olmuyor Kullanıcıyı ille Shopier sayfasına yönlendirilip işlemi tamamlatmak gerekiyor.
heyecanla bekliyoruz hocam :) ellerinize sağlık
 
Arkadaşlar Shopier.com için bir Eklenti geliştirmek istedim ilk eklentim olsun istiyordum ve Xenforo da bir eksik Türk kullanıcılar için her ne ise Eklentiyi Çalışır vaziyete Getirdim fakat Hesap yükseltmeleri Kısmında 2 Farklı satın alına bilir Özellik varsa ve kullanıcı Sırasıyla 1. içeriği seçip işleme devam etmeyip çıkan pencereyi kapatırsa ve 2. içeriği seçip ilerlemek isteyince satın alına bilir içerik misal 1. seçenek 5 tl 2. içerik 10 tl ise kullanıcının hesabını 5 tl lik pakete yükseltip 2. seçenek tutarını karttan çekiyor bunun sorunu xf_purchase_request tablosunda oluşturulan request_key alanının düzgün bir şekilde sql den okutulup işleme dahil edilmemesi bu benim php içeriğim burada nasıl bir düzenleme yapmalıyım da kullanıcının hesap yükseltme aşamasında talep ettiği ilk seçeneğe değil de son talebini işleme aldırabilirim
PHP:
<?php

namespace ShopierPayment\Payment;

use XF;
use XF\Entity\PurchaseRequest;
use XF\Http\Request;
use XF\Mvc\Controller;
use XF\Payment\AbstractProvider;
use XF\Payment\CallbackState;
use XF\Purchasable\Purchase;

class Shopier extends AbstractProvider
{

    /**
     * @var string[]
     */
    protected $supportedCurrencies = [
        'TRY', 'USD', 'EUR', 'RUB', 'GBP',
    ];

    /**
     * @return string
     */
    public function getTitle(): string
    {
        return 'Shopier Çevrimiçi Ödeme Sistemi';
    }

    /**
     * @param array $options
     * @param array $errors
     * @return bool
     */
    public function verifyConfig(array &$options, &$errors = []): bool
    {
        if (!$options['merchant_id'] || !$options['merchant_key'])
        {
            $errors[] = XF::phrase('merchant_id_or_merchant_key_or_merchant_salt_required');
        }
        return !$errors;
    }

    /**
     * @param Controller $controller
     * @param PurchaseRequest $purchaseRequest
     * @param Purchase $purchase
     * @return XF\Mvc\Reply\View
     */
    public function initiatePayment(Controller $controller, PurchaseRequest $purchaseRequest, Purchase $purchase): XF\Mvc\Reply\View
    {
        $paymentProfile                         = $purchase->paymentProfile;
        $viewParams                             = $this->getPaymentParams($purchaseRequest, $purchase);
        $viewParams['shopier_error_message']      = false;
        $viewParams['shopier_display_title']      = $paymentProfile->display_title;
        $viewParams['shopier_request_key']        = $purchaseRequest->request_key;
       
        if(!in_array($purchase->currency, $this->supportedCurrencies)){
            $viewParams['shopier_error_message'] = XF::phrase('shopier_currency_error');
        }else{
            $shopier_init     = (new ShopierHelper())
                ->setMerchantId($paymentProfile->options['merchant_id'])
                ->setMerchantKey($paymentProfile->options['merchant_key'])
                ->setRandKod(rand(100000,999999))
                ->setEmail($purchase->purchaser->email)
                ->setUserName($purchase->purchaser->username)
                ->setMerchantOkUrl($purchase->returnUrl)
                ->setMerchantFailUrl($purchase->cancelUrl)
                ->setPaymentAmount($purchase->cost)
                ->setUserBasket($purchase->title)
                ->setMerchantOid($purchaseRequest->purchase_request_id)
                ->setCurrency($purchase->currency);
            $viewParams['shopier']                      = $shopier_init->makePostVariables();
            $viewParams['cost']                       = $purchase->cost;
            $viewParams['currency']                   = $purchase->currency;
            $viewParams['phone_number_description']   = $paymentProfile->options['phone_number_description'];
            $viewParams['address_description']        = $paymentProfile->options['address_description'];
            $viewParams['iframe_type']                = $paymentProfile->options['iframe_type'];
            $viewParams['typeHandlers']               = [
                1 => $paymentProfile->options['credit_card_title']
               
            ];
        }
        return $controller->view('ShopierPayment:Payment\Initiate', 'payment_initiate_shopier', $viewParams);
    }

    /**
     * @param Request $request
     * @return CallbackState
     */
    public function setupCallback(Request $request): CallbackState
    {
   
        $state = new CallbackState();
        $state->merchant_oid        = $request->filter('payment_id', 'str');
        $state->hash                = $state->request_key;//$request->filter('signature', 'str');
        $state->status              = $request->filter('status', 'str');  
        $state->random_nr           = $request->filter('random_nr', 'str');  
        $state->payment_type        = $request->filter('platform_order_id', 'str');
        $state->UrlYonlendirme      = "index.php?account/upgrades";
        $state->transactionId       = $state->merchant_oid;
        $state->requestKey          = $this->resolveRequestKey($state->request_key);
       
        return $state;
    }

    /**
     * @param CallbackState $state
     * @return bool
     */
    public function validateCallback(CallbackState $state): bool
    {
     

     if ($state->status !== 'success') {
            $state->logType = 'error';
            $state->logMessage = 'OK';
       
            return false;
        }
   
   
        return true;
    }

    /**
     * @param CallbackState $state
     * @return bool
     */
    public function validateTransaction(CallbackState $state): bool
    {
        if (!$state->transactionId)
        {
            return false;
        }
        return true;
    }

    /**
     * @param CallbackState $state
     */
    public function getPaymentResult(CallbackState $state)
    {
        switch ($state->status)
        {
            case 'success':
                $state->paymentResult = CallbackState::PAYMENT_RECEIVED;
                break;

            case 'failed':
                $state->paymentResult = CallbackState::PAYMENT_REINSTATED;
                break;
        }
    }

    /**
     * @param CallbackState $state
     */
   public function completeTransaction(CallbackState $state)
{
  if ($state->status == 'success') {
    parent::completeTransaction($state);
    if ($state->UrlYonlendirme) {
      header("Location: " . $state->UrlYonlendirme);
      exit;
    }
    $state->logType = 'info';
    $state->logMessage = 'Ödemeniz Alındı Anasayfaya Dönebilirsiniz';
  } else {
    $state->logType = 'error';
  }

  $state->logDetails = [
    '_GET' => $_GET,
    '_POST' => $_POST
  ];
}
 
    /**
     * @param CallbackState $state
     */
    public function prepareLogData(CallbackState $state)
    {
        $state->logDetails = [
            '_GET' => $_GET,
            '_POST' => $_POST
        ];
    }

    /**
     * @param $merchant_oid
     * @return false|mixed|null
    */
    public function resolveRequestKey($merchant_oid){
        if(!$merchant_oid){
            return false;
        }
        $merchant_oid = str_replace('SP', '', explode('XF', $merchant_oid)[0]);
        $db = XF::db();
        return $db->fetchOne('SELECT request_key FROM xf_purchase_request WHERE purchase_request_id = ?', $merchant_oid);
    }
 
}


Bilen varsa destek yapabilir mi hocamıza ?
 
Shopier Diğer Sanal Pos Sistemleri gibi Prosedürler Yok Shopierden başka Sanal Pos Sistemlerine Dijital İçerik Satışı Diye Belirtince Kapsamıyoruz Veyahut Birkaç Belge Talebinde Bulunuyorlar işi yokuşa sürüyorlar Dijital İçerik Satışı yapan SMM Paneller genelde Bu yüzden Shopier Kullanıyorlar ve Alternatif Pek yok Ülkemizde malesef, Ödeme Sistemleri Paypal gibi Stripe gibi hatta google Pay, Yandex Money gibi Uluslar Arası kurumların hizmetleri yok yerelde kalacaksak da en azından alternatifler olsun komisyon oranları da değişiklik gösteriyor isteyen kendi Anlaşmalı olduğu sanal pos Sağlayıcısından Hizmet Alsın
Yapmış olduğum bir eticaret sisteminde kullandığım SDK var aslında Shopier Api Sdk güzelde çalışıyor. Fikir vermesi açısından inceleyebilirsiniz. Paywant mantığı ile çok benzer çalışıyor ikisini de inceleyerek çözebilirsiniz.

Eklentiden bağımsız kullanıcılara ek bir uyarı yapmak istiyorum. Genelde bu tür ödeme kuruluşları var diye bunlardan pos alan kişiler takip edilmediğini veya vergi vermeyeceğini zannediyor olabilir. Paytr, Shopier, Paywant veya diğerleri hangisini kullanırsanız kullanın eğer sitenizde pos kullanıyorsanız almış olduğunuz ödemeler bu firmalar tarafından maliyeye bildirilir.. ki, bildirmek zorundalar. Eğer bir vergi levhanız yoksa yani vergi vermeden bu işleri yapıyorsanız günün birinde (bir kaç yılda olabilir) maliye kapınızı çalabilir. Kapınızı çalar derken ironi yapmıyorum. Bir maliye memuru gerçekten evinizin kapısını çalabilir. Her pos işlemine fiyat ne olursa olsun üst ceza sınırından ceza kesebilir. Pos aldığınız günden itibaren 300 işlem mi yaptınız 300 x üst sınır. Dolayısıyla bu işleri yapmadan önce bir şahıs şirketi de olsa açmanız sizin yararınıza olacaktır. Öyle aman aman bir geliriniz yok ise hiç bulaşmanızı tavsiye etmem.
 
Yapmış olduğum bir eticaret sisteminde kullandığım SDK var aslında Shopier Api Sdk güzelde çalışıyor. Fikir vermesi açısından inceleyebilirsiniz. Paywant mantığı ile çok benzer çalışıyor ikisini de inceleyerek çözebilirsiniz.

Eklentiden bağımsız kullanıcılara ek bir uyarı yapmak istiyorum. Genelde bu tür ödeme kuruluşları var diye bunlardan pos alan kişiler takip edilmediğini veya vergi vermeyeceğini zannediyor olabilir. Paytr, Shopier, Paywant veya diğerleri hangisini kullanırsanız kullanın eğer sitenizde pos kullanıyorsanız almış olduğunuz ödemeler bu firmalar tarafından maliyeye bildirilir.. ki, bildirmek zorundalar. Eğer bir vergi levhanız yoksa yani vergi vermeden bu işleri yapıyorsanız günün birinde (bir kaç yılda olabilir) maliye kapınızı çalabilir. Kapınızı çalar derken ironi yapmıyorum. Bir maliye memuru gerçekten evinizin kapısını çalabilir. Her pos işlemine fiyat ne olursa olsun üst ceza sınırından ceza kesebilir. Pos aldığınız günden itibaren 300 işlem mi yaptınız 300 x üst sınır. Dolayısıyla bu işleri yapmadan önce bir şahıs şirketi de olsa açmanız sizin yararınıza olacaktır. Öyle aman aman bir geliriniz yok ise hiç bulaşmanızı tavsiye etmem.
Aynen Öyle Vergi levham olmadan önce Başka bir Sanal Pos Kuruluşu ile Çalışıyordum Bir Ödeme de Kuruluş ile Kullanıcı Bankası Arasında Bir Sorun oluştu İşlem askıda kaldı banka İade talep etti Kullanıcı da Sanal Pos Firmasından Şikayetçi Olunca Olay bana Patladı Maliyeden Yoklama Emri Kağıdı geldi Adresime Gittim Vergi dairesinde Olayı Anlattım O zaman Adsense Gelirlerime Dahi El konulmuş Hesaplarım İnceleme Altına Alınmış ve Sizin cezayı Düşürmek için tek yapmanız gereken Vergi dairesi ile Anlaşıp Defter Mükellefi Olmanız Artık Web Gelirleri Basit Usülde işlem yapılmıyor Muhasebeci tutup E-Fatura Müşterisi Yapıyorlar ve Sigortanız Yoksa Bağ-kur Ödemeniz gerekiyor Sanal Pos Ödemesi Yaptırmayın demiyorum Ama arkadaşlar artık bende sizin gibi Vergi levhasız Sanal PoS Sistemleri ile Bir Api Alır yoluma bakarım diye düşünüyordum ama bende artık bir Vergi Mükellefi Olduğum için yarın Öbür gün Başınız Yanmasın Eklentiye Gelecek Olursak Sorunsuz Çalışmakta Shopier Firmasının onayına sunmayı düşündük en nihayetinden sağlayıcı firma onlar bir incelerler kendi Geliştirici ekipleri ekleme çıkartma vs. yapar ve Kullanıcılarına sunarsa Onlar sunsun En nihayetinden Ücretsiz Bir Çalışma ve Hepimiz için En Sağlıklısı bu
 
Shopier Firmasının onayına sunmayı düşündük en nihayetinden sağlayıcı firma onlar bir incelerler kendi Geliştirici ekipleri ekleme çıkartma vs. yapar ve Kullanıcılarına sunarsa Onlar sunsun En nihayetinden Ücretsiz Bir Çalışma ve Hepimiz için En Sağlıklısı bu
Evet, mantıklı.
 
Merhabalar Eklenti yaptınızmı sorunu çözebildiniz mi banada lazım su anda
Eklenti için Shopier ile iletişime geçemedim Dönmediler veya ilgilenmediler Eklentiyi bir abime ısrar karşılığı kaynak kodları ile verdim ve kendi sitesinde 3.5 Aydır Kullanıyor dışarıya ücretsiz yayınlamak istediğimi belirtsem de kendi tamamladığı için bana izin vermedi bende Etik olmaz diye Paylaşıma Açamıyorum ikna edebilirsem Github linkini ve eklentiyi Ayrı bir Konu olarak Burada yayınlayacağım
 

Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.