2011-07-05 18 views
6

Estoy usando la API NVP de Paypal, junto con el BMCreateButton API, para generar botones cifrados con mi código Java.Botón Paypal Añadir al carro: cómo generar con Java?

Tengo la forma más simple de un botón resuelto. Así como ejemplo, para una camiseta que cuesta 8,00, el código para generar el botón está (tenga en cuenta, este es un fragmento de la parte de las variables de botón solamente) -

//...  
    NVPEncoder encoder = new NVPEncoder(); 
    encoder.add("METHOD", "BMCreateButton"); 
    encoder.add("BUTTONCODE","ENCRYPTED"); 
    encoder.add("BUTTONTYPE","CART"); 
    encoder.add("L_BUTTONVAR1","amount=8.00"); 
    encoder.add("L_BUTTONVAR2","item_number=6985855"); 
    encoder.add("L_BUTTONVAR3","item_name=T-Shirt"); 
//... 

Eso es bastante simple - pero de manera realista, los productos tienen otras opciones. Una camiseta puede tener opciones de color y tamaño, que aparecerían como menús html<select> en la página. Además, cada opción de color/tamaño tendría un precio diferente.

Aquí es donde me estoy atascado. Entre las páginas HTML Variable Reference y BMCreateButton API en Paypal, ¡estoy confundido!

el código HTML que hay que emitir con las opciones de menú sería así -

<input type="hidden" name="on0" value="Color &amp; Size">Color &amp; Size 
<input type="hidden" name="option_select0" value="Pink Small" /> 
<input type="hidden" name="option_amount0" value="6.00" /> 
<input type="hidden" name="option_select1" value="Pink Medium" /> 
<input type="hidden" name="option_amount1" value="7.00" /> 
<input type="hidden" name="option_select2" value="Pink Large" /> 
<input type="hidden" name="option_amount2" value="8.00" /> 

<select name="os0"> 
    <option value="Pink Small">Pink - Small $6.00 - (13)</option> 
    <option value="Pink Medium">Pink - Medium $7.00</option> 
    <option value="Pink Large">Pink - Large $8.00</option> 
</select> 

¿Cómo código que?

Lo mejor que podía llegar a - pero no funcionó, por supuesto - era esto -

//... 
    NVPEncoder encoder = new NVPEncoder(); 
    encoder.add("METHOD", "BMCreateButton"); 
    encoder.add("BUTTONCODE","ENCRYPTED"); 
    encoder.add("BUTTONTYPE","CART"); 
    encoder.add("L_BUTTONVAR1","item_number=6985855"); 
    encoder.add("L_BUTTONVAR2","item_name=Dress"); 
    encoder.add("L_BUTTONVAR3","on0=Color & Size"); 
    encoder.add("L_BUTTONVAR4","option_select0=Pink Small"); 
    encoder.add("L_BUTTONVAR5","option_amount0=6.00"); 
    encoder.add("L_BUTTONVAR6","option_select1=Pink Medium"); 
    encoder.add("L_BUTTONVAR7","option_amount1=7.00"); 
    encoder.add("L_BUTTONVAR8","option_select2=Pink Large"); 
    encoder.add("L_BUTTONVAR9","option_select2=8.00"); 

    encoder.add("OPTION0NAME","Color & Size"); 
    encoder.add("L_OPTION0SELECT0","Pink Small"); 
    encoder.add("L_OPTION0PRICE0","6.00"); 
    encoder.add("L_OPTION0SELECT1","Pink Medium"); 
    encoder.add("L_OPTION0PRICE1","7.00"); 
    encoder.add("L_OPTION0SELECT2","Pink Large"); 
    encoder.add("L_OPTION0PRICE2","8.00"); 
//... 

Puede alguien por favor me ayude a cabo? Gracias :)

Respuesta

7

Después de algunas correspondencias con Paypal a través de su sitio Merchant Support, finalmente obtuve la respuesta que necesitaba. Por cierto, si alguna vez tienes un problema con las API de Paypal, y después de mirar incansablemente en su sitio, todavía no has encontrado la respuesta que necesitas (culpan a su pobre organización y la falta de documentación buena y exhaustiva para eso) - Yo le instamos a ponerse en contacto con su Soporte Técnico y/o Desarrollador a través de su sitio Merchant Support. ¡Es casi la única forma de obtener una respuesta!

