Commit 6e028fd5 by tdgiang

fix bug

parent 16a27d49
...@@ -29,9 +29,15 @@ exports.epayIndex = function (req, res, next) { ...@@ -29,9 +29,15 @@ exports.epayIndex = function (req, res, next) {
.substr(params.fullName.split(" ")[0].length) .substr(params.fullName.split(" ")[0].length)
.trim(); .trim();
} }
if (!params.payOpt) { // Only fall back to the tokenizing default when the caller didn't specify
// payOpt at all. `?payOpt=` (explicit empty string) is how a caller asks
// for a plain, non-tokenized payment (e.g. DC/ATM) and must survive as "".
if (params.payOpt === undefined) {
params.payOpt = "PAY_CREATE_TOKEN"; params.payOpt = "PAY_CREATE_TOKEN";
} }
if (!params.payType) {
params.payType = "IC";
}
renderPage(req, res, "frontend/epay-index", params); renderPage(req, res, "frontend/epay-index", params);
}; };
......
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
<br> <br>
<div class="row full-width"> <div class="row full-width">
<div class="col-md-3"> <div class="col-md-3">
<input type="radio" name="payType" id="payType" value="IC" checked/> <input type="radio" name="payType" id="payType" value="{{payType}}" checked/>
Visa/Master/JBC Visa/Master/JBC
</div> </div>
</div> </div>
......
# Deploy PaymentGate (Hai Yen) lên VPS # Deploy PaymentGate (Hai Yen) lên VPS
- **Server:** `123.31.12.55` (Ubuntu 16.04.1 LTS — xem cảnh báo EOL cuối file) - **Server:** `123.31.12.55` (Ubuntu 16.04.1 LTS — xem cảnh báo EOL cuối file)
- **Domain:** `pg.haiyenstore.asia` - **Domain:** `pg-haiyen.dcvfinance.com`
- **SSH port:** `2222` (không phải 22 mặc định) - **SSH port:** `2222` (không phải 22 mặc định)
- **Stack:** Docker Compose (`app` + `redis`), Nginx (đã cài sẵn) + Certbot (đã cài sẵn) - **Stack:** Docker Compose (`app` + `redis`), Nginx (đã cài sẵn) + Certbot (đã cài sẵn)
...@@ -22,16 +22,16 @@ Kiểm tra thực tế (`netstat -tulpn`, `docker ps` ngày 2026-08-28) cho th ...@@ -22,16 +22,16 @@ Kiểm tra thực tế (`netstat -tulpn`, `docker ps` ngày 2026-08-28) cho th
- Không cài lại Docker/Nginx/Certbot — chỉ dùng lại. - Không cài lại Docker/Nginx/Certbot — chỉ dùng lại.
- Không dùng port `3003` mặc định — đã bị chiếm. Đổi sang `7003` (đã sửa trong `docker-compose.yml`, đã build-test local). - Không dùng port `3003` mặc định — đã bị chiếm. Đổi sang `7003` (đã sửa trong `docker-compose.yml`, đã build-test local).
- **Không đụng vào firewall/ufw** — nếu bật ufw với rule tối thiểu sẽ cắt đứt các dịch vụ/port khác đang mở cho các app/client khác trên cùng server. Bỏ hẳn bước này. - **Không đụng vào firewall/ufw** — nếu bật ufw với rule tối thiểu sẽ cắt đứt các dịch vụ/port khác đang mở cho các app/client khác trên cùng server. Bỏ hẳn bước này.
- Nginx: chỉ **thêm** 1 file site mới cho `pg.haiyenstore.asia`, không sửa/động vào site có sẵn. - Nginx: chỉ **thêm** 1 file site mới cho `pg-haiyen.dcvfinance.com`, không sửa/động vào site có sẵn.
--- ---
## Bước 0 — Chuẩn bị trước khi làm gì trên server ## Bước 0 — Chuẩn bị trước khi làm gì trên server
1. **Trỏ DNS**: bản ghi A `pg.haiyenstore.asia``123.31.12.55`. 1. **Trỏ DNS**: bản ghi A `pg-haiyen.dcvfinance.com``123.31.12.55`.
```bash ```bash
dig +short pg.haiyenstore.asia dig +short pg-haiyen.dcvfinance.com
``` ```
2. **Commit + push code** lên git remote (nếu chưa). 2. **Commit + push code** lên git remote (nếu chưa).
...@@ -90,9 +90,9 @@ scp -P 2222 .env root@123.31.12.55:~/payment-gate-hai-yen/.env ...@@ -90,9 +90,9 @@ scp -P 2222 .env root@123.31.12.55:~/payment-gate-hai-yen/.env
EPAY_MERCHANT_ID=<merId tht> EPAY_MERCHANT_ID=<merId tht>
EPAY_ENCODE_KEY=<encodeKey tht> EPAY_ENCODE_KEY=<encodeKey tht>
EPAY_DOMAIN=https://pg.megapay.vn EPAY_DOMAIN=https://pg.megapay.vn
EPAY_REQ_DOMAIN=https://pg.haiyenstore.asia EPAY_REQ_DOMAIN=https://pg-haiyen.dcvfinance.com
EPAY_RETURN_URL=https://pg.haiyenstore.asia/epay/return EPAY_RETURN_URL=https://pg-haiyen.dcvfinance.com/epay/return
EPAY_NOTIFY_URL=https://pg.haiyenstore.asia/epay/ipn EPAY_NOTIFY_URL=https://pg-haiyen.dcvfinance.com/epay/ipn
``` ```
`EPAY_ENCRYPT_KEY`/`EPAY_DECRYPT_KEY` tự suy từ `EPAY_ENCODE_KEY` mới (không phải MegaPay cấp riêng): `EPAY_ENCRYPT_KEY`/`EPAY_DECRYPT_KEY` tự suy từ `EPAY_ENCODE_KEY` mới (không phải MegaPay cấp riêng):
...@@ -121,13 +121,13 @@ curl -sS -o /dev/null -w "HTTP %{http_code}\n" http://127.0.0.1:7003/ ...@@ -121,13 +121,13 @@ curl -sS -o /dev/null -w "HTTP %{http_code}\n" http://127.0.0.1:7003/
## Bước 6 — Thêm site Nginx mới (không đụng site cũ) ## Bước 6 — Thêm site Nginx mới (không đụng site cũ)
```bash ```bash
sudo nano /etc/nginx/sites-available/pg.haiyenstore.asia sudo nano /etc/nginx/sites-available/pg-haiyen.dcvfinance.com
``` ```
```nginx ```nginx
server { server {
listen 80; listen 80;
server_name pg.haiyenstore.asia; server_name pg-haiyen.dcvfinance.com;
location / { location / {
proxy_pass http://127.0.0.1:7003; proxy_pass http://127.0.0.1:7003;
...@@ -141,10 +141,10 @@ server { ...@@ -141,10 +141,10 @@ server {
``` ```
```bash ```bash
sudo ln -s /etc/nginx/sites-available/pg.haiyenstore.asia /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/pg-haiyen.dcvfinance.com /etc/nginx/sites-enabled/
sudo nginx -t # PHẢI pass — nếu lỗi, kiểm tra không đụng config site khác sudo nginx -t # PHẢI pass — nếu lỗi, kiểm tra không đụng config site khác
sudo systemctl reload nginx sudo systemctl reload nginx
curl -sS -o /dev/null -w "HTTP %{http_code}\n" http://pg.haiyenstore.asia/ curl -sS -o /dev/null -w "HTTP %{http_code}\n" http://pg-haiyen.dcvfinance.com/
``` ```
--- ---
...@@ -152,8 +152,8 @@ curl -sS -o /dev/null -w "HTTP %{http_code}\n" http://pg.haiyenstore.asia/ ...@@ -152,8 +152,8 @@ curl -sS -o /dev/null -w "HTTP %{http_code}\n" http://pg.haiyenstore.asia/
## Bước 7 — Bật HTTPS bằng Certbot (đã cài sẵn, chỉ chạy) ## Bước 7 — Bật HTTPS bằng Certbot (đã cài sẵn, chỉ chạy)
```bash ```bash
sudo certbot --nginx -d pg.haiyenstore.asia sudo certbot --nginx -d pg-haiyen.dcvfinance.com
curl -sS -o /dev/null -w "HTTP %{http_code}\n" https://pg.haiyenstore.asia/ curl -sS -o /dev/null -w "HTTP %{http_code}\n" https://pg-haiyen.dcvfinance.com/
``` ```
--- ---
...@@ -161,12 +161,12 @@ curl -sS -o /dev/null -w "HTTP %{http_code}\n" https://pg.haiyenstore.asia/ ...@@ -161,12 +161,12 @@ curl -sS -o /dev/null -w "HTTP %{http_code}\n" https://pg.haiyenstore.asia/
## Bước 8 — Smoke test sau khi deploy ## Bước 8 — Smoke test sau khi deploy
```bash ```bash
curl -sS -X POST https://pg.haiyenstore.asia/epay/create-payment-url \ curl -sS -X POST https://pg-haiyen.dcvfinance.com/epay/create-payment-url \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-d '{"agentCode":"DCVF","fullName":"NGUYEN VAN A","amount":"10000"}' -d '{"agentCode":"DCVF","fullName":"NGUYEN VAN A","amount":"10000"}'
``` ```
Kiểm tra response: `domain` phải là `https://pg.megapay.vn` (production, không phải sandbox), `callBackUrl`/`notiUrl` phải là `https://pg.haiyenstore.asia/...`. Sai thì kiểm tra lại `.env` rồi `docker compose restart app`. Kiểm tra response: `domain` phải là `https://pg.megapay.vn` (production, không phải sandbox), `callBackUrl`/`notiUrl` phải là `https://pg-haiyen.dcvfinance.com/...`. Sai thì sửa `.env` rồi chạy `docker compose up -d` (không phải `restart` — `restart` không đọc lại `.env`, chỉ khởi động lại container với env cũ đã đóng băng lúc tạo).
**Credential đã là production thật** — không dùng thẻ test trong tài liệu MegaPay nữa (nếu thẻ test vẫn "thanh toán được" nghĩa là đang trỏ nhầm sandbox). Test bằng giao dịch thật số tiền nhỏ hoặc theo hướng dẫn UAT riêng của MegaPay. **Credential đã là production thật** — không dùng thẻ test trong tài liệu MegaPay nữa (nếu thẻ test vẫn "thanh toán được" nghĩa là đang trỏ nhầm sandbox). Test bằng giao dịch thật số tiền nhỏ hoặc theo hướng dẫn UAT riêng của MegaPay.
...@@ -205,7 +205,7 @@ docker compose up -d --build ...@@ -205,7 +205,7 @@ docker compose up -d --build
| `docker compose up` báo port đã dùng | Port `7003` bị ai đó chiếm sau này | `sudo lsof -i :7003`, đổi port khác trong `docker-compose.yml` + nginx config | | `docker compose up` báo port đã dùng | Port `7003` bị ai đó chiếm sau này | `sudo lsof -i :7003`, đổi port khác trong `docker-compose.yml` + nginx config |
| `docker compose ps` báo app không "healthy" | Thiếu biến `.env`, Redis chưa sẵn sàng | `docker compose logs app` | | `docker compose ps` báo app không "healthy" | Thiếu biến `.env`, Redis chưa sẵn sàng | `docker compose logs app` |
| `sudo nginx -t` báo lỗi | Có thể do đụng site config khác, không phải do file mới | Đọc kỹ dòng lỗi, dòng có ghi rõ file/dòng gây lỗi | | `sudo nginx -t` báo lỗi | Có thể do đụng site config khác, không phải do file mới | Đọc kỹ dòng lỗi, dòng có ghi rõ file/dòng gây lỗi |
| Certbot fail "Could not find domain" | DNS chưa trỏ đúng/chưa lan truyền | `dig +short pg.haiyenstore.asia` | | Certbot fail "Could not find domain" | DNS chưa trỏ đúng/chưa lan truyền | `dig +short pg-haiyen.dcvfinance.com` |
| `502 Bad Gateway` từ Nginx | App container chưa chạy/crash, hoặc sai port trong nginx config | `docker compose ps`, `docker compose logs app` | | `502 Bad Gateway` từ Nginx | App container chưa chạy/crash, hoặc sai port trong nginx config | `docker compose ps`, `docker compose logs app` |
| callBackUrl vẫn ra domain cũ | `.env` sai `EPAY_REQ_DOMAIN`/`EPAY_RETURN_URL`/`EPAY_NOTIFY_URL` | `docker compose exec app env \| grep EPAY` | | callBackUrl vẫn ra domain cũ | `.env` sai `EPAY_REQ_DOMAIN`/`EPAY_RETURN_URL`/`EPAY_NOTIFY_URL` | `docker compose exec app env \| grep EPAY` |
| Response vẫn ra `domain: sandbox.megapay.vn` | `.env` chưa có/sai `EPAY_DOMAIN` | `docker compose exec app env \| grep EPAY_DOMAIN` | | Response vẫn ra `domain: sandbox.megapay.vn` | `.env` chưa có/sai `EPAY_DOMAIN` | `docker compose exec app env \| grep EPAY_DOMAIN` |
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment