Jav*_*ava 4 java soap web-services paypal
我正在尝试使用 paypal soap 客户端,并使用 Java参考使用Paypal Express Checkout执行 setExpressCheckout 方法。
所以在这里我只使用 paypal-base.jar 和 paypal-stubs.jar 而不是肥皂客户端(从 wsdl 生成)。
public class SetExpressCheckoutService{
private static Logger log = Logger.getLogger(SetExpressCheckoutService.class);
public static void main(String[] args){
SetExpressCheckoutService setExpressCheckoutService = new SetExpressCheckoutService();
//the parameters for the service
Long userId = 5l;
String amount = "25";
String returnURL = "http://localhost:8080/integratingstuff-paypal/return_after_payment.xhtml";
String cancelURL = "http://localhost:8080/integratingstuff-paypal/cancel_payment.xhtml";
PaymentActionCodeType paymentAction = PaymentActionCodeType.Sale;
CurrencyCodeType currencyCode = CurrencyCodeType.EUR;
try {
//calling the service, setting up the checkoutpage
String token = setExpressCheckoutService.setExpressCheckout(userId, amount, currencyCode, returnURL,cancelURL,paymentAction);
log.info("Url to redirect to: https://www.sandbox.paypal.com/webscr?cmd=_express-checkout&useraction=commit&token=" + token);
} catch (PayPalException e) {
log.error(e);
}
}
public String setExpressCheckout(Long userId, String paymentAmount,
CurrencyCodeType currencyCodeType, String returnURL, String cancelURL,
PaymentActionCodeType paymentAction) throws PayPalException{
CallerServices caller = new CallerServices();
//construct and set the profile, these are the credentials we establish as "the shop" with Paypal
APIProfile profile = ProfileFactory.createSignatureAPIProfile();
profile.setAPIUsername("sdk-three_api1.sdk.com");
profile.setAPIPassword("QFZCWN5HZM8VBG7Q");
profile.setSignature("AVGidzoSQiGWu.lGj3z15HLczXaaAcK6imHawrjefqgclVwBe8imgCHZ");
profile.setEnvironment("sandbox");
caller.setAPIProfile(profile);
//construct the request
SetExpressCheckoutRequestType pprequest = new SetExpressCheckoutRequestType();
pprequest.setVersion("63.0");
//construct the details for the request
SetExpressCheckoutRequestDetailsType details = new SetExpressCheckoutRequestDetailsType();
PaymentDetailsType paymentDetails = new PaymentDetailsType();
paymentDetails.setOrderDescription("Integrating Stuff Test Order");
paymentDetails.setInvoiceID("INVOICE-" + Math.random());
BasicAmountType orderTotal = new BasicAmountType(paymentAmount);
orderTotal.setCurrencyID(currencyCodeType);
paymentDetails.setOrderTotal(orderTotal);
paymentDetails.setPaymentAction(paymentAction);
details.setPaymentDetails(new PaymentDetailsType[]{paymentDetails});
details.setReturnURL(returnURL);
details.setCancelURL(cancelURL);
details.setCustom(userId.toString());
//set the details on the request
pprequest.setSetExpressCheckoutRequestDetails(details);
//call the actual webservice, passing the constructed request
SetExpressCheckoutResponseType ppresponse = (SetExpressCheckoutResponseType) caller.call("SetExpressCheckout", pprequest);
//get the token from the response
return ppresponse.getToken();
}
}
Run Code Online (Sandbox Code Playgroud)
我曾尝试执行此方法,但出现异常
com.paypal.sdk.exceptions.FatalException: Unable to establish SOAP connection
引起:java.lang.NullPointerException at com.paypal.sdk.core.APICallerBase.getEndpointUrl(APICallerBase.java:296)
完整的堆栈跟踪是:
com.paypal.sdk.exceptions.FatalException: Unable to establish SOAP connection
at com.paypal.sdk.core.soap.SOAPAPICaller.setupConnection(SOAPAPICaller.java:292)
at com.paypal.sdk.services.CallerServices.setAPIProfile(CallerServices.java:112)
at com.imedicor.liferay.organizations.util.PaypalService.setExpressCheckout(PaypalService.java:92)
at com.imedicor.liferay.organizations.util.PaypalService.testing(PaypalService.java:43)
at org.apache.jsp.organization_005fdetails_jsp._jspService(organization_005fdetails_jsp.java:500)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:73)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:593)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:530)
at com.liferay.portlet.PortletRequestDispatcherImpl.dispatch(PortletRequestDispatcherImpl.java:323)
at com.liferay.portlet.PortletRequestDispatcherImpl.include(PortletRequestDispatcherImpl.java:134)
at com.imedicor.liferay.organizations.portlet.OrganizationPortlet.doView(OrganizationPortlet.java:83)
at com.liferay.portal.kernel.portlet.LiferayPortlet.doDispatch(LiferayPortlet.java:218)
at com.liferay.util.bridges.mvc.MVCPortlet.doDispatch(MVCPortlet.java:319)
at javax.portlet.GenericPortlet.render(GenericPortlet.java:233)
at com.liferay.portlet.FilterChainImpl.doFilter(FilterChainImpl.java:100)
at com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:64)
at com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:111)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:73)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:593)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:530)
at com.liferay.portlet.InvokerPortletImpl.invoke(InvokerPortletImpl.java:534)
at com.liferay.portlet.InvokerPortletImpl.invokeRender(InvokerPortletImpl.java:607)
at com.liferay.portlet.InvokerPortletImpl.render(InvokerPortletImpl.java:359)
at org.apache.jsp.html.portal.render_005fportlet_jsp._jspService(render_005fportlet_jsp.java:1207)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at com.liferay.portal.servlet.DirectRequestDispatcher.include(DirectRequestDispatcher.java:97)
at com.liferay.portal.servlet.PACLRequestDispatcherWrapper.doDispatch(PACLRequestDispatcherWrapper.java:90)
at com.liferay.portal.servlet.PACLRequestDispatcherWrapper.include(PACLRequestDispatcherWrapper.java:54)
at com.liferay.portal.util.PortalImpl.renderPortlet(PortalImpl.java:5158)
at com.liferay.portal.util.PortalUtil.renderPortlet(PortalUtil.java:1569)
at com.liferay.portlet.layoutconfiguration.util.RuntimePortletImpl.processPortlet(RuntimePortletImpl.java:165)
at com.liferay.portlet.layoutconfiguration.util.RuntimePortletImpl.processPortlet(RuntimePortletImpl.java:203)
at com.liferay.portlet.layoutconfiguration.util.RuntimePortletImpl.processPortlet(RuntimePortletImpl.java:190)
at com.liferay.portlet.layoutconfiguration.util.RuntimePortletUtil.processPortlet(RuntimePortletUtil.java:87)
at com.liferay.portlet.layoutconfiguration.util.velocity.TemplateProcessor.processMax(TemplateProcessor.java:165)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.doInvoke(UberspectImpl.java:389)
at org.apache.velocity.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:378)
at org.apache.velocity.runtime.parser.node.ASTMethod.execute(ASTMethod.java:270)
at org.apache.velocity.runtime.parser.node.ASTReference.execute(ASTReference.java:262)
at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:342)
at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336)
at org.apache.velocity.Template.merge(Template.java:328)
at org.apache.velocity.Template.merge(Template.java:235)
at org.apache.velocity.app.VelocityEngine.mergeTemplate(VelocityEngine.java:381)
at com.liferay.portal.velocity.VelocityEngineImpl.mergeTemplate(VelocityEngineImpl.java:264)
at com.liferay.portal.kernel.velocity.VelocityEngineUtil.mergeTemplate(VelocityEngineUtil.java:73)
at com.liferay.portlet.layoutconfiguration.util.RuntimePortletImpl.doProcessTemplate(RuntimePortletImpl.java:499)
at com.liferay.portlet.layoutconfiguration.util.RuntimePortletImpl.doDispatch(RuntimePortletImpl.java:394)
at com.liferay.portlet.layoutconfiguration.util.RuntimePortletImpl.processTemplate(RuntimePortletImpl.java:228)
at com.liferay.portlet.layoutconfiguration.util.RuntimePortletUtil.processTemplate(RuntimePortletUtil.java:125)
at org.apache.jsp.html.portal.layout.view.control_005fpanel_jsp._jspService(control_005fpanel_jsp.java:676)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:73)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:593)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:530)
at com.liferay.portal.action.LayoutAction.includeLayoutContent(LayoutAction.java:468)
at com.liferay.portal.action.LayoutAction.processLayout(LayoutAction.java:735)
at com.liferay.portal.action.LayoutAction.execute(LayoutAction.java:249)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at com.liferay.portal.struts.PortalRequestProcessor.process(PortalRequestProcessor.java:187)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at com.liferay.portal.servlet.MainServlet.callParentService(MainServlet.java:560)
at com.liferay.portal.servlet.MainServlet.service(MainServlet.java:537)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:163)
at com.liferay.portal.servlet.filters.secure.SecureFilter.processFilter(SecureFilter.java:294)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:57)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:206)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:108)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilter.doFilter(InvokerFilter.java:73)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
at com.liferay.portal.servlet.FriendlyURLServlet.service(FriendlyURLServlet.java:138)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:72)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:163)
at com.liferay.portal.servlet.filters.strip.StripFilter.processFilter(StripFilter.java:335)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:57)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:206)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:108)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:163)
at com.liferay.portal.servlet.filters.gzip.GZipFilter.processFilter(GZipFilter.java:123)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:57)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:206)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:108)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:163)
at com.liferay.portal.servlet.filters.secure.SecureFilter.processFilter(SecureFilter.java:294)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:57)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:206)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:108)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:163)
at com.liferay.portal.servlet.filters.i18n.I18nFilter.processFilter(I18nFilter.java:241)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:57)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:206)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:108)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.doFilter(InvokerFilterChain.java:116)
at com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:163)
at com.liferay.portal.servlet.filters.etag.ETagFilter.processFilter(ETagFilter.java:56)
at com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:57)
at com.liferay.portal.kernel.servlet.filters.invoker.InvokerFilterChain.processDoFilter(InvokerFilterChain.java:206)
at com.liferay.portal.kernel.servlet.filters.i
好的,所以我没有设法找出为什么CallerService会抛出提到的异常,因为即使在反编译之后paypal_base.jar,代码也非常繁琐,而且很难找出幕后发生的事情。看起来它已经过时了或者什么的,因为除了几个地方之外,我在网上的任何地方都找不到对这个 JAR 的引用。
但我真的建议您坚持使用 PayPal 提供的原始文档。我自己尝试过,这是我发现的:
按照上述文章中的Paypal API SDK 和下载链接,然后单击类别Merchant下的链接Classic APIs(如果您在网上挖掘,您会发现 PayPal Merchant API 应该用于 ExpressCheckout 请求)。单击Java上面的按钮并使用Maven(首选)或仅使用页面底部的下载链接下载 SDK 。
将下载的 JAR 添加到您的项目并删除其他 PayPal JAR,因为下载的Merchant APIjar 应包含所有必需的类。
现在一切都取决于猜测:) 因此,在上面的代码片段中,您已经形成了实例,SetExpressCheckoutRequestType并且您需要some invocation code使用您的实例SetExpressCheckoutRequestType并返回实例SetExpressCheckoutResponseType。
我使用Search -> References -> WorkspaceEclipse 中的功能来查找jar 中SetExpressCheckoutRequestType使用的位置Merchant API。这个搜索表明(除了其他地方)有一个名为的类SetExpressCheckoutReq有方法setSetExpressCheckoutRequest(SetExpressCheckoutRequestType)
然后我再次使用搜索功能搜索SetExpressCheckoutReq类的用法,发现有返回需要的PayPalAPIInterfaceServiceService方法的类。setExpressCheckout(SetExpressCheckoutReq setExpressCheckoutReq)SetExpressCheckoutResponseType
在setExpressCheckout(SetExpressCheckoutReq setExpressCheckoutReq)方法旁边,有一个方法也接受ICredential参数并具有以下签名:
setExpressCheckout(SetExpressCheckoutReq setExpressCheckoutReq, ICredential credential)
再次使用 Eclipse 我寻找实现ICredential接口的类,发现有一个类命名为SignatureCredential带有 3 个参数的构造函数:用户名、密码、签名。这在我看来是要走的路。
因此,非常近似 - 代码片段现在应该如下所示:
final SetExpressCheckoutRequestType ppRequest = ...; // here you create your request as in code snippet above
final Properties serviceConfigurationProperties = ...; // bookmark #1
final PayPalAPIInterfaceServiceService service = new PayPalAPIInterfaceServiceService(serviceConfigurationProperties);
final SetExpressCheckoutReq request = new SetExpressCheckoutReq();
request.setSetExpressCheckoutRequest(ppRequest);
final ICredentials credentials = new SignatureCredentials(username, password, signature);
final SetExpressCheckoutResponseType response = service.setExpressCheckout(request, credentials);
Run Code Online (Sandbox Code Playgroud)
Bookmark #1:一个应该通过Properties服务配置的实例。要找出应该指定哪些属性,应该搜索它并尝试使用原始 PayPal 文档而不是 3rd 方博客 :) 如果查看PayPalAPIInterfaceServiceService类的Javadocs ,他/她会发现有提到的文件“sdk_config.properties ”。在谷歌搜索之后,我找到了该文件的几个示例:Example #1, Example #2
请注意,这不是完整的解决方案 - 它更像是我之前使用 PayPal SOAP API 使用的一组提示。这个 API 经常变化,文档不简洁,所以我真的建议下载Merchant API带有源代码的 jar,每当出现问题时 - 也查看代码 - 这通常会澄清很多。还请坚持使用 PayPal 的原始文档:
另外,如果您没有使用 Java 中的 Web 服务客户端的经验,我建议您尝试使用网络上的教程来实现一些简单的客户端 - 这可能会澄清很多。
再次抱歉没有发布完整和简洁的代码片段 - 从现在起我已经 2 年没有与 PayPal 合作过,那时我花了一周的工作时间来找出所有细节并设置和运行。请发布问题 - 我会在有时间的时候尝试回答
希望这可以帮助...
编辑
关于response.getAck()返回FAILURE- 我过去也遇到过这样的问题。我通过试验请求中发送的参数解决了这个问题 -PayPal对这些参数非常敏感,如果任何参数被省略或没有正确的值,只需返回FAILURE.
可以在此处找到完整的参数列表: PayPal SetExpressCheckout SOAP API 文档
另请注意,该版本使用version2.5.106的Merchant SDKAPI 106.0。
希望这可以帮助...
| 归档时间: |
|
| 查看次数: |
2029 次 |
| 最近记录: |