hrodryk/zoop-php

PHP 客户端,用于与 Zoop API 的服务器端集成

安装: 100

依赖者: 0

建议者: 0

安全: 0

星标: 1

关注者: 0

分支: 0

类型:

dev-master / 1.x-dev 2019-05-10 20:49 UTC

This package is not auto-updated.

Last update: 2024-09-21 22:46:51 UTC


README

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');
带哈希

有关使用卡片数据生成哈希的更多详细信息,请参阅文档。

$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 认证。请参阅文档。

$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);

创建带有银行借记的支付

在线银行借记支付无需发送任何参数

  • 您希望显示的logo的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。用户需要授予权限,然后将被重定向到您的App指定的URL,并作为属性传递给Connect对象。

作为属性传递的URL必须与创建APP时注册的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必须与创建APP时注册的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 格式发送数据,该语言默认情况下未准备好接收。要接收和访问 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上与我们联系!