carloswgama/php-moip

用于在MoIP上进行透明或不透明结账的购物库

1.2.0 2017-10-18 14:37 UTC

This package is not auto-updated.

Last update: 2024-09-29 00:48:51 UTC


README

用于在MoIP环境中进行常规支付或透明结账的类

该库基于Moip的版本1(因为版本2仍在Beta测试中,存在一些错误)并使用Moip的SDK V1

环境

首先需要知道Moip有两个环境:生产环境和沙盒(测试环境)以及两个版本

Moip V2 - 当前版本,仍在Beta测试中

Moip V1 - 旧版,功能齐全且在项目中仍被广泛使用

访问链接如下

Moip V2 - 生产 Moip V2 - 沙盒

Moip V1 - 生产 Moip V1 - 沙盒

配置

查找Token和Key

第一步是登录MoiP账户。

MoIP V2

登录后,选择我的账户 >> 配置 >> 访问密钥并查找Token和Key(key)

Chaves de Acesso no V2

MoIP V1

登录后,选择工具 >> MoIP API >> 访问密钥并查找Token和Key(key)

Chaves de Acesso no V1

配置通知URL

通知URL是发送所有购物状态更新通知(例如:已开始、已取消、已批准等)的链接

MoIP V2

选择我的账户 >> 配置 >> 通知并插入通知将发送到的链接

Chaves de Acesso no V2

MoIP V1

选择我的数据 >> 偏好 >> 交易通知并插入通知将发送到的链接

Chaves de Acesso no V2

安装库

要在项目中使用该库,请下载此存储库并导入MoipPagamento.php和MoipNASP.php类,或通过Composer导入(更推荐)

composer require carloswgama/php-moip:1.*

如果您的项目已存在composer.json文件,您也可以将其添加到依赖项require中并运行composer install

{
    "require": {
        "carloswgama/php-moip": "1.*"
    }
}

更新 1.2.0

  • MoIP Marketplace的新功能

允许在同一销售中添加来自不同卖家的产品。如果产品不是来自主要卖家,只需在第三个参数中指定接收该产品销售款的卖家登录名即可

  • addProduto($produto, $valor, $login = '')

允许添加一个百分比,该百分比将从其他卖家处收取并支付给主要卖家

  • setComissaoVendedorPrincipal($porcentagem)

使用库

MoIP环境中的结账

创建一个新的简单购物

<?php
require dirname(__FILE__).'/vendor/autoload.php';

use CWG\Moip\MoipPagamento;

$token =  'J27IIMSM0MWSQJIXT1MDUTHZFBWMV4W2';
$key = 'IEVEAUWW0E4GX6FPYIEUHC7YTJEGOFNYXCEPKAER';
$sandbox = true;

$moipPag = new MoipPagamento($token, $key, $sandbox);

$urlPagamento = $moipPag->setID('CWG_001')   	//ID unico da compra
                        ->setPreco(10.00)   	//Preço da compra
                        ->setDescricao('Descrição da Compra')
                        ->pagar();				//Cria a compra e retorna o link para checkout

if (!$urlPagamento) die ($moipPag->getErro());	//Apresenta mensagem, caso tenha ocorrido algum erro

echo "URL para o checkout do moip: " . $urlPagamento;

创建一个包含产品的购物

<?php
require dirname(__FILE__).'/vendor/autoload.php';

use CWG\Moip\MoipPagamento;

$token =  'J27IIMSM0MWSQJIXT1MDUTHZFBWMV4W2';
$key = 'IEVEAUWW0E4GX6FPYIEUHC7YTJEGOFNYXCEPKAER';
$sandbox = true;

$moipPag = new MoipPagamento($token, $key, $sandbox);

$urlPagamento = $moipPag->setID(uniqid())   //ID unico para identificar a compra (OPCIONAL)
                        ->addProduto('Caderno', 23.99)   //Preço do Caderno
                        ->addProduto('Lápis', 2.00)   //Preço do Lápis
                        ->pagar();

if (!$urlPagamento) die ($moipPag->getErro());	//Apresenta mensagem, caso tenha ocorrido algum erro

echo "URL para o checkout do moip: " . $urlPagamento;

用于通过MoIP环境进行购物的库有以下方法

创建一个高级购物

如上表所示,我们还可以定义哪些支付方式将被启用,以及如何向汇票添加信息。

require dirname(__FILE__).'/vendor/autoload.php';

use CWG\Moip\MoipPagamento;

