Code for Oauth 2.0

All requests to Google Pay APIs must be authorized by an authenticated user. Your application must include the following code to authorize the Omnichannel API.

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.FileContent;
import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpContent;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpRequestFactory;
import com.google.api.client.http.HttpResponse;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.common.io.CharStreams;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.security.GeneralSecurityException;
import java.util.Collections;

public class OauthClient {
  private static final String JWT_PATH = "service-account-key.json";
  private static final String API_SCOPE = "https://www.googleapis.com/auth/nbupaymentsmerchants";
  private static final String POST_JSON = "initiate.json";
  private static final String API_URL =  
                    "https://nbupayments.googleapis.com/v1/merchantPayments:initiate";
  public static final Charset UTF8 = Charset.forName("UTF-8");
  public static final int HTTP_TIMEOUT_MS = 10000;

  public static void main(String args[]) {
    HttpTransport httpTransport;
    HttpRequestFactory httpRequestFactory;
    try {
      httpTransport = GoogleNetHttpTransport.newTrustedTransport();
      GoogleCredential credential = getGoogleCredential(httpTransport);
      httpRequestFactory = httpTransport.createRequestFactory(credential);

      doPostApplication(httpRequestFactory);
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Error in posting data.");
    }
  }

  /** Creates a {@link HttpContent} from the json file. */
  private static HttpContent getContent() {
    return new FileContent("application/json", new File(POST_JSON));
  }

  /** Creates a new credential using the service account json file and Oauth scope. */
  private static GoogleCredential getGoogleCredential(HttpTransport httpTransport)
      throws FileNotFoundException, IOException {
    return GoogleCredential.fromStream(
            new FileInputStream(new File(JWT_PATH)),
            httpTransport,
            JacksonFactory.getDefaultInstance())
        .createScoped(Collections.singleton(API_SCOPE));
  }

  /** Gets the specification of an application from the Google servers. */
  private static void doPostApplication(HttpRequestFactory requestFactory) throws IOException {
    GenericUrl url = new GenericUrl(API_URL);
    HttpRequest httpRequest = requestFactory.buildPostRequest(url, getContent());
    doHttpRequest(httpRequest);
  }

  /** Executes HTTP request against the API and prints response. */
  private static void doHttpRequest(HttpRequest httpRequest) throws IOException {
    // Set read timeout.
    httpRequest.setReadTimeout(HTTP_TIMEOUT_MS).setThrowExceptionOnExecuteError(false);
    HttpResponse httpResponse = httpRequest.execute();
    System.out.println("Status code: " + httpResponse.getStatusCode());
    String responseContent = inputStreamToString(httpResponse.getContent());

    // Parse and print formatted response.
    JsonObject response = new JsonParser().parse(responseContent).getAsJsonObject();
    System.out.println("response: " + response);
  }

  /** Reads input stream contents using the UTF-8 charset into a string. */
  private static String inputStreamToString(InputStream in) throws IOException {
    return CharStreams.toString(new InputStreamReader(in, UTF8));
  }
}

Maven dependencies

To make your code work, you must add the following Maven dependencies while building the app.

<dependencies>
    <dependency>
      <groupId>com.google.api-client</groupId>
      <artifactId>google-api-client</artifactId>
      <version>1.22.0</version>
    </dependency>
    <dependency>
      <groupId>com.google.http-client</groupId>
      <artifactId>google-http-client</artifactId>
      <version>1.22.0</version>
    </dependency>
    <dependency>
      <groupId>com.google.http-client</groupId>
      <artifactId>google-http-client-jackson</artifactId>
      <version>1.22.0</version>
    </dependency>
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.0</version>
    </dependency>
  </dependencies>

Oauth 2.0 References

  • Google API client libraries - Java

  • https://developers.google.com/identity/protocols/OAuth2#serviceaccount

  • https://developers.google.com/identity/protocols/OAuth2ServiceAccount

The following client libraries integrate with popular frameworks, which makes implementing OAuth 2.0 simpler.

  • Google-api-client
  • Google-http-java-client