我有一个SOAP Web服务,我可以使用下面的命令进行API调用。它工作正常。
curl --user test:test123 --header "Content-Type: text/xml;charset=UTF-8" --data @checkPayment.xml http://192.168.100.10:8081/asywspay/WSDeclarationPayment
上面提到的SOAP服务通过WSO2 API Manager 1.6公开,终点是http://api.store.com:8280/WSDeclarationPayment/1.0.
然后我使用下面的命令进行API调用。
curl --user test:test123 --header "Content-Type: text/xml;charset=UTF-8" --header "Authorization: Bearer 7bcc2235a6b0bebfbf4ff684f59f97a7" --data @checkPayment.xml http://api.store.com:8280/WSDeclarationPayment/1.0
它给了我错误This request requires HTTP authentication
。即使我通过curl使用--user test:test123
传递凭据,它也不会通过API管理器传递。
鉴于这也是这样尝试的。
curl --header "Content-Type: text/xml;charset=UTF-8" --header "Authorization: Bearer 7bcc2235a6b0bebfbf4ff684f59f97a7" --header "Authorization: Basic dGVzdDp0ZXN0MTIz" --data @checkPayment.xml http://api.store.com:8280/WSDeclarationPayment/1.0
然后我收到错误<faultcode>S:Client</faultcode><faultstring>Cannot find dispatch method for {
我该如何解决这个问题?
答案 0 :(得分:1)
您有一个安全的后端SOAP服务,需要通过API Manager公开。当您创建API时,在“端点”部分下,您必须单击Show More Options
,您必须选择Secured
作为Endpoint Security Scheme
,然后您可以在那里提供后端服务凭据,如图所示在下图中。当API Manager调用后端服务时,将使用这些凭据。现在我们已将API Manager配置为与安全后端进行通信。
然后,您必须在API Store中创建一个Application,将该应用程序订阅到API,生成访问令牌,最后在调用API时必须使用这些访问令牌。这整个流程在这里有很好的记录[a]。请仔细阅读。如果您想在没有访问令牌的情况下调用API,则可以在创建API时将Auth Type
设置为None
以获取API资源。
[a] https://docs.wso2acom/display/AM160/Application+Developer+Guide