[Plugin] Pagar com Paypal e PagSeguro nos fóruns de Publicidade

Ver o tópico anterior Ver o tópico seguinte Ir para baixo

Membro Entusiasta
  • 0

[Plugin] Pagar com Paypal e PagSeguro nos fóruns de Publicidade Empty [Plugin] Pagar com Paypal e PagSeguro nos fóruns de Publicidade

Mensagem por Hancki 20.12.16 20:04


Pagar com Paypal e Pagseguro nos fóruns de Publicidade
Agora pode adicionar ao seu fórum de Publicidade (vendas e anúncios) a opção de pagar com Paypal (internacional) ou PagSeguro (Brasil).
Características e aplicação
Criador: Kyo Panda, Hancki, Shek Crowley
Versão: 1.0
Versão: Todas as versões
Dificuldade de instalação: Moderada
Resultado da aplicação
O resultado da aplicação será:
[Plugin] Pagar com Paypal e PagSeguro nos fóruns de Publicidade Beb757c0866d45eb8052e346c8b998dc
Processo de instalação
Para que possamos saber o seu email de vendedor, onde tem as contas Paypal ou PagSeguro registadas para receber os pagamentos, temos que primeiro criar um campo de perfil onde inserir esse email.
Aprenda como neste tutorial: [FAQ] Criação e gestão dos perfis

- Neste caso, o campo de perfil terá que ficar desta forma: clique aqui.
Pode sempre adicionar um ícone a seu gosto ou modificar o nome do campo.

- Depois do campo criado, temos que saber qual o número de identificação específico desse campo. Este processo é feito para que o código Javascript que vamos adicionar no passo seguinte, funcione na perfeição e consiga ir buscar o email a este campo sem dificuldades ou confusões.
Para isso, no menu de topo do nosso fórum, clicamos no botão "Perfil". Seremos levados à página de modificação dos dados do nosso perfil.
Agora ao passo mais importante (Google Chrome, Opera ou Mozilla Firefox são requeridos para o passo seguinte.)

Em cima do campo que foi criado, onde é escrito o nosso email, clique com a tecla direita do seu rato/mouse e procure pela opção "Inspecionar", "Inspecionar Elemento" ou algo similar. Veja a seguinte imagem para perceber: opção inspecionar.

Logo de seguida, aparecerá uma janela no próprio navegador com o código HTML de toda a estrutura do fórum. Como clicamos especificamente no campo de perfil, a janela aparecerá com o código desse campo de perfil logo selecionado, desta forma: elemento inspecionado

Atente na parte "id="profile_field_13_1"". Este último número, neste caso o número 1 (um), que foi sublinhado na imagem anterior, será o que devemos saber para editar o código no passo seguinte.

- Agora vamos adicionar o código que dará vida a este processo todo.
Para isso, vamos criar uma nova página Javascript: [FAQ] Páginas .JS

Neste caso, o nome da página qualquer um. No entanto, o investimento das páginas tem que ser "Em todas as páginas".

No campo "Código Javascript", coloque o seguinte:
Código:
/* globals jQuery, _userdata*/

/**
 * Adds payment methods to ForumActif ads page
 *
 * @author Kyo Panda (ajuda.forumeiros.com)
 * @author Hancki (ajuda.forumeiros.com)
 * @author Shek Crowley (ajuda.forumeiros.com)
 *
 * @license MIT
 */

; var FA = FA || {};

FA.Advertisement = FA.Advertisement || {};

