当前位置: 首页 > 知识库问答 >
问题:

Paypal沙盒TLS更新(400)错误请求

仰成天
2023-03-14

Paypal sandbox已更新为使用TLS 1.2(https://devblog.paypal.com/upcoming-security-changes-notice/#tls).在没有任何改变的情况下,我看到了“握手失败”的错误。

我已经更新了我们使用的JAVA库,https://github.com/paypal/TLS-update#paypal-java-sdk-support.我使用遗留的1. x版本。

然而,PayPal抛出了PayPale例外。

[com.paypal.sdk.exceptions.TransactionException] (http-localhost/127.0.0.1:8082-7) (400)Bad Request:

除了更新paypal_base.jar(肥皂),我还使用VM选项-Dhttps.protocols=TLSv1.1, TLSv1.2但它没有任何区别。

我使用的paypalendpoint是

https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&useraction=commit&token=

我尝试过使用endpointAPI签名-

对还需要做什么有什么建议吗?

更新

我运行了他们提供的测试应用程序(TlsCheck.java/jar),下面是结果

java "-Dhttps.protocols=TLSv1.1,TLSv1.2" -jar TlsCheck.jar 
this client supports TLS 1.2
Failed to connect to TLS 1.2 endpoint

访问endpointtlstest。贝宝。浏览器中的com返回“400错误请求”。将终点更改为https://tlstest.paypal.com按预期返回“PayPal_连接_OK”。

我还制作了TlsCheck.java的副本(使用其默认endpointtlstest.paypal.com),并通过我的IDE运行它,该IDE返回以下内容(尽管最初无法连接)

this client supports TLS 1.2
Successfully connected to TLS 1.2 endpoint

在“api-3t.sandbox.paypal.com/2.0/”等其他endpoint上尝试了同样的方法,但无法连接到它

Failed to connect to TLS 1.2 endpoint

更新

结果表明,我的测试使用了TslCheck。jar失败,因为jar中使用的endpoint是“tlscheck.chargify.com”(无效??)但是源代码(来自同一个位置)https://github.com/paypal/TLS-update/tree/master/java)使用了另一个endpoint“tlstest.paypal.com”(有效)。

更新

尽管更新了paypal_的基础。我目前看到“没有名为PayPalapia的服务可用”,这最终导致404错误请求。还确认了我在axis库中使用HTTP/1.0作为HTTPSender,我们使用默认的HTTP/1.1。我还没有找到一个合适的方法来避开它。我试着跟着https://www-10.lotus.com/ldd/pfwiki.nsf/dx/10022008035400PMWEBRCB.htm切换到HTTP/1.1。这在我的情况下不起作用!!!!

共有2个答案

冀崇凛
2023-03-14

我通过简单地更新库以使用merchantsdk-2.14.117解决了这个问题。jar,paypal-core-1.7.0。罐子

我能够测试

欧阳高昂
2023-03-14

这适用于paypal TLS 1.2新SHA 256证书。

*)从paypal sandbox帐户下载paypal_cert.pem-

