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。这在我的情况下不起作用!!!!
我通过简单地更新库以使用merchantsdk-2.14.117解决了这个问题。jar,paypal-core-1.7.0。罐子
我能够测试
这适用于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代码片段: 正确发布数据,但使用