如何让NAMESPACE,SOAP_ACTION,URL和METHOD_NAME在android中调用SOAP请求

时间:2016-11-09 09:39:46

标签: android soap wsdl android-ksoap2

我有一个用于调用代码的url我应该在代码中用Ksoap2库调用它。

我的代码在下面,

final String NAMESPACE ="";
final String URL ="";
final String METHOD_NAME = "";
final String SOAP_ACTION = "";
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
request.addProperty(HoldPayment.Amount, "1000");
request.addProperty(HoldPayment.CallbackURL,"http://www.yoursoteaddress.ir/verify.php");
request.addProperty(HoldPayment.Description,"pule kharide tala");
request.addProperty(HoldPayment.Email,"za@gmail.com");
request.addProperty(HoldPayment.MerchantID,"e579752a-a591-11e6-9304-000c295eb8fc");
request.addProperty(HoldPayment.Mobile,"09012345678");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
    androidHttpTransport.call(SOAP_ACTION,envelope);
    Object resultsRequestSOAP = envelope.bodyIn;
    Log.e("","Response::"+resultsRequestSOAP.toString());
} catch (Exception e) {
    e.printStackTrace();
    System.out.println("Error"+e);
}

我的网址是,

https://www.zarinpal.com/pg/services/WebGate/wsdl

我不知道我应该在代码中设置名称空间,方法,action_soap和url。

1 个答案:

答案 0 :(得分:2)

试试这个,

private static final String NAMESPACE ="http://zarinpal.com/";
private static final String WSDL ="https://www.zarinpal.com/pg/services/WebGate/service";
private static final String METHOD_NAME = "PaymentRequest";
private static final String SOAP_ACTION = WSDL + "#" + METHOD_NAME;

private static String TAG = "soap";

public static String callWebservice() {
    String responseDump = "";
    try {
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
        request.addProperty(HoldPayment.Amount, "1000");
        request.addProperty(HoldPayment.CallbackURL,"http://www.yoursoteaddress.ir/verify.php");
        request.addProperty(HoldPayment.Description,"pule kharide tala");
        request.addProperty(HoldPayment.Email,"za@gmail.com");
        request.addProperty(HoldPayment.MerchantID,"e579752a-a591-11e6-9304-000c295eb8fc");
        request.addProperty(HoldPayment.Mobile,"090123456789");

        envelope.bodyOut = request;
        HttpTransportSE transport = new HttpTransportSE(WSDL);

        transport.debug = true;
        try {
            transport.call(SOAP_ACTION, envelope);
            String requestDump = transport.requestDump;
            responseDump = transport.responseDump;
            Log.e(TAG, requestDump);
            Log.e(TAG, responseDump);
        } catch (IOException e) {
            e.printStackTrace();
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    return responseDump;
}

这就是我找到NAMESPACEWSDLMETHOD_NAMESOAP_ACTION的方式。

  1. NAMESPACE:搜索" targetNamespace"在WSDL中。
  2. WSDL / URL:搜索" soap:address"在WSDL中。位置中的值是URL。
  3. METHOD_NAME:我查看您用于创建请求的参数。它有Amount,CallbackURL,Description,Email,MerchantID和Mobile(无附加数据)。所以我想你正试图打电话给PaymentRequest方法。
  4. SOAP_ACTION:搜索" soapAction"在WSDL中。在比赛中,查找与PaymentRequest相关的比赛。 SOAP_ACTION通常是网址+ some_seperator + METHOD_NAME。在这种情况下,分隔符为#
  5. 所以我找到了提出请求所需的一切。希望它能帮助你。祝你好运。