FA.Advertisement.Payment = (function ($, settings) {
  var built = false;
  var methods = [];
  var product = {};
  var ready = false;
  var seller = {};

  var version;
  var $list;

  function Payment() {
    $(function () {
      var matches = location.pathname.match(/\/d(\d+)(p\d+)?-(.*)/i);

      if (matches === null) {
        log('Not in an advertisement page.');
        return;
      }

      product.id = matches[1];

      if (_userdata.user_id === -1) {
        log('Don\'t build payment options for guest members.');
        return;
      }

      version = getForumVersion();

      if (!version) {
        log('Forum version not supported.');
      }

      if (!parsePrice()) {
        log('Couldn\'t parse price from page.');
        return;
      }

      if (!parseName()) {
        log('Couldn\'t parse name from page.');
        return;
      }

      if (!getSellerData()) {
        log('Couldn\'t parse seller URL from page.');
      }
    });
  };

  Payment.prototype.getMethods = function () {
    return methods;
  };

  Payment.prototype.addMethod = function (data) {
    methods.push(data);
    if (ready) {
      buildMethod(data);
    }
  };

  var buildBlockHTML = function () {
    switch (version) {

      case 'phpbb2':
        return [
          '<table id="AD_BlockOptions" width="100%" class="forumline AD_Block module">',
          '  <tbody>',
          '    <tr>',
          '      <td class="catLeft">',
          '        <div class="AD_BlockTitle h3">',
          '          <p>' + settings.title + '</p>',
          '        </div>',
          '      </td>',
          '    </tr>',
          '    <tr>',
          '      <td class="row1">',
          '        <div class="AD_BlockContent">',
          '          <ul class="AD_ListInline AD_ListOptions AD_ListPayment"></ul>',
          '        </div>',
          '      </td>',
          '    </tr>',
          '  </tbody>',
          '</table>'
        ].join('\n');

      case 'phpbb3':
        return [
          '<div id="AD_BlockOptions" class="AD_Block module">',
          '  <div class="inner">',
          '    <span class="corners-top"><span></span></span>',
          '    <div class="AD_BlockTitle h3">',
          '      <p>' + settings.title + '</p>',
          '    </div>',
          '    <div class="AD_BlockContent">',
          '      <ul class="AD_ListInline AD_ListOptions AD_ListPayment"></ul>',
          '    </div>',
          '    <span class="corners-bottom"><span></span></span>',
          '  </div>',
          '</div>'
        ].join('\n');

      case 'punbb':
        return [
          '<div id="AD_BlockOptions" class="AD_Block module main" style="margin-bottom: 4px !important;">',
          '  <div class="AD_BlockTitle main-head">',
          '    <p>' + settings.title + '</p>',
          '  </div>',
          '  <div class="AD_BlockContent main-content clearfix">',
          '    <ul class="AD_ListInline AD_ListOptions AD_ListPayment"></ul>',
          '  </div>',
          '</div>'
        ].join('\n');

      case 'invision':
        return [
          '<div id="AD_BlockOptions" class="AD_Block box-content">',
          '  <div class="maintitle">',
          '    <h3>' + settings.title + '</h3>',
          '  </div>',
          '  <div class="AD_BlockContent">',
          '    <ul class="AD_ListInline AD_ListOptions AD_ListPayment"></ul>',
          '  </div>',
          '</div>'
        ].join('\n');

      case 'mobile-modern':
        return [
          '<div id="ad-block-options">',
          '  <h2>' + settings.title + '</h2>',
          '  <ul class="ad-mod-options box-subtle AD_ListPayment"></ul>',
          '</div>'
        ].join('\n');

      default:
        return false;
    }
  };

  var buildFontAwesome = function () {
    return [
      '<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" />',
      '<style>',
      '  .AD_ListOption a span.fa {',
      '    color: #666666;',
      '    font-size: 30px;',
      '    line-height: 30px;',
      '    box-sizing: initial;',
      '  }',
      '',
      '  .AD_ListOption a span.fa:before {',
      '    display: inline-block;',
      '  }',
      '',
      '  #ad-block-options h2 {',
      '    text-align: center;',
      '  }',
      '</style>'
    ].join('\n');
  };

  var buildForm = function (data) {
    var list;

    list = [];

    $.each(data, function (key, value) {
      list.push('<input type="hidden" name="' + key + '" value="' + value + '" />');
    });

    return list.join('\n');
  };

  var buildHTML = function () {
    if (version === 'mobile-modern') {
      $('.box:eq(0)').after(buildBlockHTML());
    } else {
      $('#AD_BlockSeller').after(buildBlockHTML());
    }

    $('head').append(buildStyle());

    if (settings.fontawesome) {
      $('head').append(buildFontAwesome());
    }

    $list = $('.AD_ListPayment');
    built = true;
  };

  var buildMethod = function (data) {
    var email = seller[data.profileFieldId];

    if (!email || email === '-') {
      log('The seller has no e-mail for given method:', data.title);
      return;
    }

    if (!built) {
      buildHTML();
    }

    $list.append([
      '<li class="AD_ListOption ' + data.methodClass + '">',
      '  <a href="#"><span class="' + data.methodIconClass + '"></span>' + data.title + '</a>',
      '</li>'
    ].join('\n'));

    $list.on('click', 'li.' + data.methodClass + ' a', function (event) {
      event.preventDefault();

      $('<form>', {
        action: data.endpointUrl,
        method: 'POST',
        target: '_blank',
        html: buildForm(data.formData({
          email: email,
          price: product.price,
          name: product.name,
          id: product.id
        }))
      }).submit();
    });
  };

  var buildMethods = function () {
    $.each(methods, function (key, data) {
      buildMethod(data);
    });
  };

  var buildStyle = function () {
    return [
      '<style>',
      '  .AD_ListOption a span {',
      '    display: block;',
      '    margin: auto;',
      '    padding: 10px 0;',
      '    width: 30px;',
      '    height: 30px;',
      '  }',
      '</style>'
    ].join('\n');
  };

  var getForumVersion = function () {
    if ($('table.bodylinewidth').length !== 0) {
      return 'phpbb2';
    }

    if ($('body#phpbb').length !== 0) {
      return 'phpbb3';
    }

    if ($('div.pun').length !== 0) {
      return 'punbb';
    }

    if ($('div#ipbwrapper').length !== 0) {
      return 'invision';
    }

    if ($('body#mpage-body-modern').length !== 0) {
      return 'mobile-modern';
    }

    return false;
  };

  var getSellerData = function () {
    var $element;

    if (version === 'mobile-modern') {
      $element = $('p.profile-username a');
    } else {
      $element = $('#AD_BlockSeller a[href^="/u"]');
    }

    if ($element.length === 0) {
      return false;
    }

    return $.get($element.attr('href'), function (html) {
      var $fields;

      if (version === 'mobile-modern') {
        $fields = $('[id^="field_custom"]', html);
      } else {
        $fields = $('[id^="field"]', html);
      }

      if ($fields.length === 0) {
        log('Couldn\'t parse seller data from page.');
        return;
      }

      $fields.each(function () {
        var $self = $(this);
        var id = $self.attr('id').replace(/[^\d-]+/g, '');

        if (version === 'mobile-modern') {
          seller[id] = $self.text().split(' : ').pop();
        } else {
          seller[id] = $self.find('.field_uneditable').text().trim();
        }
      });

      buildMethods();

      ready = true;
    });
  };

  var log = function () {
    if (!console || !console.log) {
      return;
    }

    var args = Array.prototype.slice.call(arguments);

    console.log.apply(this, ['[FA.Advertisement.Payment]'].concat(args));
  };

  var parseName = function () {
    var $element;

    if (version === 'mobile-modern') {
      $element = $('.box > h2');
    } else {
      $element = $('.AD_SectionTitle h1');
    }

    if ($element.length === 0) {
      return false;
    }

    product.name = $element.text().trim();

    return true;
  };

  var parsePrice = function () {
    var $element;

    if (version === 'mobile-modern') {
      $element = $('.ad-details .AD_ListDescValue:eq(0)');
    } else {
      $element = $('.AD_ListDesc li:eq(0) .AD_ListDescValue');
    }

    if ($element.length === 0) {
      return false;
    }

    product.price = parseFloat(
      $element
        .text()
        .trim()
        .split(/\s/i)
        .shift()
        .replace(',', '.')
    );

    if (!$.isNumeric(product.price)) {
      return false;
    }

    return true;
  };

  return new Payment();
}(jQuery, {
  title: 'Métodos de pagamento',
  fontawesome: true
}));

