carloswgama / php-moip
用于在MoIP上进行透明或不透明结账的购物库
Requires
- php: >=5.3.0
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 - 旧版,功能齐全且在项目中仍被广泛使用
访问链接如下
配置
查找Token和Key
第一步是登录MoiP账户。
MoIP V2
登录后,选择我的账户 >> 配置 >> 访问密钥并查找Token和Key(key)
MoIP V1
登录后,选择工具 >> MoIP API >> 访问密钥并查找Token和Key(key)
配置通知URL
通知URL是发送所有购物状态更新通知(例如:已开始、已取消、已批准等)的链接
MoIP V2
选择我的账户 >> 配置 >> 通知并插入通知将发送到的链接
MoIP V1
选择我的数据 >> 偏好 >> 交易通知并插入通知将发送到的链接
安装库
要在项目中使用该库,请下载此存储库并导入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 允许自由使用、修改和分发