moipv2/moip-sdk-php-v2

用于与 Moip v2 APIs 服务器端集成的 PHP 客户端

安装: 172

依赖: 0

建议: 0

安全性: 0

星标: 0

关注者: 1

分支: 90

类型:

v3.1.0 2018-01-29 13:31 UTC

README

moip-icon.png

MoIP v2 PHP 客户端 SDK

最简单快捷的将 Moip 集成到 PHP 应用程序的方式

SDK 当前状态

Scrutinizer Code Quality Code Climate Codacy Badge StyleCI Build Status

统计数据

Total Downloads Monthly Downloads

版本

Latest Stable Version Latest Unstable Version

索引

依赖

require

  • PHP >= 5.5
  • rmccue/requests >= 1.0

require-dev

  • phpunit/phpunit ~ 4.0

安装

在您的 shell 中执行

composer require moip/moip-sdk-php

配置认证

通过 Basic Auth

require 'vendor/autoload.php';

use Moip\Moip;
use Moip\Auth\BasicAuth;

$token = '01010101010101010101010101010101';
$key = 'ABABABABABABABABABABABABABABABABABABABAB';

$moip = new Moip(new BasicAuth($token, $key), Moip::ENDPOINT_SANDBOX);

通过 OAuth

require 'vendor/autoload.php';

use Moip\Moip;
use Moip\Auth\OAuth;

$access_token = '33031e2aad484051b89030487e59d133_v2';
$moip = new Moip(new OAuth($access_token), Moip::ENDPOINT_SANDBOX);

客户

创建客户

在此示例中,将创建一个包含客户数据的订单 - 包含收货和付款地址。

$customer = $moip->customers()->setOwnId(uniqid())
    ->setFullname('Fulano de Tal')
    ->setEmail('fulano@email.com')
    ->setBirthDate('1988-12-30')
    ->setTaxDocument('22222222222')
    ->setPhone(11, 66778899)
    ->addAddress('BILLING',
        'Rua de teste', 123,
        'Bairro', 'Sao Paulo', 'SP',
        '01234567', 8)
    ->addAddress('SHIPPING',
                'Rua de teste do SHIPPING', 123,
                'Bairro do SHIPPING', 'Sao Paulo', 'SP',
                '01234567', 8)
    ->create();
print_r($customer);

查询客户数据

$customer = $moip->customers()->get('CUS-Q3BL0CAJ2G33');
print_r($customer);

添加信用卡

$customer = $moip->customers()->creditCard()
    ->setExpirationMonth('05')
    ->setExpirationYear(2018)
    ->setNumber('4012001037141112')
    ->setCVC('123')
    ->setFullName('Jose Portador da Silva')
    ->setBirthDate('1988-12-30')
    ->setTaxDocument('CPF', '33333333333')
    ->setPhone('55','11','66778899')
    ->create(CUSTOMER_ID);
print_r($customer);

删除信用卡

$moip->customers()->creditCard()->delete(CREDIT_CARD_ID);

订单

与刚创建的买家创建订单

在这个例子中,有多个产品,并且还指定了运费、附加费和折扣价值。

$order = $moip->orders()->setOwnId(uniqid())
    ->addItem("bicicleta 1",1, "sku1", 10000)
    ->addItem("bicicleta 2",1, "sku2", 11000)
    ->addItem("bicicleta 3",1, "sku3", 12000)
    ->addItem("bicicleta 4",1, "sku4", 13000)
    ->addItem("bicicleta 5",1, "sku5", 14000)
    ->addItem("bicicleta 6",1, "sku6", 15000)
    ->addItem("bicicleta 7",1, "sku7", 16000)
    ->addItem("bicicleta 8",1, "sku8", 17000)
    ->addItem("bicicleta 9",1, "sku9", 18000)
    ->addItem("bicicleta 10",1, "sku10", 19000)
    ->setShippingAmount(3000)->setAddition(1000)->setDiscount(5000)
    ->setCustomer($customer)
    ->create();
print_r($order);

查询订单

特定订单

$order = $moip->orders()->get('ORD-KZCH1S1ORAH23');
print_r($order);

所有订单

