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