moipv2 / moip-sdk-php-v2
用于与 Moip v2 APIs 服务器端集成的 PHP 客户端
Requires
- php: >=5.5
- rmccue/requests: >=1.0
Requires (Dev)
- codacy/coverage: dev-master
- phpunit/phpunit: ~4.8.35 || ^5.7 || ^6.4
- v3.1.0
- v3.0.0
- v2.2.0
- v2.1.0
- v2.0.0
- dev-master / 1.x-dev
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.0
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.2
- v1.0.1
- v1.0.0
- dev-develop
- dev-readme/customer
- dev-feat/list-entries
- dev-docs/README.en
- dev-release/v3.1.0
- dev-fix/set-business-segment
- dev-analysis-Xkyb4J
- dev-hotfix/v1.3.1
- dev-release-v1.3.0
This package is not auto-updated.
Last update: 2021-11-19 11:25:43 UTC
README
MoIP v2 PHP 客户端 SDK
最简单快捷的将 Moip 集成到 PHP 应用程序的方式
SDK 当前状态
统计数据
版本
索引
- 安装
- 配置认证
- 使用示例:
- 包
- 异常处理
- 文档
- 测试
- 许可
- Slack 社区
包
依赖
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-type
(application/x-www-form-urlencoded
和multipart/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应用,您需要您的访问密钥。 如何获取您的访问密钥。
示例
export MOIP_ACCESS_TOKEN=76926cb0305243c8adc79aad54321ec1_v2 vendor/bin/phpunit -c .
许可证
Slack社区 
有疑问吗?在 Slack 上联系我们!