无过滤
$orders = $this->moip->orders()->getList();
有过滤
$filters = new Filters();
$filters->greaterThanOrEqual(OrdersList::CREATED_AT, '2017-08-17');
$filters->in(OrdersList::PAYMENT_METHOD, ['BOLETO', 'DEBIT_CARD']);
$filters->lessThan(OrdersList::VALUE, 100000);

$orders = $this->moip->orders()->getList(null, $filters);
有分页
$orders = $this->moip->orders()->getList(new Pagination(10,0));
查询特定值
$orders = $this->moip->orders()->getList(null, null, 'josé silva');

也可以同时使用分页、过滤和查询特定值。

$filters = new Filters();
$filters->greaterThanOrEqual(OrdersList::CREATED_AT, '2017-08-17');
$filters->lessThan(OrdersList::VALUE, 100000);

$orders = $this->moip->orders()->getList(new Pagination(10,0), $filters, 'josé silva');

支付

创建

信用卡

创建订单后,只需在该订单中创建一个支付。

插入持卡人数据

要使用信用卡通过第三方卡(当客户不是将要使用的卡的持卡人)进行支付,需要确保这些数据在每个流程阶段都区分开来并正确提供。

$holder = $moip->holders()->setFullname('Jose Silva')
    ->setBirthDate("1990-10-10")
    ->setTaxDocument('22222222222', 'CPF')
    ->setPhone(11, 66778899, 55)
    ->setAddress('BILLING', 'Avenida Faria Lima', '2927', 'Itaim', 'Sao Paulo', 'SP', '01234000', 'Apt 101');
使用哈希

