2016-09-29 2 views
1

QwintryLogistics API, PHP의 모든 문서 예제로 작업하려합니다. Java에 코딩 한 PHP에 대해서는 전혀 알지 못합니다. 문서에서 필요한 요청은 다음과 같습니다PHP에서 Java로 번역이 필요합니다

<?php 
    define('SITE_URL', 'logistics.qwintry.com'); 
    define('API_KEY', 'YOUR_API_KEY'); //don't forget to set your key! 

    $url = 'http://'. SITE_URL .'/api/cost'; 


    $data = array ( 
     'params' => array(
      'weight' => 5, // in lb 
      'delivery_pickup' => 'msk_1', // full list of pickup points can be retrieved from /api/locations-list 
      'insurance' => true, 
      'items_value' => 500, // declaration items total cost in USD 
      'retail_pricing' => true // retail/wholesale pricing? 
     ), 
    ); 
    $data_string = http_build_query($data); 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer '. API_KEY)); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    $response = curl_exec($ch); 
    curl_close($ch); 
    var_dump($response); 

코딩 자바 방법 :

@Override 
public String getCost(double weight, String unitsW, String toPickUp, boolean insurance, double value) throws URISyntaxException, IOException, HttpException { 
    String url = BASE_URL + "/api/cost/"; 
    CloseableHttpClient client = HttpClients.createDefault(); 
    URIBuilder builder = new URIBuilder(url); 
    builder 
      .addParameter("weight", String.valueOf(weight)) 
      .addParameter("delivery_pickup", toPickUp) 
      .addParameter("insurance", String.valueOf(insurance)) 
      .addParameter("items_value", String.valueOf(value)) 
      .addParameter("retail_pricing", String.valueOf(RETAIL_PRICING)); 

    HttpUriRequest request = new HttpPost(builder.build()); 
    request.addHeader("User-Agent", USER_AGENT); 
    request.addHeader("Authorization", "Bearer " + API_KEY); 

    HttpResponse response = client.execute(request); 

    BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 

    StringBuffer result = new StringBuffer(); 
    String line = ""; 
    while ((line = rd.readLine()) != null) { 
     result.append(line); 
    } 
    return result.toString(); 
} 

그러나 지속적으로 반응을 얻고 :

{"success":false,"errorCode":0,"errorMessage":"params are empty"} 

나는 문제는 요청에 대한 매개 변수를 설정하는 생각합니다. Java 용어로 요청 매개 변수의 구조를 번역 해주세요.

답변

1

PHP 코드 데이터 매개 변수는 경로 매개 변수가 아니지만 매개 변수를 요청합니다. 요청 본문에 URL을 추가하는 대신 작성해야합니다.

당신은 관련된 질문에 작업을 수행하는 방법을 볼 수 있습니다 Java - sending HTTP parameters via POST method easily

그러나, 나는 CXF 또는 Jersey 같은 높은 수준의 REST 서비스 클라이언트에서 보일 것이다.

+0

Unirest 라이브러리를 사용해 주셔서 감사합니다. 밝고 선명하게 보이지만 아직 성공하지는 못했습니다. – zzheads

+0

PHP를 전혀 모르기 때문에 요구 시체 구조가 불분명합니다. String으로 카운터의 배열을 어떻게 만들 수 있습니까? (매개 변수 [weight], 매개 변수 [items_value] ... 등) – zzheads

+0

마침내 그것을 만들었습니다! API 문서에 오류가 있습니다. 일부 매개 변수의 이름이 잘못되었습니다. 이제 모든 것이 작동합니다! – zzheads