I have a problem accessing the World-check-one API. Please help me. The same request parameter, i...

...n which the name parameter is Chinese, returns 401 Unauthorized, the name can be changed to English after the normal request.

您好,我在访问World-check-one API时遇到问题。请帮我。name参数为Chinese的相同请求参数返回401 Unauthorized,正常请求后名称可以更改为英文。以下是DEMO根据您的官方API实施的测试类

postrequest.txt

// A simple request to create a Case using Http Post
public static void main(String[] args) throws Exception {
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
Date now = new Date();

//format for date string Mon, 27 Mar 2017 15:19:36 GMT
DateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z",Locale.ENGLISH);
df.setTimeZone(TimeZone.getTimeZone("GMT"));

String date = df.format(now);
String gatewayurl = "/v1/";
String gatewayhost = "rms-world-check-one-api-pilot.thomsonreuters.com";
String apikey = "xxxxx";
String apisecret = "xxx";
String groupid = "0a3687d0-6a26-186f-9a9b-af9100000a4b";
//create a JSON string
String jsonBody = "{\"secondaryFields\":[{\"typeId\":\"SFCT_1\",\"value\":\"FEMALE\"},{\"dateTimeValue\":\"1946-09-14\",\"typeId\":\"SFCT_2\"},{\"typeId\":\"SFCT_5\",\"value\":\"CHN\"}],\"entityType\":\"INDIVIDUAL\",\"groupId\":\"0a3687d0-6a26-186f-9a9b-af9100000a4b\",\"providerTypes\":[\"WATCHLIST\"],\"name\":\"杨秀珠\"}";

// create a JSON object from the JSON string
JSONObject jo = new JSONObject(jsonBody);
//System.out.println(jo.toString());
String jlen = String.valueOf(jo.toString().length());
String dataToSign = "(request-target): post " + gatewayurl + "cases/screeningRequest\n" +
"host: " + gatewayhost + "\n" +
"date: " + date + "\n" +
"content-type: " + "application/json" +"\n" +
"content-length: " + jlen + "\n" +
jo;
String hmac = generateAuthHeader(dataToSign, apisecret);
String authorisation = "Signature keyId=\"" + apikey + "\",algorithm=\"hmac-sha256\",headers=\"(request-target) host date content-type content-length\",signature=\"" + hmac + "\"";
System.out.println(jlen);
System.out.println(dataToSign);
//System.out.println(hmac);
System.out.println(authorisation);
String msg = jsonBody.toString();

HttpPost httpPost = new HttpPost("https://rms-world-check-one-api-pilot.thomsonreuters.com/v1/cases/screeningRequest");
HttpEntity entity = new StringEntity(msg);
httpPost.setEntity(entity);
httpPost.addHeader("Date", date);
httpPost.addHeader("Cache-Control", "no-cache");
httpPost.addHeader("Content-Type", "application/json" );
httpPost.addHeader("Authorization", authorisation);
// send the POST request
CloseableHttpResponse response1 = httpclient.execute(httpPost);
try {
HttpEntity entity1 = response1.getEntity();
System.out.println(response1.getStatusLine());
String json = EntityUtils.toString(response1.getEntity());
//System.out.println(entity1);
// json string returned
System.out.println(json);
ObjectMapper mapper = new ObjectMapper();
// printout in Pretty format
Object jsonObj = mapper.readValue(json, Object.class);
String indented = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonObj);
System.out.println(indented);
EntityUtils.consume(entity1);
}
finally {
response1.close();
}
} finally {
httpclient.close();
}
}

Best Answer

  • Chris.Lee1
    Chris.Lee1 LSEG
    Answer ✓

    Hi @wangguoqing,

    please reference below:

    function generateAuthHeader(dataToSign){
    var hash = CryptoJS.HmacSHA256(dataToSign,environment["api-secret"]);
    return hash.toString(CryptoJS.enc.Base64);
    }
    function isEnvValuePopulated(envVal) {
    if (_.isEmpty(pm.environment.get(envVal))) {
    pm.environment.set(envVal, "--REQUIRED-VALUE-MISSING--");
    return false;
    } else {
    return true;
    }
    }
    isEnvValuePopulated("group-id");
    var date = new Date().toGMTString();
    var content = request.data;
    content = content.replace("{{group-id}}", environment["group-id"]);
    var contentLength = unescape(encodeURIComponent(content)).length;
    var dataToSign = "(request-target): post " + environment["gateway-url"] + "cases\n" +
    "host: " + environment["gateway-host"] + "\n" +
    "date: " + date + "\n" +
    "content-type: " + environment["content"] +"\n" +
    "content-length: " + contentLength + "\n" +
    content;
    var hmac = generateAuthHeader(dataToSign);
    var authorisation = "Signature keyId=\"" + environment["api-key"] + "\",algorithm=\"hmac-sha256\",headers=\"(request-target) host date content-type content-length\",signature=\"" + hmac + "\"";
    postman.setEnvironmentVariable("authorisation",authorisation);
    postman.setEnvironmentVariable("currentDate",date);
    postman.setEnvironmentVariable("contentLength",contentLength);

Answers

  • @wangguoqing,

    Thank you for your query.

    Can you please let us know if you are enconding the request payload with UTF-8 encoding? If not, please use UTF-8 encoding for the request body. After the UTF-8 encoding, you should not get Error 401 for foreign character.

    If you face the issue after UTF-8 encoding, please share the request and the response headers of the failed request along with the request body to investigate further.

    Hope this helps.

  • Hi Prabhjyot.Mandla
    Hello, I've tried UTF-8 encoding for requests, but I still can't. Can you fill in what you think is the correct code in the Java sample given above?

  • Hi Prabhjyot.Mandla
    Can you provide an example of World Check One API Java code that can use Chinese names as request parameters?

  • @wangguoqing,

    Can you please refer to this link?

    Do let us know if this helps.

  • Hi Prabhjyot.Mandla Thanks a lo. I'll try.