有关使用信用卡数据生成哈希的更多详细信息,请参阅文档。[链接](https://dev.moip.com.br/docs/criptografia-de-cartao)

$hash = 'i1naupwpTLrCSXDnigLLTlOgtm+xBWo6iX54V/hSyfBeFv3rvqa1VyQ8/pqWB2JRQX2GhzfGppXFPCmd/zcmMyDSpdnf1GxHQHmVemxu4AZeNxs+TUAbFWsqEWBa6s95N+O4CsErzemYZHDhsjEgJDe17EX9MqgbN3RFzRmZpJqRvqKXw9abze8hZfEuUJjC6ysnKOYkzDBEyQibvGJjCv3T/0Lz9zFruSrWBw+NxWXNZjXSY0KF8MKmW2Gx1XX1znt7K9bYNfhA/QO+oD+v42hxIeyzneeRcOJ/EXLEmWUsHDokevOkBeyeN4nfnET/BatcDmv8dpGXrTPEoxmmGQ==';
$payment = $order->payments()
    ->setCreditCardHash($hash, $holder)
    ->setInstallmentCount(3)
    ->setStatementDescriptor('teste de pag')
    ->execute();
print_r($payment);
使用卡数据

此方法需要PCI认证。[链接](https://documentao-moip.readme.io/v2.0/reference#criar-pagamento)

$payment = $order->payments()->setCreditCard(12, 21, '4073020000000002', '123', $holder)
    ->execute();
print_r($payment);

创建带有汇票的支付

$logo_uri = 'https://cdn.moip.com.br/wp-content/uploads/2016/05/02163352/logo-moip.png';
$expiration_date = new DateTime();
$instruction_lines = ['INSTRUÇÃO 1', 'INSTRUÇÃO 2', 'INSTRUÇÃO 3'];
$payment = $order->payments()  
    ->setBoleto($expiration_date, $logo_uri, $instruction_lines)
    ->execute();
print_r($payment);

创建带有银行借记的支付

在线银行借记支付也只发送了3个参数

  • 您想要显示的标志URL,以下用变量表示:$return_uri;
  • 到期日,由变量 $expiration_date 表示;
  • 银行号码,由变量 $bank_number 表示(目前唯一的可能值是 341,代表巴西伊塔乌银行)。
$bank_number = '341';
$return_uri = 'https://moip.com.br';
$expiration_date = new DateTime();
$payment = $order->payments()                    
    ->setOnlineBankDebit($bank_number, $expiration_date, $return_uri)
    ->execute();
print_r($payment);

查询

$payment = $moip->payments()->get('PAYMENT-ID');
print_r($payment);

捕获预先授权的支付

$captured_payment = $payment->capture();
print_r($captured_payment);

取消预先授权的支付

用于取消预先授权支付的方法 avoid 已被 cancel 替换。

$payment = $payment->cancel();
print_r($payment);

退款

为了进行退款,需要拥有您希望退款的 Payment 对象,或者只需传递付款的 ID。

信用卡

总价

使用对象
$refund = $payment->refunds()->creditCardFull();
print_r($refund);

部分金额

使用对象
$refund = $payment->refunds()->creditCardPartial(30000);
print_r($refund);

银行账户

总价

使用对象
$type = 'CHECKING';
$bank_number = '001';
$agency_number = 4444444;
$agency_check_number = 2;
$account_number = 1234;
$account_check_number = 4;
$refund = $payment->refunds()
    ->bankAccountFull(
        $type,
        $bank_number,
        $agency_number,
        $agency_check_number,
        $account_number,
        $account_check_number,
        $customer
    );
print_r($refund);

部分金额

使用对象
$amount = 30000;
$type = 'SAVING';
$bank_number = '001';
$agency_number = 4444444;
$agency_check_number = 2;
$account_number = 1234;
$account_check_number = 4;
$refund = $payment->refunds()
    ->bankAccountPartial(
        $amount,
        $type,
        $bank_number,
        $agency_number,
        $agency_check_number,
        $account_number,
        $account_check_number,
        $customer
    );
print_r($refund);

查询退款

$refund = $payment->refunds()->get($refund_id);

OAuth (Moip Connect)

请求用户访问权限

为了请求权限,您需要调用 getAuthUrl(用于生成 URL)并将用户重定向到生成的 URL。用户需要授予权限,然后将被重定向到您的应用程序指定的 URL,并通过 Connect 对象传递。

作为属性的 URL 必须与在应用程序创建时注册的 URL 完全相同,如果有任何差异,用户将无法正确重定向。

权限授予后,您将收到一个 code,这将允许您生成用于身份验证的 accessToken 并处理涉及其他用户的要求。

$redirect_uri = 'http://seusite.com.br/callback.php';
$client_id = 'APP-18JTHC3LOMT9';
$scope = true;
$connect = new Connect($redirect_uri, $client_id, $scope, Connect::ENDPOINT_SANDBOX);
$connect->setScope(Connect::RECEIVE_FUNDS)
    ->setScope(Connect::REFUND)
    ->setScope(Connect::MANAGE_ACCOUNT_INFO)
    ->setScope(Connect::RETRIEVE_FINANCIAL_INFO);
header('Location: '.$connect->getAuthUrl());

生成 OAuth 访问令牌

以下我们将使用 authorize 方法生成 OAuth 访问令牌。请注意,必须实例化 Connect 对象并按以下示例传递参数。

我们使用变量 $code 发送由用户权限接收的 code,并通过 setCode 方法将其插入对象。

作为属性的 URL 必须与在应用程序创建时注册的 URL 完全相同,如果有任何差异,将无法恢复 accessToken。

$redirect_uri = 'http://seusite.com.br/callback.php';
$client_id = 'APP-18JTHC3LOMT9';
$scope = true;
$connect = new Connect($redirect_uri, $client_id, $scope, Connect::ENDPOINT_SANDBOX);
$client_secret = '20f76456f6ec4874a1f38082d3139326';
$connect->setClientSecret($client_secret);
$code = 'f9053ca6e9853dd73f0bc4f332a5ce337b0bb0da';
$connect->setCode($code);
$auth = $connect->authorize();
print_r($auth);

多订单

创建多订单

$order = $moip->orders()->setOwnId(uniqid())
    ->addItem("bicicleta 1",1, "sku1", 10000)
    ->addItem("bicicleta 2",1, "sku2", 11000)
    ->addItem("bicicleta 3",1, "sku3", 12000)
    ->addItem("bicicleta 4",1, "sku4", 13000)
    ->setShippingAmount(3000)
    ->setAddition(1000)
    ->setDiscount(5000)
    ->setCustomer($customer)
    ->addReceiver('MPA-VB5OGTVPCI52', 'PRIMARY', NULL);
$order2 = $moip->orders()->setOwnId(uniqid())
    ->addItem("bicicleta 1",1, "sku1", 10000)
    ->addItem("bicicleta 2",1, "sku2", 11000)
    ->addItem("bicicleta 3",1, "sku3", 12000)
    ->setShippingAmount(3000)
    ->setAddition(1000)
    ->setDiscount(5000)
    ->setCustomer($customer)
    ->addReceiver('MPA-IFYRB1HBL73Z', 'PRIMARY', NULL);

$multiorder = $this->moip->multiorders()
    ->setOwnId(uniqid())
    ->addOrder($order)
    ->addOrder($order2)
    ->create();
print_r($multiorder);

查询多订单

$multiorder_id = 'ORD-KZCH1S1ORAH25';
$multiorder = $moip->multiorders()->get($multiorder_id);
print_r($multiorder);

多付款

创建多付款

$hash = 'i1naupwpTLrCSXDnigLLTlOgtm+xBWo6iX54V/hSyfBeFv3rvqa1VyQ8/pqWB2JRQX2GhzfGppXFPCmd/zcmMyDSpdnf1GxHQHmVemxu4AZeNxs+TUAbFWsqEWBa6s95N+O4CsErzemYZHDhsjEgJDe17EX9MqgbN3RFzRmZpJqRvqKXw9abze8hZfEuUJjC6ysnKOYkzDBEyQibvGJjCv3T/0Lz9zFruSrWBw+NxWXNZjXSY0KF8MKmW2Gx1XX1znt7K9bYNfhA/QO+oD+v42hxIeyzneeRcOJ/EXLEmWUsHDokevOkBeyeN4nfnET/BatcDmv8dpGXrTPEoxmmGQ==';
$payment = $multiorder->multipayments()
    ->setCreditCardHash($hash, $customer)
    ->setInstallmentCount(3)
    ->setStatementDescriptor('teste de pag')
    ->execute();
print_r($payment);

查询

$payment = $moip->payments()->get('MULTIPAYMENT-ID');
print_r($payment);

Moip 账户

创建

$street = 'Rua de teste';
$number = 123;
$district = 'Bairro';
$city = 'Sao Paulo';
$state = 'SP';
$zip = '01234567';
$complement = 'Apt. 23';
$country = 'BRA';
$area_code = 11;
$phone_number = 66778899;
$country_code = 55;
$identity_document = '4737283560';
$issuer = 'SSP';
$issue_date = '2015-06-23';
$account = $moip->accounts()
    ->setName('Fulano')
    ->setLastName('De Tal')
    ->setEmail('fulano@email2.com')
    ->setIdentityDocument($identity_document, $issuer, $issue_date)
    ->setBirthDate('1988-12-30')
    ->setTaxDocument('16262131000')
    ->setType('MERCHANT')
    ->setPhone($area_code, $phone_number, $country_code)
    ->addAlternativePhone(11, 66448899, 55)
    ->addAddress($street, $number, $district, $city, $state, $zip, $complement, $country)        
    ->setCompanyName('Empresa Teste', 'Teste Empresa ME')
    ->setCompanyOpeningDate('2011-01-01')
    ->setCompanyPhone(11, 66558899, 55)
    ->setCompanyTaxDocument('69086878000198')
    ->setCompanyAddress('Rua de teste 2', 123, 'Bairro Teste', 'Sao Paulo', 'SP', '01234567', 'Apt. 23', 'BRA')
    ->setCompanyMainActivity('82.91-1/00', 'Atividades de cobranças e informações cadastrais')
    ->create();
print_r($account);

查询

$account = $moip->accounts()->get(ACCOUNT_ID);
print_r($account);

检查用户是否已有 Moip 账户

// retorna verdadeiro se já possui e falso caso não possuir conta Moip
$moip->accounts()->checkAccountExists(CPF);

获取Moip账户的公钥

$keys = $moip->keys()->get();
print_r($keys);

Moip余额

余额是指特定Moip账户当前可用、不可用(已锁定)和未来价值的总和。

此API为2.1版本,包含header Accept,值为application/json;version=2.1

查询余额

$balances = $moip->balances()->get();

需要OAuth身份验证。

银行账户

银行账户是特定Moip账户的银行开户信息。此API允许创建、查询和修改银行账户的数据。

创建银行账户

$bank_account = $moip->bankaccount()
    ->setBankNumber('237')
    ->setAgencyNumber('12345')
    ->setAgencyCheckNumber('0')
    ->setAccountNumber('12345678')
    ->setAccountCheckNumber('7')
    ->setType('CHECKING')
    ->setHolder('Demo Moip', '622.134.533-22', 'CPF')
    ->create($moip_account_id);

查询银行账户

$bank_account = $moip->bankaccount()->get($bank_account_id);

列出银行账户

$bank_accounts = $moip->bankaccount()->getList($account_id)->getBankAccounts();

更新银行账户

$bank_account = $moip->bankaccount()
    ->setAccountCheckNumber('8')
    ->update($bank_account_id);

删除银行账户

$moip->bankaccount()->delete($bank_account_id);

通知偏好

创建

$notification = $moip->notifications()->addEvent('ORDER.*')
    ->addEvent('PAYMENT.AUTHORIZED')
    ->setTarget('http://requestb.in/1dhjesw1')
    ->create();
print_r($notification);

查询

$notification = $this->moip->notifications()->get('NPR-N6QZE3223P98');
print_r($notification);

删除

$notification = $moip->notifications()->delete('NOTIFICATION-ID');
print_r($notification);

列表

$notifications = $moip->notifications()->getList();
print_r($notifications);

Webhooks

PHP默认只准备接收几种类型的content-typeapplication/x-www-form-urlencodedmultipart/form-data)。然而,Moip平台发送数据时使用JSON格式,而PHP默认不支持接收该格式。为了接收并访问Moip发送的数据,您需要将以下代码添加到接收webhooks的文件中

// Pega o RAW data da requisição
$json = file_get_contents('php://input');
// Converte os dados recebidos
$response = json_decode($json, true);

查询

无分页或按资源/事件过滤

$moip->webhooks()->get();

有分页和按资源/事件过滤

$moip->webhooks()->get(new Pagination(10, 0), 'ORD-ID', 'ORDER.PAID');

转账

转账是指将资金从一个Moip账户转移到另一个支付账户(可以是银行账户或另一个特定的Moip账户)的操作。

创建/执行转账

通过银行账户

$amount = 500;
$bank_number = '001';
$agency_number = '1111';
$agency_check_number = '2';
$account_number = '9999';
$account_check_number = '8';
$holder_name = 'Nome do Portador';
$tax_document = '22222222222';

$transfer = $moip->transfers()
    ->setTransfers($amount, $bank_number, $agency_number, $agency_check_number, $account_number, $account_check_number)
    ->setHolder($holder_name, $tax_document)
    ->execute();

print_r($transfer);

要使用已注册的银行账户进行转账

$transfer = $moip->transfers()
    ->setTransfersToBankAccount($amount, $bank_account_id)
    ->execute();

查询转账

$transfer_id = 'TRA-28HRLYNLMUFH';
$transfer = $moip->transfers()->get($transfer_id);

print_r($transfer);

列出转账

无分页

$transfers = $moip->transfers()->getList();

有分页

$transfers = $moip->transfers()->getList(new Pagination(10,0));

撤销转账

$transfer_id = 'TRA-28HRLYNLMUFH';

$transfer = $moip->transfers()->revert($transfer_id);

异常处理

当API出现错误时,会抛出UnexpectedException异常来处理意外错误,UnautorizedException异常来处理认证错误,以及ValidationException异常来处理验证错误。

try {
    $moip->customers()->setOwnId(uniqid())
        ->setFullname('Fulano de Tal')
        ->setEmail('fulano@email.com')
        //...
        ->create();
} catch (\Moip\Exceptions\UnautorizedException $e) {
    //StatusCode 401
    echo $e->getMessage();
} catch (\Moip\Exceptions\ValidationException $e) {
    //StatusCode entre 400 e 499 (exceto 401)
    printf($e->__toString());
} catch (\Moip\Exceptions\UnexpectedException $e) {
    //StatusCode >= 500
    echo $e->getMessage();
}

文档

官方文档

测试

默认情况下,测试不会向Moip API发送任何请求。您可以通过设置环境变量来运行针对Moip 沙盒环境的测试。

  • MOIP_ACCESS_TOKEN 是您的Moip应用的认证令牌。

如何注册您的Moip应用

为了注册您的Moip应用,您需要您的访问密钥。 如何获取您的访问密钥

示例

export MOIP_ACCESS_TOKEN=76926cb0305243c8adc79aad54321ec1_v2
vendor/bin/phpunit -c .

许可证

MIT许可证

Slack社区 Slack

有疑问吗?在 Slack 上联系我们!