Cách thiết lập khả năng kết nối với các API của Google trong Java

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, servicedomain.

  • 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.

  1. Chuyển đến src/main/resources/application.properties trong thư mục dự án.
  2. Đặ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.

  1. Chuyển đến src/main/resources/application.properties trong thư mục dự án.
  2. Đặ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.

Thêm khoá PGP

Để 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(...)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.

Gửi yêu cầu GSP Echo thông qua Swagger

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!