$token =  'J27IIMSM0MWSQJIXT1MDUTHZFBWMV4W2';
$key = 'IEVEAUWW0E4GX6FPYIEUHC7YTJEGOFNYXCEPKAER';
$sandbox = true;

$moipPag = new MoipPagamento($token, $key, $sandbox);

$urlPagamento = $moipPag->setID(uniqid())   //ID unico para a compra
                        ->setPreco(50.00)   //Preço da compra
                        ->addFormaPagamento(MoipPagamento::CHECKOUT_BOLETO) //Libera forma de pagamento via Boleto
                        ->configurarBoleto('2017-03-01', 'http://site.com.br/logo.png', array('Linha 1', 'Linha 2')) //Informações do boleto
                        ->addFormaPagamento(MoipPagamento::CHECKOUT_CARTAO) //Libera forma de pagamento via cartão
                        ->setDescricao('Descrição da Compra')
                        ->setVendedor('carloswgama@gmail.com') //Adiciona quem deverá receber o apagamento ao invés da conta vinculada a API
                        ->addComissao('carloswgama2@gmail.com', 10) //Adiciona outro vendedor que irá receber 10 reais de comissão do vendedor principal dessa venda
                        ->addComissao('carloswgama3@gmail.com', 10, TRUE) //Adiciona outro vendedor que irá receber 10% (5 reais) de comissão do vendedor principal dessa venda
                        ->pagar();

if (!$urlPagamento) die ($moipPag->getErro());

echo "URL para o checkout do moip: " . $urlPagamento;

市场购物车

还可以设置销售的产品,其中可能包含不同销售者的产品。对于其他销售者的产品,应提供将为此产品收取款项的销售者MoIP账户登录信息。

还可以指定一个百分比佣金,该佣金将减少其他销售者的收款金额并给予主要销售者。

require dirname(__FILE__).'/vendor/autoload.php';

use CWG\Moip\MoipPagamento;

$token =  'J27IIMSM0MWSQJIXT1MDUTHZFBWMV4W2';
$key = 'IEVEAUWW0E4GX6FPYIEUHC7YTJEGOFNYXCEPKAER';
$sandbox = true;

$moipPag = new MoipPagamento($token, $key, $sandbox);

//Adicionando produtos de diferentes vendedores 
$urlPagamento = $moipPag->setID(uniqid())   //ID unico para identificar a compra (OPCIONAL)
                        ->addProduto('Caderno', 20) //Produto do vendedor principal
                        ->addProduto('Tenis', 140.50, 'carloswgama@gmail.com') //produto de carloswgama@gmail.com
                        ->addProduto('Camiseta', 40.00, 'carloswgama@gmail.com') //produto de carloswgama@gmail.com
                        ->addProduto('Storage 500GB', 300.00, 'informatica@gmail.com') //produto de 'informatica@gmail.com'
                        ->setComissaoVendedorPrincipal(10) //(Opcional) 10% dos outros vendedores será dado ao vendedor principal
                        ->setDescricao('Compra Marketplace')
                        ->pagar();

if (!$urlPagamento) die ($moipPag->getErro());

echo "URL para o checkout do moip: " . $urlPagamento;

透明购物车

使用汇票(透明购物车)支付

命令与MoIP环境中的购物车非常相似,但在此我们将生成一些脚本(JavaScript)以在客户环境中完成整个流程。

require dirname(__FILE__).'/vendor/autoload.php';

use CWG\Moip\MoipPagamento;

$token =  'J27IIMSM0MWSQJIXT1MDUTHZFBWMV4W2';
$key = 'IEVEAUWW0E4GX6FPYIEUHC7YTJEGOFNYXCEPKAER';
$sandbox = true;

$moipPag = new MoipPagamento($token, $key, $sandbox);

$scripts = $moipPag->setID(uniqid())   //ID unico para identificar a compra
                        ->setPreco(50.00)   //Preço da compra
                        ->setDescricao('Descrição da Compra')
                        ->addFormaPagamento(MoipPagamento::CHECKOUT_BOLETO) //Gera apenas scripts para o Boleto
						->configurarBoleto('2017-03-01', 'http://site.com.br/logo.png', array('Linha 1', 'Linha 2')) 
                        ->addVendedorSecundario('carloswgama2@gmail.com', 10) //Adiciona outro vendedor que irá receber 10 reais dessa venda
                        ->addVendedorSecundario('carloswgama3@gmail.com', 10, TRUE) //Adiciona outro vendedor que irá receber 10% (5 reais) dessa venda
                        ->getCheckoutTransparente();

