400 response when posting Checkout request to Google Checkout API

Juls3

New Member
While I've integrated several payment processors and shopping carts in the past, this Google Checkout API integration is not going well for me. I get a 400 response from Google, even when I use the diagnostic link. I'm sure something's wrong in my URL, but I can't seem to figure out what. I'm using a sandbox Merchant ID and Key.Can someone help me see what I'm doing to get this 400 response, please?I am using Java and posting from a server thus I'm calling the server to server API link:\[code\]https://sandbox.google.com/checkout/api/checkout/v2/merchantCheckout/Merchant/%SANDBOXID%<?xml version="1.0" encoding="UTF-8"?><checkout-shopping-cart xmlns="http://checkout.google.com/schema/2"> <shopping-cart> <merchant-private-data> <merchant-note>8Ra8fw4tBaOdP4v3lseykKO6crR0dFqhzWV0EmqKuVuQaN1w0mcScAAR71pbexXlVnrwpP8wNzehuc7wz3KO9JM6xfedW8106olarCZcZBs=</merchant-note> </merchant-private-data> <items> <item-name>MyName : MySubname</item-name> <item-description>Weigh in on this year's...</item-description> <unit-price currency="USD">100</unit-price> <quantity>1</quantity> </items> </shopping-cart></checkout-shopping-cart>\[/code\]I am using Java to post this data. In the code below, the url above is sandboxLink in the code and checkReq is the XML post...\[code\] public static String postCheckoutReqData(String userID, String gameName, boolean test) { String checkRequest = GoogleCheckoutXML.getCheckoutRequestXML(userID, gameName); if(checkRequest.indexOf("error,") != -1) return checkRequest; URL url = null; try { String baseCodeString; if(test) { url = new URL(GoogleCheckoutXML.sandboxLink + GoogleCheckoutXML.sandboxMerchID); baseCodeString = GoogleCheckoutXML.sandboxMerchID + ":" + GoogleCheckoutXML.sandboxMerchKey; } else { url = new URL(GoogleCheckoutXML.productionLink + GoogleCheckoutXML.merchantID); baseCodeString = GoogleCheckoutXML.merchantID + ":" + GoogleCheckoutXML.merchantKey; } //url = new URL(GoogleCheckoutXML.diagnose); byte[] bytes = (baseCodeString.getBytes()); baseCodeString = new Base64().encodeAsString(bytes); URLConnection conn = url.openConnection(); conn.setDoOutput(true); conn.setRequestProperty("Authorization", "Basic " + baseCodeString); conn.setRequestProperty("Content-Type", "application/xml; charset=UTF-8"); conn.setRequestProperty("Accept", "application/xml; charset=UTF-8"); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write(checkRequest); wr.flush(); // Get the response BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = rd.readLine()) != null) { line = line + rd.readLine(); } wr.close(); rd.close(); return line; } catch (Exception e) { e.printStackTrace(); return "error,Purchase Error posting communcation failed"; }\[/code\]The actual stack trace in Tomcat is:\[code\]java.io.IOException: Server returned HTTP response code: 400 for URL: https://sandbox.google.com/checkout/api/checkout/v2/merchantCheckout/Merchant/[withheld]at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1612)at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)at com.[withheld]..GoogleCheckoutXML.postCheckoutReqData(GoogleCheckoutXML.java:194)at com.[withheld]...l.getCheckoutLink(DubQueryImpl.java:270)at com.[withheld]....GenerateCheckoutLinkServlet.doGet(GenerateCheckoutLinkServlet.java:56)at com.[withheld]...doPost(GenerateCheckoutLinkServlet.java:73)at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)at java.lang.Thread.run(Thread.java:722)\[/code\]
 
Back
Top