Si eres un desarrollador de Java como yo, este código también debería ser útil para ti.

public static String createEncryptedButton(PrintWriter out) throws Exception {   
    String returnResult = "";   
    NVPEncoder encoder = new NVPEncoder(); 

    encoder.add("METHOD","BMCreateButton"); 

    encoder.add("BUTTONCODE","ENCRYPTED"); 
    encoder.add("BUTTONTYPE","CART"); 
    encoder.add("BUTTONSUBTYPE","PRODUCTS");   
    encoder.add("L_BUTTONVAR0","business="+businessEmail); //use your sandbox or paypal email 
    encoder.add("L_BUTTONVAR1","item_name=Dress"); 
    encoder.add("L_BUTTONVAR2","item_number=100100"); 
    encoder.add("OPTION0NAME","Color and Size"); 
    encoder.add("L_OPTION0SELECT0","Pink Small"); 
    encoder.add("L_OPTION0PRICE0","6.00"); 
    encoder.add("L_OPTION0SELECT1","Pink Medium"); 
    encoder.add("L_OPTION0PRICE1","7.00"); 
    encoder.add("L_OPTION0SELECT2","Pink Large"); 
    encoder.add("L_OPTION0PRICE2","8.00"); 

    String strNVPString = encoder.encode(); 
    String ppresponse = call(strNVPString,out); 
    NVPDecoder results = new NVPDecoder(); 
    results.decode(ppresponse);     

    String buttonCode = results.get("WEBSITECODE"); 

    out.print("the code is :"+buttonCode);    

    return returnResult; 
} 

    public static String call(String payload, PrintWriter out) throws Exception { 

//Remember to setup your API credentials, whether you're using Sandbox 
//for testing or Paypal when you go live 
String USER = "yourUsername"; //API Username 
String PWD = "yourPassword"; //API Password 
String SIGNATURE = "yourSignature"; //API Signature 
String VERSION = "74.0"; //Version numbers differ from Paypal and Sandbox site. Do View > Source and look in source code for current version number under each site. 

StringBuffer request = new StringBuffer(); 
request.append("USER="+USER+"&PWD="+PWD+"&SIGNATURE="+SIGNATURE+"&VERSION="+VERSION); 
request.append("&"); 


//this is for Sandbox testing 
//when you go live with paypal, switch it to 
//https://api-3t.paypal.com/nvp 
URL url = new URL("https://api-3t.sandbox.paypal.com/nvp"); 

     HttpsURLConnection connection = (HttpsURLConnection)url.openConnection(); 
     connection.setDoOutput(true); 
     connection.setUseCaches(false); 
     connection.setRequestProperty("Content-Type", "text/namevalue"); 
     DataOutputStream outst = new DataOutputStream(connection.getOutputStream());   
     outst.write(request.toString().getBytes()); 
     outst.close(); 

     // Read the gateway response 
     BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
     StringBuffer sb = new StringBuffer(); 
     String line; 
     while ((line = in.readLine()) != null) { 
      sb.append(line); 
     } 
     in.close(); 
     return sb.toString(); 
    } // call 
+0

estoy tratando de utilizar la API de BMCreateButton en .Net, exactamente de la manera que se hace en Java. Configuré mi cuenta de sandbox, obtuve las credenciales de la API, escribí el código, funcionó, recibí la respuesta de BMCreateButton, pero cuando puse el HTML (generado por BMCreateButton) en una página web: cuando hago clic en "Comprar ahora" "Me llevaron al sitio web de PayPal, que en realidad MUESTRA todo el valor (nombre del artículo, precio del artículo ...) PERO dice" Hubo un problema con el descifrado de su pedido seguro. Póngase en contacto con su vendedor ". ¿Alguna idea sobre dónde está el error? No configuré ningún certificado SSL, ¿esto importa? – Max

+0

Aquí está el código que estoy usando http://stackoverflow.com/questions/9939960/how-to-use-the-bmcreatebutton-nvp-paypal-api-to-create-encrypted-paynow-button Estoy intentando para crear un simple botón cifrado de PayNow. ¿Tienes alguna idea de lo que estoy haciendo mal? – Max

Cuestiones relacionadas