PayPal添加到购物车按钮 - 如何使用Java生成?

6
我将使用Paypal NVP API,以及BMCreateButton API,通过Java代码生成加密按钮。
我已经了解了最简单的按钮形式。例如,对于一个价格为8.00美元的T恤衫,生成按钮的代码如下(请注意,这只是按钮变量部分的代码片段)--
//...    
    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");
//...

那很简单 - 但实际上,产品还有其他选项。例如,T恤可能有颜色和尺码选项,在页面上会显示为html <select>菜单。此外,每个颜色/尺码选项都有不同的价格。
这就是我遇到问题的地方。在Paypal的HTML变量参考BMCreateButton API页面之间,我感到困惑!
应该输出带有选择菜单选项的Html代码如下 -
<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
通过Paypal的商家支持网站进行了几次通讯后,我终于得到了需要的答案。顺便说一下,如果您在使用Paypal的API时遇到问题,在他们的网站上搜索了很久,仍然找不到需要的答案(这就要怪他们糟糕的组织和缺乏完整的文档),我建议您通过他们的商家支持网站联系他们的技术和/或开发人员支持。这几乎是获得答案的唯一途径!
如果您像我一样是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

我正在尝试在.Net中使用BMCreateButton API,就像您在Java中所做的那样。我设置了我的沙盒业务帐户,获得了API凭据,编写了代码,它可以工作,我收到了BMCreateButton的答案,但是当我将HTML(由BMCreateButton生成)放在网页上时:当我单击“立即购买”按钮时,我被带到PayPal网站,它实际上显示所有值(项目名称、项目价格...),但它说“解密您的安全订单时出现问题。请联系您的商家。”有任何关于错误的想法吗?我没有设置任何SSL证书,这是否重要? - Max
这是我正在使用的代码 https://dev59.com/H2LVa4cB1Zd3GeqPtSPh 我正在尝试创建一个简单的加密PayNow按钮。你有任何关于我做错了什么的想法吗? - Max

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接