1. Trước khi bắt đầu
Điều kiện tiên quyết
- Bạn đã hoàn tất bước 1 và 2 trong Quy trình triển khai.
- Bạn có thể lưu trữ máy chủ Java được cung cấp với khả năng kết thúc TLS bằng cách sử dụng Google App Engine hoặc giải pháp của riêng bạn tại miền đã định cấu hình với Google.
- Java được cài đặt trên môi trường của bạn.
Kiến thức bạn sẽ học được
- Cách xác minh khả năng kết nối bằng cách gửi yêu cầu hợp lệ đến Google Echo API.
- Cách nhận, giải mã và phân tích cú pháp yêu cầu từ Google đến API Tiếng vọng do đối tác lưu trữ.
2. Thiết lập và yêu cầu
Tải ứng dụng xuống
Tải mã mẫu Java xuống.
Tổng quan về cấu trúc ứng dụng
Mã mẫu Java tích hợp với API Thanh toán chuẩn của Google. Cấu trúc dự án mã mẫu chứa thư mục outbound
cũng như thư mục inbound
để phản ánh yêu cầu đọc to từ Google đến đối tác và yêu cầu gửi đi từ việc triển khai đối tác đến Google.
Cả hai thư mục này đều có hệ phân cấp tương tự trong việc đóng gói theo lớp. 3 lớp chính là controller
, service
và domain
.
- Gói
controller
chứa các API. - Gói
service
chịu trách nhiệm mã hoá logic nghiệp vụ, mã hoá base64url và mã hoá. - Gói
domain
chứa POJO.
Phần phụ thuộc cài đặt
Chuyển đến thư mục dự án và chạy lệnh sau để cài đặt các phần phụ thuộc bắt buộc bằng Trình bao bọc Maven. Nếu đang sử dụng App Engine, bạn có thể bỏ qua bước này.
./mvnw install
3. Định cấu hình mã tài khoản của đơn vị tích hợp thanh toán (PIAID)
Mã tài khoản của đơn vị tích hợp thanh toán (PIAID
) là giá trị nhận dạng dùng để xác định riêng các công cụ tích hợp của bạn. Bạn sẽ nhận được PIAID từ Google bằng cách hoàn tất các điều kiện tiên quyết trước khi bắt đầu hướng dẫn này.
- Chuyển đến
src/main/resources/application.properties
trong thư mục dự án. - Đặt thuộc tính
payment.integrator.account.id
thành PIAID mà Google cấp cho bạn.
payment.integrator.account.id={YOUR_PAYMENT_INTEGRATOR_ACCOUNT_ID}
4. Đặt URL tiếng vọng do Google lưu trữ
URL echo
do Google lưu trữ sẽ khác nhau tuỳ thuộc vào API mà bạn đang tích hợp. Hãy truy cập tài liệu tham khảo API đối với loại tích hợp cụ thể và sao chép URL của API phát âm chẩn đoán. Sau khi sao chép URL, hãy chuyển sang các bước tiếp theo để cập nhật URL trong dự án Java.
- Chuyển đến
src/main/resources/application.properties
trong thư mục dự án. - Đặt thuộc tính
API_SERVICE_NAME
để khớp với thông tin trong tài liệu dành cho nhà phát triển.
google.hosted.echo.url=vgw.googleapis.com/gsp/{API_SERVICE_NAME}/echo/
5. Thêm khoá PGP
Như trình bày dưới đây, hãy thêm khoá PGP để bật tính năng mã hoá PGP.
- Di chuyển đến
src/resources/publicKey1.gpg
rồi thêm khoá công khai có giáp bảo vệ ASCII vào tệp. - Di chuyển đến
src/resources/privateKey1.gpg
rồi thêm khoá riêng tư có giáp bảo vệ ASCII vào tệp. - Chuyển đến
src/resources/passphrase1.txt
rồi thêm cụm mật khẩu bí mật vào tệp.
Để bật mã hóa khóa kép, hãy thêm khóa công khai thứ hai của bạn vào publicKey2.gpg
thêm khóa riêng tư thứ hai của bạn vào privateKey2.gpg
và thêm cụm mật khẩu thứ hai vào passphrase.txt
. Sau khi thêm khoá thứ hai, hãy huỷ nhận xét về các dòng mã có nhận xét chịu trách nhiệm tải cặp khoá thứ hai trong KeyConfig.addPrivateKeyAndPassphrase(...)
và KeyConfig.addPublicKeys(...)
.
Tuyệt vời, bạn đã sẵn sàng chạy ứng dụng!
6. Chạy ứng dụng
Để khởi động ứng dụng, hãy thực thi lệnh sau.
$ ./mvnw spring-boot:run
Nếu bạn đang chạy một phiên bản App Engine được định cấu hình sẵn, hãy chạy lệnh này.
$ gcloud app deploy
Theo mặc định, máy chủ sẽ lắng nghe trên cổng 8080. Để xem giao diện người dùng Open API Swagger, hãy chuyển đến URL bên dưới.
https://{APPLICATION_HOST}/swagger-ui.html
7. Kiểm tra khả năng kết nối API thanh toán đi của Google Standard
Hiện tại, ứng dụng đang chạy, đã đến lúc kiểm thử khả năng kết nối với API Google Echo.
Bạn có thể sử dụng giao diện người dùng Swagger hoặc CLI để chạy lệnh sau nhằm bắt đầu lệnh gọi từ thực thể ứng dụng mẫu đến máy chủ của Google. API phản hồi của ứng dụng mẫu chấp nhận yêu cầu POST dưới dạng văn bản thuần tuý. Sau khi nhận được yêu cầu, một yêu cầu tiếp theo sẽ được gửi đến API do Google lưu trữ.
Gửi yêu cầu qua dòng lệnh
Thay thế HOSTNAME
bằng tên của máy chủ lưu trữ trước khi thực thi lệnh.
$ curl -X POST -H 'Content-Type: text/plain' -d 'Hello from Partner Bank!' https://{HOSTNAME}/echo
Gửi yêu cầu trong giao diện người dùng Swagger
Để gửi yêu cầu bằng giao diện người dùng Swagger, hãy chuyển đến https://{APPLICATION_HOST}/swagger-ui
rồi thiết lập thông báo của ứng dụng trong nội dung yêu cầu. Nhấp vào nút "Thực thi" khi bạn đã sẵn sàng gửi yêu cầu đến Google.
Nhận phản hồi
Yêu cầu API thành công sẽ dẫn đến phản hồi sau đây từ Google.
{
"responseHeader":{
"responseTimestamp":"1606710026723"
},
"clientMessage":"Hello from Bank Little Bear!",
"serverMessage":"Server message."
}
Từng bước
Bây giờ, máy chủ của bạn đã gửi thành công một yêu cầu, hãy cùng xem lại cách hoạt động của yêu cầu đó.
Xây dựng yêu cầu
createEchoRequestWithMessage
trong OutboundEchoService
tạo yêu cầu echo
được gửi đến API của Google.
String jsonEchoRequestMessage = objectMapper.writeValueAsString(createEchoRequestWithMessage(message));
Yêu cầu được tạo bao gồm clientMessage
, cũng như một số trường giá trị mặc định.
{
"requestHeader":{
"protocolVersion":{
"major":1,
"minor":0,
"revision":0
},
"requestId":"ddfe0fd0-ffdc-4fcf-991a-f0611ec83970",
"requestTimestamp":"1606715389040"
},
"clientMessage":"Hello from Bank Little Bear!"
}
Mã hoá và mã hoá yêu cầu Base64url
Tất cả yêu cầu đều được mã hoá và được mã hoá base64url. Trong mẫu này, PgpEncryptor.java
chứa các phương thức trợ giúp thực hiện việc mã hoá và giải mã cũng như mã hoá base64url cho bạn. Phương thức dưới đây mã hoá yêu cầu và mã hoá bằng khoá công khai của Google.
String encryptedMessage = pgpEncryptor.encrypt(jsonEchoRequestMessage);
Gửi yêu cầu POST
Tin nhắn đã mã hoá được gửi qua yêu cầu POST.
postStandardPaymentsEchoApi(encryptedMessage)
Giải mã và base64url giải mã phản hồi rồi trả về phản hồi
Phản hồi thành công của Google được mã hoá và mã hoá base64url, vì vậy, phản hồi này cần được giải mã và giải mã trước khi có thể được trả về dưới dạng văn bản thuần tuý. Phương thức base64url của decrypt
sẽ giải mã và giải mã phản hồi.
String decryptedData =
pgpEncryptor.decrypt(postStandardPaymentsEchoApi(encryptedMessage).getBody());
Trả lời
Phản hồi được trả về bằng Mã trạng thái phản hồi HTTP 202.
return new ResponseEntity<>(decryptedData, HttpStatus.ACCEPTED);
8. Kiểm thử khả năng kết nối với API Inbound
Để kiểm tra khả năng kết nối API tiếng vọng đến, Google sẽ gửi yêu cầu đến API tiếng vọng do đối tác lưu trữ. Khi bạn đã sẵn sàng, vui lòng làm việc với đầu mối liên hệ của Google để kích hoạt yêu cầu này từ Google.
Quy trình kiểm tra tiếng vọng hoàn tất khi bạn có thể đọc yêu cầu tiếng vọng đến từ Google và phản hồi bằng phản hồi tiếng vọng hợp lệ.
Từng bước
Máy chủ của bạn hiện đã nhận và xử lý thành công yêu cầu, hãy cùng xem lại cách hoạt động của yêu cầu đó.
Giải mã và giải mã yêu cầu Base64url
Khi nhận được một yêu cầu, PgpEncryptor.java
sẽ gọi decrypt
. Phương thức này sẽ giải mã và giải mã yêu cầu base64url.
String decryptedRequest = pgpEncryptor.decrypt(echoRequest);
Nhận yêu cầu
Google đã gửi một phần tải tin nhắn tương tự như sau khi đã được giải mã và giải mã.
{ "requestHeader": { "protocolVersion": { "major": 1 }, "requestId": "G1MQ0YERJ0Q7LPM", "requestTimestamp": { "epochMillis":1481899949606 }, "paymentIntegratorAccountId": "abcdef123456" }, "clientMessage": "echo Me" }
Tạo câu trả lời
Sau khi đọc thành công yêu cầu tiếng vọng đến, bạn đã sẵn sàng tạo phản hồi.
private EchoResponse convertEchoRequestStringToEchoResponse(String decryptedRequest);
Phản hồi bao gồm thông báo từ Google, cũng như dấu thời gian và thông báo từ máy chủ.
{ "responseHeader": { "responseTimestamp": { "epochMillis":1481899950236 } }, "clientMessage": "echo Me", "serverMessage": "Debug ID 12345" }
Mã hoá và mã hoá phản hồi Base64url
Vì tất cả yêu cầu đều được mã hoá và mã hoá base64url, nên PgpEncryptor.java
gọi encrypt
để mã hoá base64url và mã hoá yêu cầu.
pgpEncryptor.encrypt(echoResponseString)
Trả lời
Phản hồi được trả về bằng Mã trạng thái phản hồi HTTP 202.
return new ResponseEntity<>(pgpEncryptor.encrypt(echoResponseString), HttpStatus.ACCEPTED);
9. Xin chúc mừng!
Trong lớp học lập trình này, bạn đã thiết lập thành công khả năng kết nối với API Payments!