hrodryk / zoop-php
PHP 客户端,用于与 Zoop API 的服务器端集成
Requires
- php: >=5.5
- rmccue/requests: >=1.0
Requires (Dev)
- codacy/coverage: dev-master
- phpunit/phpunit: ~4.8.35 || ^5.7 || ^6.4
This package is not auto-updated.
Last update: 2024-09-21 22:46:51 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');
带哈希
有关使用卡片数据生成哈希的更多详细信息,请参阅文档。
$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-type(application/x-www-form-urlencoded和multipart/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应用程序,您需要访问密钥。如何获取访问密钥。
示例
export MOIP_ACCESS_TOKEN=76926cb0305243c8adc79aad54321ec1_v2 vendor/bin/phpunit -c .
许可证
Slack社区 
有疑问?在我们的Slack上与我们联系!