2016-11-09 47 views
-1

我有一個用於在代碼中調用的URL我應該用代碼中的Ksoap2庫調用它。如何獲得NAMESPACE,SOAP_ACTION,URL和METHOD_NAME在android中調用SOAP請求

我的代碼是在下面,

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,"[email protected]"); 
request.addProperty(HoldPayment.MerchantID,"e579752a-a591-11e6-9304-000c295eb8fc"); 
request.addProperty(HoldPayment.Mobile,"09"); 
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和網址在我的代碼。

+0

查看本教程http://www.compiletimeerror.com/2013/09/accessing-web-service-from-android.html#.WCLwUmr5jcs –

+0

參考http://stackoverflow.com/questions/297586/how- to-call-a-soap-web-service-on-android – sasikumar

回答

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,"[email protected]"); 
     request.addProperty(HoldPayment.MerchantID,"e579752a-a591-11e6-9304-000c295eb8fc"); 
     request.addProperty(HoldPayment.Mobile,"09"); 

     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:在WSDL中搜索「targetNamespace」。
  2. WSDL/URL:在WSDL中搜索「soap:address」。位置中的值是URL。
  3. METHOD_NAME:我看看您用來創建請求的參數。它有金額,CallbackURL,說明,電子郵件,商戶ID和移動(沒有AdditionalData)。所以我想你是想撥打PaymentRequest方法。
  4. SOAP_ACTION:在WSDL中搜索「soapAction」。在比賽中,查找與PaymentRequest相關的一個。 SOAP_ACTION通常是URL + some_seperator + METHOD_NAME。這種情況下的分離器是#

所以我發現,被要求提出請求的一切。希望它對你有所幫助。祝你好運。

+0

@K Neeraj LaI你能告訴我你是如何得到NAMESPACE,WSDL,METHOD_NAME和SOAP_ACTION的嗎? – zohreh

+0

@zohreh檢查編輯。添加了一些解釋。 –

+0

謝謝 @K Neeraj LaI – zohreh

相關問題