Кнопка PayPal Add to Cart - как создать с помощью Java? - PullRequest
6 голосов
/ 05 июля 2011

Я использую Paypal NVP API вместе с BMCreateButton API , чтобы генерировать зашифрованные кнопки с моим Java-кодом.

Я получил простейшую форму изображенной кнопкииз.Так, например, для футболки стоимостью 8,00 код для создания кнопки (имейте в виду, что это фрагмент только части переменных кнопки) -

//...    
    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");
//...

Это простодостаточно - но реально у продуктов есть другие варианты.Футболка может иметь варианты цвета и размера, которые будут отображаться в виде html <select> меню на странице.Кроме того, каждый вариант цвета / размера будет иметь свою цену.

Вот где я застреваю.Я путаюсь между HTML-справочником по переменным и BMCreateButton API на Paypal!-

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

Как мне это закодировать?

Лучшее, что я мог придумать - но, конечно, не сработало - было это -

//...
    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");
//...

Может кто-нибудь, пожалуйста, помогите мне?Спасибо:)

1 Ответ

7 голосов
/ 06 июля 2011

После нескольких переписок с Paypal через их сайт Merchant Support я наконец получил нужный ответ. Кстати, если у вас когда-нибудь возникнут проблемы с API Paypal, и после того, как вы неустанно заглянули на их сайт, вы все равно не нашли нужного ответа (вините в этом их плохую организацию и отсутствие хорошей, тщательной документации) - я призываем вас связаться со службой технической поддержки и / или поддержки разработчиков через их Merchant Support сайт. Это единственный способ получить ответ!

Если вы такой же разработчик Java, как и я, этот код вам тоже пригодится.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...