【发布时间】:2017-02-04 09:17:16
【问题描述】:
我正在运行 ASP.Net 4.5,但使用的是非常旧的 PayPal SOAP api 版本。参考报告版本为 4.3.1.0 的 paypal_base.dll。调用 API 的代码具有引用的“使用”语句:
com.paypal.sdk.services
com.paypal.soap.api.
我已经在调用 PayPal api 时验证了这个值
System.Net.ServicePointManager.SecurityProtocol
包括 ssl3 和 tls1.2。
我指的是“沙盒”模式。
但是当调用 setExpressCheckout 时,我得到一个运行时异常,上面写着: 请求中止:无法创建 SSL/TLS 安全通道。
我已经下载了 PayPal API 示例项目并使用相同的沙箱凭据,它可以工作。在 Fiddler 中查看,调用几乎相同,除了示例 API 调用转到 api-3t.sandbox.paypal.com,而我的代码转到 api-aa.sandbox.paypal.com,但根据有关 TLS 1.2 就绪性的文档,两个 api 都应该工作。除了在“实时”和“沙盒”之间切换之外,我在这两个 API 中都没有看到设置端点的任何地方。
在提琴手响应中,两者都显示: “找到了与 SSLv3 兼容的 ServerHello 握手。Fiddler 提取了以下参数。 版本:3.3 (TLS/1.2)" 除了“随机”参数之外,响应是相同的。所以旧的 API 调用使用的是 TLS 1.2
我的代码和 Samples API 代码只是略有不同,示例使用:
SetExpressCheckoutRequestType request = new SetExpressCheckoutRequestType();
populateRequestObject(request); //populate request data
SetExpressCheckoutReq wrapper = new SetExpressCheckoutReq();
wrapper.SetExpressCheckoutRequest = request;
Dictionary<string, string> configurationMap = Configuration.GetAcctAndConfig(); //set merchant config
PayPalAPIInterfaceServiceService service = new PayPalAPIInterfaceServiceService(configurationMap);
SetExpressCheckoutResponseType setECResponse = service.SetExpressCheckout(wrapper); //make the call
我的(同样,非常旧的代码看起来像这样):
CallerServices caller = new CallerServices();
caller.APIProfile = SetProfile.ApplicationProfile; //set merchant config
SetExpressCheckoutRequestType pp_request = new SetExpressCheckoutRequestType();
// Create the request details object
pp_request.SetExpressCheckoutRequestDetails = new SetExpressCheckoutRequestDetailsType();
pp_request.SetExpressCheckoutRequestDetails.PaymentAction = paymentAction;
pp_request.SetExpressCheckoutRequestDetails.PaymentActionSpecified = true;
pp_request.SetExpressCheckoutRequestDetails.OrderTotal = new BasicAmountType();
pp_request.SetExpressCheckoutRequestDetails.OrderTotal.currencyID = currencyCodeType;
pp_request.SetExpressCheckoutRequestDetails.OrderTotal.Value = paymentAmount;
pp_request.SetExpressCheckoutRequestDetails.CancelURL = cancelURL;
pp_request.SetExpressCheckoutRequestDetails.ReturnURL = returnURL;
return (SetExpressCheckoutResponseType) caller.Call("SetExpressCheckout", pp_request); //do the call
示例代码有效,我的代码抛出 SSL/TLS 错误。我尝试升级到最新的 SDK,但发生了很大的变化,迁移所有代码需要付出相当大的努力。
从提琴手看来,即使使用旧 API,它似乎也在使用 TLS 1.2,但我得到一个关于 SSL/TLS 连接的运行时异常。是因为端点不同吗?旧 API 是否太旧了?
提前感谢您的帮助 - 我希望避免迁移所有古老的代码!
编辑:我应该提到我使用的是用户名/密码/签名凭据,而不是基于证书的凭据。
【问题讨论】:
-
Hey Jeff...我刚刚继承了具有同样问题的旧 WebForms 代码。想知道您是否曾经得到过这个问题的答案?
-
对不起,我想我忘了回来这里接受答案,但PP_MTS_hzhu是正确的。我将程序集升级到 4.5,然后在静态构造函数的答案中添加了这行代码,它就可以工作了。我不需要使用新的 PayPal API。
-
感谢您的回复......感谢它。
标签: asp.net api ssl soap paypal