?>
<?php echo $scripts['default'] ?>

<!-- PAGAR BOLETO -->
<h1>Boleto</h1> 
<button onclick="MoipPagarBoleto();">Imprimir Boleto</button>
<br/>

getCheckoutTransparente()方法将返回一个包含运行透明购物车所需所有脚本的数组。在其最基本的形式中,只需调用数组的'default'值,该值已包含所有准备好的脚本。

要调用汇票,只需调用javascript: MoipPagarBoleto()函数,将打开一个新标签页并显示汇票。

在沙箱环境中,而不是打开银行或汇票,总是打开MoIP的测试环境。

除了前面表中提到的方法之外,使用透明购物车还将有以下几个方法可用。

由方法生成的一些JavaScript脚本包括

  • MoipFuncaoSucesso(data) -> 在请求成功执行时调用的函数。变量data通过MoIP发送了一些信息,如购买状态(如果使用卡支付)。
  • MoipFuncaoFalha(data) -> 在执行订单时发生某些错误(如无效卡)时调用的函数。变量data通过MoIP发送了一些信息,如消息和错误代码。
  • MoipPagarBoleto() -> 启动透明购物车以生成汇票
  • MoipPagarDebitoBancario() -> 启动透明购物车以进行银行借记卡支付
  • MoipPagarCartao() -> 启动透明购物车以使用信用卡支付

使用银行借记卡(透明购物车)支付

要使用透明购物车进行银行借记卡支付,必须提供将进行存款的银行。可以通过getInstituicoesDebito()方法获取可用银行。以下是一些可用银行:

  • 巴西银行(BancoDoBrasil)
  • 布拉德斯科(Bradesco)
  • 伊塔乌(Itau)
  • 巴林苏尔(Barinsul)

要选择银行,输入或选择字段应包含id "moip_debito_instituicao",该id将由javascript MoipPagarDebitoBancario()函数使用。

require dirname(__FILE__).'/vendor/autoload.php';

use CWG\Moip\MoipPagamento;

$token =  'J27IIMSM0MWSQJIXT1MDUTHZFBWMV4W2';
$key = 'IEVEAUWW0E4GX6FPYIEUHC7YTJEGOFNYXCEPKAER';
$sandbox = true;

$moipPag = new MoipPagamento($token, $key, $sandbox);

$scripts = $moipPag->setID(uniqid())   //ID unico para identificar a compra
                        ->addProduto('Caderno', 20) //Produto do vendedor principal
                        ->addProduto('Storage 500GB', 300.00, 'informatica@gmail.com') //produto de 'informatica@gmail.com'
                        ->setComissaoVendedorPrincipal(10) //(Opcional) 10% do vendedor informatica@gmail.com será dado ao vendedor principal
                        ->addFormaPagamento(MoipPagamento::CHECKOUT_DEBITO_BANCARIO) //Libera forma de pagamento
                        ->getCheckoutTransparente();

$instituicoesDebito = $moipPag->getInstituicoesDebito();

?>
<?php echo $scripts['default'] ?>

<!-- PAGAR DEBITO BANCARIO -->
<h1>Debito Bancário</h1> 
<select id="moip_debito_instituicao">
<?php foreach($instituicoesDebito as $key => $value): ?>
    <option value="<?php echo $key ?>"> <?php echo $value?></option>
<?php endforeach; ?>
</select>

<button onclick="MoipPagarDebitoBancario();">Pagar com Debito Bancário</button>

使用信用卡(透明购物车)支付

要使用透明购物车进行信用卡支付,过程与其他类似,但为了开始支付,我们使用javascript MoipPagarCartao()函数。

该函数将查找8个字段,这些字段应具有以下id

  • moip_cartao_titular_nome => 卡主姓名,与卡上相同
  • moip_cartao_titular_nascimento => 卡主出生日期(DD/MM/YYYY)
  • moip_cartao_titular_telefone => 卡主电话。例如:(99)99999-9999
  • moip_cartao_titular_cpf => 卡主CPF(999.999.999-99)
  • moip_cartao_parcelas => 购买将分成多少期(1-12期以上3期有利息)
  • moip_cartao_numero => 卡号
  • moip_cartao_validade => 卡有效期(MM/YYYY)。例如:07/2018
  • moip_cartao_codigo_seguranca => 卡背面的安全码CVV

示例

require dirname(__FILE__).'/vendor/autoload.php';
use CWG\Moip\MoipPagamento;

