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 của Quy trình triển khai.
  • Bạn có thể lưu trữ máy chủ Java được cung cấp 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 được đị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 một yêu cầu hợp lệ đến API Google echo.
  • Cách nhận, giải mã và phân tích cú pháp yêu cầu từ Google đến API phản hồi do đối tác lưu trữ.

2. Cách thiết lập và các 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 một thư mục outbound cũng như một thư mục inbound để phản ánh yêu cầu tạo tiếng vọng đến từ Google gửi đến đối tác và yêu cầu gửi đi từ hoạt động triển khai của đối tác cho Google.

Cả hai thư mục này đều có một hệ phân cấp tương tự trong việc đóng gói theo lớp. Ba lớp chính là controller, servicedomain.

  • Gói controller chứa các API.
  • Gói service chịu trách nhiệm về logic nghiệp vụ, mã hoá và mã hoá base64url.
  • Gói domain chứa các POJO.

Cài đặt phần phụ thuộc

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 cách sử dụ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 trình tích hợp thanh toán (PIAID)

Mã tài khoản của trình tích hợp thanh toán (PIAID) là giá trị nhận dạng dùng để xác định duy nhất các dịch vụ tích hợp của bạn. Bạn phải đã nhận được PIAID từ Google bằng cách hoàn thành 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 tài sản 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 lặp lại 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. Truy cập tài liệu tham khảo API cho loại tích hợp cụ thể của bạn và sao chép URL cho API lặp lại 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 nội dung có 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ư minh hoạ bên dưới, hãy thêm khoá PGP để bật tính năng mã hoá PGP.

  • Chuyển đến src/resources/publicKey1.gpg và thêm khoá công khai được bảo vệ bằng ASCII vào tệp.
  • Chuyển đến src/resources/privateKey1.gpg và thêm khoá riêng tư được bảo vệ bằng 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 tính năng mã hoá khoá kép, hãy thêm khoá công khai thứ hai vào publicKey2.gpg, thêm khoá riêng tư thứ hai của bạn vào privateKey2.gpg rồi 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 các dòng mã 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 trước, hãy chạy lệnh này.

$ gcloud app deploy

Theo mặc định, máy chủ sẽ nghe trên cổng 8080. Để xem giao diện người dùng Swagger của Open API, 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 Tiêu chuẩn Thanh toán đi của Google

Giờ đây ứng dụng đang chạy, đã đến lúc kiểm tra khả năng kết nối với Google Echo API.

Bạn có thể sử dụng Giao diện người dùng Swagger hoặc CLI để chạy lệnh sau đây nhằm bắt đầu một lệnh gọi từ thực thể của ứng dụng mẫu đến máy chủ của Google. API phản hồi ứng dụng mẫu chấp nhận yêu cầu POST ở dạng văn bản thuần tuý. Sau khi nhận được yêu cầu, yêu cầu tiếp theo sẽ được gửi tới API do Google lưu trữ.

Gửi yêu cầu thông qua dòng lệnh

Thay thế HOSTNAME bằng tên 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 và đặt thông báo của ứng dụng trong phần 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

Khi yêu cầu API thành công, Google sẽ phản hồi như sau.

{
   "responseHeader":{
      "responseTimestamp":"1606710026723"
   },
   "clientMessage":"Hello from  Bank Little Bear!",
   "serverMessage":"Server message."
}

Từng bước

Giờ đây, máy chủ của bạn đã gửi thành công một yêu cầu, hãy xem xét cách hoạt động của yêu cầu đó.

Tạo 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 theo Base64url

Tất cả các yêu cầu đều được mã hoá và 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ũng cần được giải mã và giải mã trước khi có thể trả về dưới dạng văn bản thuần tuý. Phương thức decrypt base64url giải mã và giải mã phản hồi.

String decryptedData =
     pgpEncryptor.decrypt(postStandardPaymentsEchoApi(encryptedMessage).getBody());

Trả về phản hồi

Phản hồi được trả về với 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 của API thư đến

Để kiểm tra Khả năng kết nối API phản hồi đầu vào, Google sẽ gửi một yêu cầu đến API phản hồi 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 bạn tại Google để kích hoạt yêu cầu này từ Google.

Kiểm thử phản hồi hoàn tất khi bạn có thể đọc yêu cầu phản hồi đến từ Google và phản hồi bằng một phản hồi phản hồi hợp lệ.

Từng bước

Giờ đây, máy chủ của bạn đã nhận và xử lý thành công một yêu cầu, hãy xem xét 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 yêu cầu, PgpEncryptor.java sẽ gọi decrypt để giải mã và giải mã yêu cầu theo base64url.

String decryptedRequest = pgpEncryptor.decrypt(echoRequest);

Nhận yêu cầu

Google đã gửi trọng tải thư tương tự như nội dung sau khi thư đã được giải mã và giải mã.

{
  "requestHeader": {
    "protocolVersion": {
      "major": 1
    },
    "requestId": "G1MQ0YERJ0Q7LPM",
    "requestTimestamp": {
      "epochMillis":1481899949606
    },
    "paymentIntegratorAccountId": "abcdef123456"
  },
  "clientMessage": "echo Me"
}

Tạo phản hồi

Sau khi đọc thành công yêu cầu phản hồi đế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 của 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 bằng Base64url

Vì tất cả cá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ả về phản hồi

Hệ thống sẽ trả về phản hồi có 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 Payments API!