公共HashMap http调用(字符串方法名称,字符串nvpRequest estStr){

    String version = "2.3";
    String agent = "Mozilla/4.0";
    String respText = "";
    HashMap nvp = null;

    String encodedData = "METHOD=" + methodName + "&VERSION=" + gv_Version + "&PWD=" + gv_APIPassword + "&USER=" + gv_APIUserName + nvpRequestStr;

    try
    {

            KeyStore trustStore  = KeyStore.getInstance(KeyStore.getDefaultType());
            KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
            KeyStore keyStore = KeyStore.getInstance("PKCS12");

            InputStream keyInput = new FileInputStream("/Users/Downloads/paypal_cert.p12");
            keyStore.load(keyInput, "changeit".toCharArray());
            keyInput.close();
            keyManagerFactory.init(keyStore, "changeit".toCharArray());

            SSLContext context = SSLContext.getInstance("TLSV1.2");
            context.init(keyManagerFactory.getKeyManagers(), null, new SecureRandom());

            URL url = new URL(gv_APIEndpoint);
            HttpsURLConnection conn=(HttpsURLConnection)url.openConnection();
            conn.setSSLSocketFactory(context.getSocketFactory());
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            conn.setRequestProperty( "Content-Length", String.valueOf( encodedData.length()) );
            conn.setRequestMethod("POST");

            DataOutputStream output = new DataOutputStream( conn.getOutputStream());
            output.writeBytes( encodedData );
            output.flush();
            output.close ();

            // Read input from the input stream.
            DataInputStream  in = new DataInputStream (conn.getInputStream());
            int rc = conn.getResponseCode();
            if ( rc != -1)
            {
                BufferedReader is = new BufferedReader(new InputStreamReader( conn.getInputStream()));
                String _line = null;
                while(((_line = is.readLine()) !=null))
                {
                    respText = respText + _line;
                }
                nvp = deformatNVP( respText );
            }
            return nvp;
    } catch (NoSuchAlgorithmException e) {e.printStackTrace(); return null;
    } catch (UnknownHostException e) {e.printStackTrace(); return null;
    } catch (IOException e) {e.printStackTrace(); return null;
    } catch (KeyManagementException e) {e.printStackTrace(); return null;
    } catch (UnrecoverableKeyException e) {e.printStackTrace(); return null;
    } catch (CertificateException e) {e.printStackTrace(); return null;
    } catch (KeyStoreException e) {e.printStackTrace(); return null;}
}


public HashMap deformatNVP( String pPayload )
{
    HashMap nvp = new HashMap();
    StringTokenizer stTok = new StringTokenizer( pPayload, "&");
    while (stTok.hasMoreTokens())
    {
        StringTokenizer stInternalTokenizer = new StringTokenizer( stTok.nextToken(), "=");
        if (stInternalTokenizer.countTokens() == 2)
        {
            String key = URLDecoder.decode( stInternalTokenizer.nextToken());
            String value = URLDecoder.decode( stInternalTokenizer.nextToken());
            nvp.put( key.toUpperCase(), value );
        }
    }
    return nvp;
}
 类似资料:
  • 我正在沙箱模式下运行PayPals Payflow服务(或者至少尝试)。当我拨打电话时,我只得到以下信息: 我传递的不是信用卡数据,我传递的是带有银行路由信息的ACH数据。 PayPal称: 无效的主机映射。您正在尝试处理一种投标类型(如发现卡),但您的商户银行未将您设置为接受这种类型的卡。 有没有人知道我如何在PayPal Payflow中启用一个沙箱来启用ACH测试?这个帐户永远不会用于任何东

  • 所以我在玩贝宝沙箱,我只是实现了信用卡交易。我密切关注了Paypal Dev的示例,但它似乎不断地返回一个错误。我试过多张信用卡。在我添加直接信用卡交易之前,一切都正常工作。 这是它返回的错误: {“name”:“validation_error”,“details”:[{“field”:“payer.funding_instruments[0].credit_card.number”,“issu

  • 我有一个基于Spring Web model view controller(MVC)框架的项目。Spring Web模型-视图-控制器(MVC)框架的版本是3.2.8 我有这个控制器 这个URL一切正常:

  • 目前从Angular JS controller中,我试图将JSON数据发送到后端服务。但是我有400个错误的请求错误。 在Controller中,我试图通过http服务发送数据,如下所示:

  • 我试图集成PayPal经典API NVP到我们的网站,但我有问题与API调用。 我正在使用付款人的参数来直接在PayPal确认销售。 我的问题是点击立即支付后,PayPal重定向到我作为发送的网址,但我没有看到沙盒帐户上的交易或使用。 这些是我发送给结账的参数: 付款后,PayPal重定向到

  • 目标是通过ajax将对象发送到另一台服务器,这是我为CORS设置的,下面是代码。ajax代码片段: 正确发布数据,但使用