$token =  'J27IIMSM0MWSQJIXT1MDUTHZFBWMV4W2';
$key = 'IEVEAUWW0E4GX6FPYIEUHC7YTJEGOFNYXCEPKAER';
$sandbox = true;

$moipPag = new MoipPagamento($token, $key, $sandbox);

$scripts = $moipPag->setID(uniqid())   //ID unico para identificar a compra
                        ->setPreco(10.00)   //Preço da compra
                        ->setDescricao('Descrição da Compra')
                        ->addFormaPagamento(MoipPagamento::CHECKOUT_CARTAO) //Libera forma de pagamento por cartão
                        ->getCheckoutTransparente();

?>
<?php echo $scripts['default'] ?>

<!-- PAGAR CARTÃO -->
<h1>Cartão de Crédito</h1>
<p>Nome do Titular como Consta no Cartão</p>
<input type="text" id="moip_cartao_titular_nome" placeholder="CARLOS W GAMA"/>
 
<p>CPF do títular </p>
<input type="text" id="moip_cartao_titular_cpf" placeholder="000.000.000-00"/>
 
<p>Data de Nascimento do títular</p>
<input type="text" id="moip_cartao_titular_nascimento" placeholder="01/01/2017"/>
 
<p>Telefone do títular</p>
<input type="text" id="moip_cartao_titular_telefone" placeholder"(99)99999-9999"/>
 
<p>Número do Cartão</p>
<input type="text" id="moip_cartao_numero" placeholder="4012001037141112"/>
 
<p>Data de Expiração</p>
<input type="text" id="moip_cartao_validade" placeholder="05/2018"/>
 
<p>Código de Segurança do Cartão</p>
<input type="text" id="moip_cartao_codigo_seguranca" placeholder="123"/>
 
<p>Parcelas</p>
<select id="moip_cartao_parcelas">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>

<button onclick="MoipPagarCartao();">Pagar com Cartão de Crédito</button>

透明购物车提供的多种支付选项

要给客户提供使用透明购物车进行多种购买选择的选项,只需选择支付方式(如果未提供,则所有3种方式都将可用)并调用与支付类型相关的javascript函数。

  • MoipPagarBoleto() -> 汇票
  • MoipPagarDebitoBancario() -> 银行转账
  • MoipPagarCartao() -> 信用卡

注意:请记住查看银行转账和信用卡支付需要哪些字段

定制支付脚本

当购买请求发生失败或成功时,MoIP使用的函数可以很容易地接收额外的简单脚本,只需在getCheckoutTransparente()方法中传递脚本作为参数即可

require dirname(__FILE__).'/vendor/autoload.php';

use CWG\Moip\MoipPagamento;

$token =  'J27IIMSM0MWSQJIXT1MDUTHZFBWMV4W2';
$key = 'IEVEAUWW0E4GX6FPYIEUHC7YTJEGOFNYXCEPKAER';
$sandbox = true;

$moipPag = new MoipPagamento($token, $key, $sandbox);

$extraScriptSucesso = 'alert(data.Mensagem);';
$extraScriptFalha = 'alert(data.Mensagem);';

$scripts = $moipPag->setID(uniqid())   //ID unico para identificar a compra
                        ->setPreco(10.00)   //Preço da compra
                        ->setDescricao('Descrição da Compra')
                        ->getCheckoutTransparente($extraScriptSucesso, $extraScriptFalha);
?>
<?php echo $scripts['default'] ?>
 
 [...]

<button onclick="MoipPagarBoletoPersonalizado();">Imprimir Boleto</button>
<button onclick="MoipPagarDebitoBancario();">Pagar com Debito Bancário</button>
<button onclick="MoipPagarCartao();">Pagar com Cartão de Crédito</button>

如果您想修改MoipPagarBoletoPersonalizado()、MoipPagarDebitoBancario()和MoipPagarCartao()方法,而不是调用getCheckoutTransparente()方法返回的默认脚本,请单独使用这些脚本

  • ["scriptMoip"] -> 必需的,它是与MoIP通信的起始点
  • ["scriptSucesso"] -> 生成MoipFuncaoSucesso(data)函数,如果您不想创建自己的函数,只需调用此字段即可
  • ["scriptFalha"] -> 生成MoipFuncaoFalha(data)函数,如果您不想创建自己的函数,只需调用此字段即可
  • ["scriptPagamentos"]["boleto"] -> 生成MoipPagarBoleto()函数,如果您不想创建自己的函数,只需调用此字段即可
  • ["scriptPagamentos"]["debito_bancario"] -> 生成MoipPagarDebitoBancario()函数,如果您不想创建自己的函数,只需调用此字段即可
  • ["scriptPagamentos"]["cartao"] -> 生成MoipPagarCartao()函数,如果您不想创建自己的函数,只需调用此字段即可

