Skip to content

Commit d61e706

Browse files
authored
Merge pull request #26 from mercadopago/release/1.9.2
Release v1.9.2
2 parents 427997c + 18e9a98 commit d61e706

26 files changed

+829
-53
lines changed

.github/CODEOWNERS

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Only these owners can approve pull requests on this repo
2+
* @flira_meli @ext-igcandid_meli @ext-memgabri_meli @albalmeida_meli @ext-anlferna_meli @klucena_meli @skhalil_meli @ltucillo_meli @tcidre_meli

.gitignore

+7
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,10 @@ testdoc.txt
44
.idea
55
coverage/
66
test-results
7+
8+
build/.env
9+
build/logs
10+
build/credentials/auth.json
11+
build/certs/*.csr
12+
build/certs/*.key
13+
build/certs/*.pem

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [1.9.2] - 2025-03-26
9+
### Changed
10+
- Adjustments on payments without postcode
11+
812
## [1.9.1] - 2025-02-06
913
### Changed
1014
- Translation for user invalid email message on checkout

Gateway/Request/AdditionalInfoPayerDataRequest.php

+9-8
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ public function build(array $buildSubject): array
247247
);
248248

249249
$typeDocument = $payment->getAdditionalInformation('payer_document_type');
250-
250+
251251
$docIdentification = $this->documentIdentification->getFiscalNumber($payment, $orderAdapter);
252252
if ($docIdentification) {
253253
$docIdentification = preg_replace('/[^0-9A-Za-z]/', '', $docIdentification);
@@ -262,12 +262,12 @@ public function build(array $buildSubject): array
262262
if ($customerId) {
263263
// Load customer model by customer ID
264264
$customer = $this->customerFactory->create()->load($customerId);
265-
265+
266266
$registrationDate = $customer->getCreatedAt();
267267

268268
// Get last order of the customer
269269
$lastOrder = $customer->getLastOrder();
270-
270+
271271
if ($lastOrder) {
272272
// Get last order's creation date
273273
$lastPurchaseDate = $lastOrder->getCreatedAt();
@@ -295,16 +295,17 @@ public function build(array $buildSubject): array
295295
self::LAST_NAME => $payerLastName,
296296
self::REGISTRATION_DATE => $registrationDate,
297297
self::REGISTERED_USER => $customerId ? true : false,
298-
self::DEVICE_ID => null,
299-
self::PLATFORM_EMAIL => $platform_email,
298+
self::DEVICE_ID => null,
299+
self::PLATFORM_EMAIL => $platform_email,
300300
self::REGISTER_UPDATED_AT => null,
301301
self::USER_EMAIL => $user_email,
302302
self::AUTHENTICATION_TYPE => null,
303303
self::LAST_PURCHASE => $lastPurchaseDate,
304304
];
305305

306+
306307
$result[AdditionalInfoDataRequest::ADDITIONAL_INFO][self::PAYER][self::ADDRESS] = [
307-
self::ZIP_CODE => preg_replace('/[^0-9]/', '', $billingAddress->getPostcode()),
308+
self::ZIP_CODE => preg_replace('/[^0-9]/', '', (string)$billingAddress->getPostcode()),
308309
self::STREET_NAME => $this->config->getValueForAddress(
309310
$billingAddress,
310311
self::STREET_NAME
@@ -328,8 +329,8 @@ public function build(array $buildSubject): array
328329
];
329330

330331
$result[AdditionalInfoDataRequest::ADDITIONAL_INFO][self::PAYER][self::MOBILE] = [
331-
self::PHONE_AREA_CODE => $phoneAreaCode,
332-
self::PHONE_NUMBER => $phoneNumber,
332+
self::PHONE_AREA_CODE => $phoneAreaCode,
333+
self::PHONE_NUMBER => $phoneNumber,
333334
];
334335

335336
$result[AdditionalInfoDataRequest::ADDITIONAL_INFO][self::PAYER][self::IDENTIFICATION] = [

Gateway/Request/AdditionalInfoShippingsDataRequest.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -210,16 +210,16 @@ public function build(array $buildSubject): array
210210
if ($shippingAddress) {
211211

212212
$result[AdditionalInfoDataRequest::ADDITIONAL_INFO][self::SHIPMENTS] = [
213-
self::DELIVERY_PROMISE => null,
213+
self::DELIVERY_PROMISE => null,
214214
self::DROP_SHIPPING => null,
215215
self::LOCAL_PICKUP => null,
216216
self::EXPRESS_SHIPMENT => null,
217217
self::SAFETY => null,
218218
self::WITHDRAWN => null,
219219
];
220-
220+
221221
$result[AdditionalInfoDataRequest::ADDITIONAL_INFO][self::SHIPMENTS][self::RECEIVER_ADDRESS] = [
222-
self::ZIP_CODE => preg_replace('/[^0-9]/', '', $shippingAddress->getPostcode()),
222+
self::ZIP_CODE => preg_replace('/[^0-9]/', '', (string)$shippingAddress->getPostcode()),
223223
self::STREET_NAME => $this->config->getValueForAddress(
224224
$shippingAddress,
225225
self::STREET_NAME
@@ -244,7 +244,7 @@ public function build(array $buildSubject): array
244244

245245
$result[AdditionalInfoDataRequest::ADDITIONAL_INFO][self::SHIPMENTS][self::TRACKING] = [
246246
self::CODE_TRACKING => $trackNumber,
247-
self::STATUS_TRACKING => null,
247+
self::STATUS_TRACKING => null,
248248
];
249249
}
250250

Gateway/Request/BillingAddressDataRequest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ public function build(array $buildSubject): array
135135
),
136136
self::CITY => $billingAddress->getCity(),
137137
self::FEDERAL_UNIT => $billingAddress->getRegionCode(),
138-
self::ZIP_CODE => preg_replace('/[^0-9]/', '', $billingAddress->getPostcode()),
138+
self::ZIP_CODE => preg_replace('/[^0-9]/', '', (string)$billingAddress->getPostcode()),
139139
];
140140
}
141141

HOWTORUN.md

+165
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
# Ambiente de Desenvolvimento Local do Adb Payment com Magento 2
2+
3+
Este guia descreve como configurar e rodar rapidamente o ambiente de desenvolvimento local do Magento 2 usando Docker e Makefile.
4+
5+
O objetivo desse ambiente é possibilitar uma maior facilidade no desenvolvimento do plugin Adb Payment do Mercado Pago. Isso funciona mapeando o código do repositório para dentro do ambiente Magento que roda dentro do Docker.
6+
7+
## Pré-requisitos
8+
9+
Certifique-se de que as seguintes dependências estejam instaladas em seu sistema:
10+
11+
- **Docker** (com suporte a Docker Compose)
12+
- **OpenSSL** (para geração de certificados SSL)
13+
14+
## Passos para Rodar
15+
16+
### 1. Configuração do Ambiente
17+
18+
#### a. Arquivo Hosts
19+
20+
Adicione a seguinte linha ao seu arquivo `hosts`:
21+
22+
```
23+
127.0.0.1 magento.local
24+
```
25+
26+
#### b. Variáveis de Ambiente
27+
28+
Copie o arquivo `.env.sample` para `.env`:
29+
30+
```bash
31+
cp build/.env.sample build/.env
32+
```
33+
34+
O arquivo de ambiente contém todas as variáveis que podem ser personalizadas para a instalação e execução do Magento. Abaixo está a explicação de cada variável e como ela se relaciona com o ambiente:
35+
36+
##### Variáveis de Configuração
37+
38+
- **PHP_VERSION**: Define a versão do PHP que será utilizada no ambiente. As versões disponíveis são 7.2; 7.4; 8.1 e 8.2
39+
- **MAGENTO_VERSION**: Define a versão do Magento 2 a ser instalada. A versão escolhida pode ser qualquer uma que seja suportada por uma das versões do PHP listadas acima, lembrando que podem haver divergências por conta de versões das aplicações, seja do Magento com o PHP seja também do Magento com o banco de dados ou elasticsearch. Um exemplo é que versões do Elastic acima da 8.X não funcionam muito bem com o Magento 2. Outro exemplo é que a versão 2.4.5-p4 do Magento não aceita o MariaDB em versões acima da 10.4.
40+
- **ELASTIC_VERSION**: Define a versão do Elasticsearch. Utilizado para melhorar a busca no Magento.
41+
- **REDIS_VERSION**: Define a versão do Redis, utilizado para cache e armazenamento temporário no Magento.
42+
- **MARIADB_VERSION**: Define a versão do MariaDB, utilizado como banco de dados no Magento.
43+
- **HOST_OS**: Define o sistema operacional do host onde o Docker está rodando. Os valores `linux` e `macos` estão disponíveis.
44+
- **DB_USER**: Define o nome de usuário para o banco de dados MySQL.
45+
- **DB_PASSWORD**: Define a senha para o banco de dados MySQL.
46+
- **DB_ROOT_PASSWORD**: Define a senha de root para o banco de dados MySQL.
47+
- **DB_PORT**: Define a porta do banco de dados MySQL que vai estar disponível para acesso da sua maquina local.
48+
- **APP_PORT**: Define a porta do servidor web (Nginx) onde o Magento será acessado. Por exemplo `magento.local:80` ou `magento.local:8000`
49+
- **ADMIN_FIRSTNAME**: Define o primeiro nome do administrador do Magento.
50+
- **ADMIN_LASTNAME**: Define o sobrenome do administrador.
51+
- **ADMIN_USER**: Define o nome de usuário do administrador. Usado para acesso no admin de Magento.
52+
- **ADMIN_PASSWORD**: Define a senha do administrador. Usado para acesso no admin de Magento.
53+
- **ADMIN_EMAIL**: Define o e-mail do administrador de Magento.
54+
55+
### Como as Variáveis São Usadas
56+
57+
Essas variáveis de ambiente são utilizadas para configurar e personalizar os containers Docker e a instalação do Magento. Por exemplo, a variável `DB_USER` é passada como variável de ambiente para o container do banco de dados MySQL, enquanto a `PHP_VERSION` é usada para escolher a versão correta do PHP no container correspondente.
58+
59+
Além disso, o arquivo `docker-compose.yml` utiliza essas variáveis para configurar serviços essenciais como o banco de dados, Elasticsearch, Redis, Nginx e PHP. Veja um exemplo de como as variáveis são utilizadas para configurar o banco de dados:
60+
61+
```yaml
62+
services:
63+
database:
64+
image: mariadb:${MARIADB_VERSION}
65+
restart: always
66+
environment:
67+
MARIADB_USER: ${DB_USER}
68+
MARIADB_PASSWORD: ${DB_PASSWORD}
69+
MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
70+
MARIADB_DATABASE: magento
71+
volumes:
72+
- magento-database-volume:/var/lib/mysql
73+
networks:
74+
- default
75+
ports:
76+
- "${DB_PORT}:3306"
77+
```
78+
79+
Neste exemplo, as variáveis `DB_USER`, `DB_PASSWORD` e `DB_ROOT_PASSWORD` são passadas para o serviço `database` para configurar o banco de dados MariaDB.
80+
81+
#### c. Arquivo de Autenticação
82+
83+
Crie o arquivo `auth.json` dentro da pasta `build/credentials` com as credenciais de acesso ao repositório do Magento.
84+
85+
Você pode copiar as credenciais acessando: https://commercemarketplace.adobe.com/customer/accessKeys/ <br>
86+
(autentique-se usando o 1Password)
87+
88+
O formato do JSON deve ser:
89+
90+
```json
91+
{
92+
"http-basic": {
93+
"repo.magento.com": {
94+
"username": "public key",
95+
"password": "private key"
96+
}
97+
}
98+
}
99+
```
100+
101+
102+
### 2. Rodar o Ambiente
103+
104+
Você pode usar o `Makefile` para automatizar a configuração do ambiente e a instalação do Magento. Basta rodar o seguinte comando:
105+
106+
```bash
107+
make install
108+
```
109+
110+
Isso irá:
111+
112+
- Verificar se as dependências necessárias (OpenSSL, Docker Compose, etc.) estão disponíveis.
113+
- Gerar certificados SSL caso eles não existam.
114+
- Iniciar os containers do Docker para o banco de dados, PHP, Nginx, e Elasticsearch e Redis.
115+
- Instalar o Magento e configurá-lo com os valores do seu arquivo `.env`.
116+
- Instalar o SDK PHP necessário para o plugin.
117+
- Configurar o Magento com dados de exemplo, atualizar a instalação e limpar o cache.
118+
119+
Esse comando pode demorar dependendo da sua maquina. Após a finalização já é possível acessar o Magento localmente através do link `magento.local`.
120+
Lembrando que por padrão o ambiente roda na porta `80`, se você já tiver alguma aplicação nessa mesma porta é preciso desligar. Também é exposta a porta `3306` para o banco de dados por padrão, se ja tiver algum rodando, é preciso desligar.
121+
122+
### 3. Rodando o Ambiente Manualmente
123+
124+
Se você deseja rodar os containers do Docker (caso já tenha instalado o Magento) execute:
125+
126+
```bash
127+
make run
128+
```
129+
130+
Isso irá iniciar os containers do Docker, mas não realizará a instalação.
131+
132+
### 4. Parar o Ambiente
133+
134+
Para parar os containers em execução:
135+
136+
```bash
137+
make stop
138+
```
139+
140+
Isso irá desligar os containers, mas manterá os volumes intactos.
141+
142+
### 5. Desinstalar o Ambiente
143+
144+
Para remover completamente os containers, volumes e recursos órfãos:
145+
146+
```bash
147+
make uninstall
148+
```
149+
150+
Isso irá desmontar o ambiente, incluindo todos os volumes do Docker.
151+
152+
### 6. Remover Imagens Não Utilizadas
153+
154+
Para remover as imagens Docker personalizadas para Nginx e PHP:
155+
156+
```bash
157+
make remove-images
158+
```
159+
160+
Isso irá deletar as imagens `nginx-magento-mp` e `php-magento-mp` do seu sistema local.
161+
162+
## Solução de Problemas
163+
164+
- **Certificados SSL**: Se os certificados forem deletados, você pode regenerá-los rodando o comando `make install` novamente. Mas tome cuidado, pois ao deletar os certificados e recriá-los, você também precisará deletar a imagem do nginx e recriá-la.
165+
- **Problemas com Containers**: Se um container não estiver rodando, verifique com `docker ps` para garantir que os containers necessários estão ativos.

Makefile

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
-include build/.env
2+
3+
DOCKER_COMPOSE := $(shell if command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then echo "docker compose"; elif command -v docker-compose >/dev/null 2>&1; then echo "docker-compose"; else echo "ERROR"; fi)
4+
5+
# Fail if neither docker compose nor docker-compose is available
6+
ifeq ($(DOCKER_COMPOSE),ERROR)
7+
$(error "Neither 'docker compose' nor 'docker-compose' is available. Please install Docker Compose.")
8+
endif
9+
10+
install:
11+
if ! openssl version >/dev/null 2>&1; then \
12+
echo "Error: OpenSSL is not installed. Please install OpenSSL and try again."; \
13+
exit 1; \
14+
fi && \
15+
if [ ! -f build/.env ]; then \
16+
echo "Unable to find .env file on build/ folder, please copy it from .env.sample using: 'cp build/.env.sample build/.env'."; \
17+
exit 1; \
18+
fi && \
19+
if [ ! -f build/credentials/auth.json ]; then \
20+
echo "Error: auth.json file not found in build/credentials directory. Please create it first."; \
21+
exit 1; \
22+
fi && \
23+
if [ -f ./build/certs/magento.local.key ] && [ -f ./build/certs/magento.local.csr ] && [ -f ./build/certs/magento.local.pem ]; then \
24+
echo "SSL certificates already exist. Skipping generation."; \
25+
else \
26+
echo "Generating SSL certificates..."; \
27+
openssl genpkey -algorithm RSA -out ./build/certs/magento.local.key && \
28+
openssl req -new -key ./build/certs/magento.local.key -out ./build/certs/magento.local.csr && \
29+
openssl x509 -req -days 365 -in ./build/certs/magento.local.csr -signkey ./build/certs/magento.local.key -out ./build/certs/magento.local.pem; \
30+
fi && \
31+
$(DOCKER_COMPOSE) -f build/docker-compose.yaml up -d && \
32+
sleep 8 && \
33+
docker exec -it magento_php composer require mp-plugins/php-sdk ^1.9 && \
34+
docker exec -it magento_php php ./bin/magento setup:install \
35+
--base-url=http://magento.local \
36+
--db-host=database \
37+
--db-name=magento \
38+
--db-user=magento \
39+
--db-password=magento \
40+
--admin-firstname=$(ADMIN_FIRSTNAME) \
41+
--admin-lastname=$(ADMIN_LASTNAME) \
42+
--admin-email=$(ADMIN_EMAIL) \
43+
--admin-user=$(ADMIN_USER) \
44+
--admin-password=$(ADMIN_PASSWORD) \
45+
--backend-frontname=admin \
46+
--elasticsearch-host=elasticsearch \
47+
--elasticsearch-index-prefix=m_ \
48+
--elasticsearch-port=9200 \
49+
--search-engine=elasticsearch7 \
50+
--elasticsearch-enable-auth=false \
51+
--cache-backend=redis \
52+
--cache-backend-redis-server=redis \
53+
--cache-backend-redis-db=0 \
54+
--session-save=redis \
55+
--session-save-redis-host=redis \
56+
--session-save-redis-port=6379 \
57+
--session-save-redis-db=1 \
58+
--page-cache=redis \
59+
--page-cache-redis-server=redis \
60+
--page-cache-redis-db=2 \
61+
--language=pt_BR \
62+
--currency=BRL \
63+
--timezone=America/Sao_Paulo \
64+
--use-rewrites=1 \
65+
--cleanup-database && \
66+
docker exec -it magento_php bin/magento s:di:c && \
67+
docker exec magento_php bin/magento module:disable Magento_AdminAdobeImsTwoFactorAuth || true && \
68+
docker exec magento_php bin/magento module:disable Magento_TwoFactorAuth || true && \
69+
docker exec magento_php bin/magento cache:flush && \
70+
docker exec -it magento_php bin/magento sampledata:deploy && \
71+
docker exec -it magento_php bin/magento setup:upgrade && \
72+
docker exec -it magento_php bin/magento cache:clean && \
73+
docker exec -it magento_php bin/magento s:di:c && \
74+
docker exec -it magento_php bin/magento deploy:mode:set developer
75+
76+
uninstall:
77+
$(DOCKER_COMPOSE) -f build/docker-compose.yaml down --volumes --remove-orphans
78+
79+
run:
80+
$(DOCKER_COMPOSE) -f build/docker-compose.yaml up -d
81+
82+
stop:
83+
$(DOCKER_COMPOSE) -f build/docker-compose.yaml down
84+
85+
remove-images:
86+
docker image rm nginx-magento-mp nginx-php-mp

SECURITY.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ Version maintenance is subject to Magento [lifecycle policy](https://experiencel
1010

1111
## Reporting a Vulnerability
1212

13-
If you find any vulnerabilities, please contact magento.dev@mercadopago.com immediately.
13+
If you find any vulnerabilities, please contact mercadopago@o2ti.com immediately.

build/.env.sample

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
PHP_VERSION=8.2
2+
MAGENTO_VERSION=2.4.6-p4
3+
ELASTIC_VERSION=7.17.27
4+
REDIS_VERSION=6.2.17
5+
MARIADB_VERSION=10.6
6+
HOST_OS=linux
7+
# Database
8+
DB_USER=magento
9+
DB_PASSWORD=magento
10+
DB_ROOT_PASSWORD=root
11+
# Application Ports
12+
DB_PORT=3306
13+
APP_PORT=80
14+
# Magento Installation Configs
15+
ADMIN_FIRSTNAME=Admin
16+
ADMIN_LASTNAME=User
17+
ADMIN_USER=admin
18+
ADMIN_PASSWORD=admin1234
19+
ADMIN_EMAIL=[email protected]

build/certs/.gitkeep

Whitespace-only changes.

build/credentials/.htaccess

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Deny from all

0 commit comments

Comments
 (0)