/* globals FA */
 
/**
 * Adds the PayPal payment method to ForumActif ads page.
 * Requires payment methods plugin to be installed.
 *
 * @author Kyo Panda (ajuda.forumeiros.com)
 * @author Hancki (ajuda.forumeiros.com)
 * @author Shek Crowley (ajuda.forumeiros.com)
 *
 * @license MIT
 */
 
; FA.Advertisement.Payment.addMethod({
  profileFieldId: 1,
  title: 'PayPal',
  methodClass: 'AD_PayPalPaymentMethod',
  methodIconClass: 'fa fa-paypal fa-2x',
  endpointUrl: 'https://www.paypal.com/cgi-bin/webscr',
  formData: function (args) {
    return {
      cmd: '_xclick',
      business: args.email,
      return: 'http://' + location.host + '/h1-paypal-return',
      cancel: 'http://' + location.host + '/h2-paypal-cancel',
      notify_url: '',
      charset: 'uft-8',
      lc: 'PT',
      country_code: 'PT',
      currency_code: 'EUR',
      amount: args.price,
      item_name: args.name,
      quantity: 1
    };
  }
});
/* globals FA, _userdata */
 
/**
 * Adds the PagSeguro payment method to ForumActif ads page.
 * Requires payment methods plugin to be installed.
 *
 * @author Kyo Panda (ajuda.forumeiros.com)
 * @author Hancki (ajuda.forumeiros.com)
 * @author Shek Crowley (ajuda.forumeiros.com)
 *
 * @license MIT
 */
 