示例

require dirname(__FILE__).'/vendor/autoload.php';

use CWG\Moip\MoipPagamento;

$token =  'J27IIMSM0MWSQJIXT1MDUTHZFBWMV4W2';
$key = 'IEVEAUWW0E4GX6FPYIEUHC7YTJEGOFNYXCEPKAER';
$sandbox = true;

$moipPag = new MoipPagamento($token, $key, $sandbox);

$scripts = $moipPag->setID(uniqid())   //ID unico para identificar a compra
                        ->setPreco(10.00)   //Preço da compra
                        ->setDescricao('Descrição da Compra')
                        ->addFormaPagamento(MoipPagamento::CHECKOUT_DEBITO_BANCARIO) //Libera forma de pagamento 
                        ->addFormaPagamento(MoipPagamento::CHECKOUT_BOLETO) //Libera forma de pagamento 
                        ->getCheckoutTransparente();

?>
<!-- OBRIGATORIO scriptMoip -->
<?php echo $scripts['scriptMoip'] ?>
<!-- CHAMANDO MoipFuncaoSucesso(data) PADRÃO-->
<?php echo $scripts['scriptSucesso'] ?>
<!-- CHAMANDO MoipFuncaoFalha(data) PADRÃO-->
<?php echo $scripts['scriptFalha'] ?>
<!-- CHAMANDO MoipPagarBoleto() PADRÃO-->
<?php echo $scripts['scriptPagamentos']['boleto'] ?> 
<!-- CRIANDO MEU PRÓPRIO MÉTODO MoipPagarDebitoBancarioPersonalizado() com o banco já definido -->
<script type='text/javascript'>
    function MoipPagarDebitoBancarioPersonalizado() {
        var settings = { 
            "Forma": "DebitoBancario" , 
            "Instituicao": "BancoDoBrasil"
        } 
        MoipWidget(settings);
    }
</script>

<!-- PAGAR BOLETO -->
<h1>Boleto chamando script separado</h1> 
<button onclick="MoipPagarBoletoPersonalizado();">Imprimir Boleto</button>
<br/>

<!-- PAGAR DEBITO BANCARIO -->
<h1>Debito Bancário com Script Personalizado</h1> 
<button onclick="MoipPagarDebitoBancarioPersonalizado();">Pagar com Debito Bancário</button>

有关如何创建自己的javascript的更多信息,请参阅MoIP的JavaScript支付文档 MoIP支付JavaScript

NASP

NASP(支付状态变更通知)是发送到您在MoIP账户中配置的链接的通知。请求是通过POST发送的。

MoipNASP类有助于将MoIP发送的一些代码翻译为

示例

require dirname(__FILE__).'/vendor/autoload.php';
use CWG\Moip\MoipNASP;

$nasp = $_POST;

//Em caso de falha
$classificacao = MoipNASP::getClassificacao($nasp['classificacao']);

//Descrição do status do pagamento
$statusPagamento = MoipNASP::getStatusPagamento($nasp['status_pagamento']);

//Descição da forma de pagamento
$formasPagamento = MoipNASP::getFormaPagamento($nasp['forma_pagamento']);

//Todos os itens acima, mas os dados restantes
$naspFormatado = MoipNASP::formateNASP($nasp);

MoipNASP::getClassificacao($_POST['classificacao'])

返回'分类'发送的代码的含义描述。通常在取消购买的购买中发送。

MoipNASP::getStatusPagamento($_POST['status_pagamento'])

返回'支付状态'发送的代码的含义描述。选项可以是

  • 已授权
  • 已启动
  • 已打印汇票
  • 已完成
  • 已取消
  • 待审核
  • 已撤销
  • 已退款

MoipNASP::getFormaPagamento($_POST['forma_pagamento'])

返回'支付方式'发送的代码的含义描述,可以是MoIP钱包余额(在MoIP环境中进行结账),信用卡,汇票或银行转账。

MoipNASP::formateNASP($_POST)

格式化发送的所有post,如上所述的方法中记录代码。

附加链接

MoIP V1官方文档 MoIP V1账户 MoIP V1沙箱账户

作者:Carlos W. Gama (carloswgama@gmail.com) 许可证:MIT 允许自由使用、修改和分发