; FA.Advertisement.Payment.addMethod({
  profileFieldId: 1,
  title: 'PagSeguro',
  methodClass: 'AD_PagSeguroPaymentMethod',
  methodIconClass: 'fa fa-shopping-bag fa-2x',
  endpointUrl: 'https://pagseguro.uol.com.br/v2/checkout/payment.html',
  formData: function (args) {
    return {
      receiverEmail: args.email,
      currency: 'BRL',
      itemId1: args.id,
      itemDescription1: args.name,
      itemAmount1: args.price,
      itemQuantity1: 1,
      itemWeight1: '0000',
      reference: 'REF' + args.id,
      senderName: _userdata.username,
      encoding: 'UTF-8'
    };
  }
});

Agora, procure o seguinte trecho de texto no código (a partir das linhas 400): "profileFieldId: 1" (veja aqui: trecho de código)

Repare que tem o número 1 (um). Modifique esse número de acordo com o número que encontrou no passo anterior. Neste caso, o número foi o 1 em ambos os passos.
Acabou de fazer a alteração para a opção de Paypal. Puxe as linhas mais abaixo e encontre novamente o mesmo trecho de código, porém este seguinte é para PagSeguro.
Caso o email seja o mesmo nos dois serviços, pode colocar o mesmo número nos dois lados. Caso tenha email único para cada um dos serviços, pode sempre criar um novo campo de perfil para o PagSeguro. Repita o mesmo processo para encontrar o número único deste novo campo criado e coloque-o no código, tal como fez com o PayPal.

Caso tenha dúvidas, não hesite em comentar!
Hancki, Kyo Panda, Shek Crowley
Hancki

Hancki
Membro Entusiasta
Membro Entusiasta

Membro desde : 03/10/2009
Mensagens : 8190
Pontos : 12245

https://ajuda.forumeiros.com/

Ir para o topo Ir para baixo

Ver o tópico anterior Ver o tópico seguinte Ir para o topo

- Tópicos semelhantes

Permissões neste sub-fórum
Não podes responder a tópicos