gosub, define_keys gosub, get_ISO_country_list gosub, create_a_case gosub, get_template exitapp define_keys: API_key := "API_MAIN_KEY" gateway_url := "/v1/" protocol := "https://" host_URL := "rms-world-check-one-api-pilot.thomsonreuters.com" API_secret := "API_SECRET_KEY" return get_top_lvl_group: base_URL := protocol host_URL gateway_url "groups" GMT_time := % getGMT(-2) ;; -2 hours for London GMT time datatosign := "(request-target): get " gateway_url "groups" "`n" . "host: " host_URL "`n" . "date: " GMT_time " GMT" HMAC := % calculate_HMAC_256_64base(datatosign,API_secret) H_authorisation := "Signature keyId=" Chr(34) API_key Chr(34) "\`,algorithm=" Chr(34) "hmac-sha256" Chr(34) "`,headers=" Chr(34) "(request-target) host date" Chr(34) "`,signature=" Chr(34) HMAC Chr(34) H_date := GMT_time " GMT" WinHTTP := ComObjCreate("WinHTTP.WinHttpRequest.5.1") WinHTTP.Open("GET", base_URL,false) WinHTTP.SetRequestHeader("Date",H_date) WinHTTP.SetRequestHeader("Authorization",H_authorisation) WinHTTP.send() WinHTTP.waitforresponse(5) gosub, msgbox_full_response return ; RESPONSE get_top_lvl_groups /* BODY: STREAM: TEXT: [{"id":"0a3687cf-673a-134c-99f3-522b0000168a","name":"Western Union Business Solutions (USA) LLC - API (T)","parentId":null,"hasChildren":true,"status":"ACTIVE","children":[{"id":"0a3687cf-673a-134c-99f3-5566000016d8","name":"Western Union Business Solutions (USA) LLC - Screening","parentId":"0a3687cf-673a-134c-99f3-522b0000168a","hasChildren":false,"status":"ACTIVE","children":[]}]}] STATUS: 200 STATUS TEXT: OK HEADERS: Cache-Control: no-cache, no-store, max-age=0, must-revalidate Date: Tue, 15 Jan 2019 12:51:20 GMT Pragma: no-cache Transfer-Encoding: chunked Content-Type: application/json;charset=UTF-8 Expires: 0 Server: "" X-Application-Context: application X-XSS-Protection: 1; mode=block X-Frame-Options: DENY X-Content-Type-Options: nosniff */ get_ISO_country_list: base_URL := protocol host_URL gateway_url "reference/countries" GMT_time := % getGMT(-2) datatosign := "(request-target): get " gateway_url "reference/countries" "`n" . "host: " host_URL "`n" . "date: " GMT_time " GMT" HMAC := % calculate_HMAC_256_64base(datatosign,API_secret) H_authorisation := "Signature keyId=" Chr(34) API_key Chr(34) "\`,algorithm=" Chr(34) "hmac-sha256" Chr(34) "`,headers=" Chr(34) "(request-target) host date" Chr(34) "`,signature=" Chr(34) HMAC Chr(34) H_date := GMT_time " GMT" WinHTTP.Open("GET", base_URL,false) WinHTTP.SetRequestHeader("Date",H_date) WinHTTP.SetRequestHeader("Authorization",H_authorisation) WinHTTP.send() WinHTTP.waitforresponse(5) gosub, msgbox_full_response return ; RESPONSE get_country_list /* BODY: STREAM: TEXT: {"ABW":"Aruba","AFG":"Afghanistan","AGO":"Angola","AIA":"Anguilla","ALA":"Åland Islands","ALB":"Albania","AND":"Andorra","ARE":"United Arab Emirates","ARG":"Argentina","ARM":"Armenia","ASM":"American Samoa","ATA":"Antarctica","ATF":"French Southern Territories","ATG":"Antigua and Barbuda","AUS":"Australia","AUT":"Austria","AZE":"Azerbaijan","BDI":"Burundi","BEL":"Belgium","BEN":"Benin","BES":"Bonaire, Sint Eustatius and Saba","BFA":"Burkina Faso","BGD":"Bangladesh","BGR":"Bulgaria","BHR":"Bahrain","BHS":"Bahamas","BIH":"Bosnia and Herzegovina","BLM":"Saint Barthélemy","BLR":"Belarus","BLZ":"Belize","BMU":"Bermuda","BOL":"Bolivia, Plurinational State of","BRA":"Brazil","BRB":"Barbados","BRN":"Brunei Darussalam","BTN":"Bhutan","BVT":"Bouvet Island","BWA":"Botswana","CAF":"Central African Republic","CAN":"Canada","CCK":"Cocos (Keeling) Islands","CHE":"Switzerland","CHL":"Chile","CHN":"China","CIV":"Côte d'Ivoire","CMR":"Cameroon","COD":"Congo, the Democratic Republic of the","COG":"Congo","COK":"Cook Islands","COL":"Colombia","COM":"Comoros","CPV":"Cape Verde","CRI":"Costa Rica","CUB":"Cuba","CUW":"Curaçao","CXR":"Christmas Island","CYM":"Cayman Islands","CYP":"Cyprus","CZE":"Czech Republic","DEU":"Germany","DJI":"Djibouti","DMA":"Dominica","DNK":"Denmark","DOM":"Dominican Republic","DZA":"Algeria","ECU":"Ecuador","EGY":"Egypt","ERI":"Eritrea","ESH":"Western Sahara","ESP":"Spain","EST":"Estonia","ETH":"Ethiopia","FIN":"Finland","FJI":"Fiji","FLK":"Falkland Islands (Malvinas)","FRA":"France","FRO":"Faroe Islands","FSM":"Micronesia, Federated States of","GAB":"Gabon","GBR":"United Kingdom","GEO":"Georgia","GGY":"Guernsey","GHA":"Ghana","GIB":"Gibraltar","GIN":"Guinea","GLP":"Guadeloupe","GMB":"Gambia","GNB":"Guinea-Bissau","GNQ":"Equatorial Guinea","GRC":"Greece","GRD":"Grenada","GRL":"Greenland","GTM":"Guatemala","GUF":"French Guiana","GUM":"Guam","GUY":"Guyana","HKG":"Hong Kong","HMD":"Heard Island and McDonald Mcdonald Islands","HND":"Honduras","HRV":"Croatia","HTI":"Haiti","HUN":"Hungary","IDN":"Indonesia","IMN":"Isle of Man","IND":"India","IOT":"British Indian Ocean Territory","IRL":"Ireland","IRN":"Iran, Islamic Republic of","IRQ":"Iraq","ISL":"Iceland","ISR":"Israel","ITA":"Italy","JAM":"Jamaica","JEY":"Jersey","JOR":"Jordan","JPN":"Japan","KAZ":"Kazakhstan","KEN":"Kenya","KGZ":"Kyrgyzstan","KHM":"Cambodia","KIR":"Kiribati","KNA":"Saint Kitts and Nevis","KOR":"Korea, Republic of","KWT":"Kuwait","LAO":"Lao People's Democratic Republic","LBN":"Lebanon","LBR":"Liberia","LBY":"Libya","LCA":"Saint Lucia","LIE":"Liechtenstein","LKA":"Sri Lanka","LSO":"Lesotho","LTU":"Lithuania","LUX":"Luxembourg","LVA":"Latvia","MAC":"Macao","MAF":"Saint Martin (French part)","MAR":"Morocco","MCO":"Monaco","MDA":"Moldova, Republic of","MDG":"Madagascar","MDV":"Maldives","MEX":"Mexico","MHL":"Marshall Islands","MKD":"Macedonia, the Former Yugoslav Republic of","MLI":"Mali","MLT":"Malta","MMR":"Myanmar","MNE":"Montenegro","MNG":"Mongolia","MNP":"Northern Mariana Islands","MOZ":"Mozambique","MRT":"Mauritania","MSR":"Montserrat","MTQ":"Martinique","MUS":"Mauritius","MWI":"Malawi","MYS":"Malaysia","MYT":"Mayotte","NAM":"Namibia","NCL":"New Caledonia","NER":"Niger","NFK":"Norfolk Island","NGA":"Nigeria","NIC":"Nicaragua","NIU":"Niue","NLD":"Netherlands","NOR":"Norway","NPL":"Nepal","NRU":"Nauru","NZL":"New Zealand","OMN":"Oman","PAK":"Pakistan","PAN":"Panama","PCN":"Pitcairn","PER":"Peru","PHL":"Philippines","PLW":"Palau","PNG":"Papua New Guinea","POL":"Poland","PRI":"Puerto Rico","PRK":"Korea, Democratic People's Republic of","PRT":"Portugal","PRY":"Paraguay","PSE":"Palestine, State of","PYF":"French Polynesia","QAT":"Qatar","REU":"Réunion","ROU":"Romania","RUS":"Russian Federation","RWA":"Rwanda","SAU":"Saudi Arabia","SDN":"Sudan","SEN":"Senegal","SGP":"Singapore","SGS":"South Georgia and the South Sandwich Islands","SHN":"Saint Helena, Ascension and Tristan da Cunha","SJM":"Svalbard and Jan Mayen","SLB":"Solomon Islands","SLE":"Sierra Leone","SLV":"El Salvador","SMR":"San Marino","SOM":"Somalia","SPM":"Saint Pierre and Miquelon","SRB":"Serbia","SSD":"South Sudan","STP":"Sao Tome and Principe","SUR":"Suriname","SVK":"Slovakia","SVN":"Slovenia","SWE":"Sweden","SWZ":"Swaziland","SXM":"Sint Maarten (Dutch part)","SYC":"Seychelles","SYR":"Syrian Arab Republic","TCA":"Turks and Caicos Islands","TCD":"Chad","TGO":"Togo","THA":"Thailand","TJK":"Tajikistan","TKL":"Tokelau","TKM":"Turkmenistan","TLS":"Timor-Leste","TON":"Tonga","TTO":"Trinidad and Tobago","TUN":"Tunisia","TUR":"Turkey","TUV":"Tuvalu","TWN":"Taiwan, Province of China","TZA":"Tanzania, United Republic of","UGA":"Uganda","UKR":"Ukraine","UMI":"United States Minor Outlying Islands","URY":"Uruguay","USA":"United States","UZB":"Uzbekistan","VAT":"Holy See (Vatican City State)","VCT":"Saint Vincent and the Grenadines","VEN":"Venezuela, Bolivarian Republic of","VGB":"Virgin Islands, British","VIR":"Virgin Islands, U.S.","VNM":"Viet Nam","VUT":"Vanuatu","WLF":"Wallis and Futuna","WSM":"Samoa","YEM":"Yemen","ZAF":"South Africa","ZMB":"Zambia","ZWE":"Zimbabwe","ZZZ":"Unknown"} STATUS: 200 STATUS TEXT: OK HEADERS: Cache-Control: no-cache, no-store, max-age=0, must-revalidate Date: Tue, 15 Jan 2019 12:45:21 GMT Pragma: no-cache Transfer-Encoding: chunked Content-Type: application/json;charset=UTF-8 Expires: 0 Server: "" X-Application-Context: application X-XSS-Protection: 1; mode=block X-Frame-Options: DENY X-Content-Type-Options: nosniff */ create_a_case: base_URL := protocol host_URL gateway_url . "cases" GMT_time := % getGMT(-2) body = ( { "secondaryFields": [], "entityType": "INDIVIDUAL", "customFields": [], "groupId":"0a3687cf-673a-134c-99f3-522b0000168a", "providerTypes": [ "WATCHLIST" ], "name": "sangala" } ) ;; or what-ever group ID is retrieved with top_lvl_call datatosign := "(request-target): post " gateway_url "cases`n" . "host: " host_URL "`n" . "date: " GMT_time " GMT`n" . "content-type: application/json`n" . "content-length: " strlen(body) "`n" . body HMAC := % calculate_HMAC_256_64base(datatosign,API_secret) H_authorisation := "Signature keyId=" Chr(34) API_key Chr(34) "\`,algorithm=" Chr(34) "hmac-sha256" Chr(34) "`,headers=" Chr(34) "(request-target) host date content-type content-length" Chr(34) "`,signature=" Chr(34) HMAC Chr(34) H_date := GMT_time " GMT" WinHTTP := ComObjCreate("WinHTTP.WinHttpRequest.5.1") WinHTTP.Open("POST", base_URL,false) WinHTTP.SetRequestHeader("Date",H_date) WinHTTP.SetRequestHeader("Authorization",H_authorisation) WinHTTP.SetRequestHeader("Content-Length",strlen(body)) WinHTTP.SetRequestHeader("Content-Type","application/json") WinHTTP.send(body) WinHTTP.waitforresponse(5) gosub, msgbox_full_response return ; RESPONSE // create_case /* BODY: STREAM: TEXT: STATUS: 415 STATUS TEXT: Unsupported Media Type HEADERS: Date: Tue, 15 Jan 2019 12:45:47 GMT Transfer-Encoding: chunked Server: "" X-Application-Context: application */ get_template: base_URL := protocol host_URL gateway_url "groups/" . "0a3687cf-673a-134c-99f3-522b0000168a" ;; or what-ever group ID is retrieved with top_lvl_call . "/CaseTemplate" GMT_time := % getGMT(-2) datatosign := "(request-target): get " gateway_url "groups/0a3687cf-673a-134c-99f3-522b0000168a/CaseTemplate`n" . "host: " host_URL "`n" . "date: " GMT_time " GMT" HMAC := % calculate_HMAC_256_64base(datatosign,API_secret) DQ := Chr(34) H_authorisation := "Signature keyId=" DQ API_key DQ "\`,algorithm=" DQ "hmac-sha256" DQ "`,headers=" DQ "(request-target) host date" DQ "`,signature=" DQ HMAC DQ H_date := GMT_time " GMT" WinHTTP := ComObjCreate("WinHTTP.WinHttpRequest.5.1") WinHTTP.Open("GET", base_URL,false) WinHTTP.SetRequestHeader("Date",H_date) WinHTTP.SetRequestHeader("Authorization",H_authorisation) WinHTTP.SetRequestHeader("Content-Type","application/x-www-form-urlencoded") WinHTTP.send() WinHTTP.waitforresponse(5) Result := WinHTTP.ResponseText Status := WinHTTP.Status gosub, msgbox_full_response return msgbox_full_response: v1 := WinHTTP.ResponseBody v2 := WinHTTP.ResponseStream v3 := WinHTTP.ResponseText v4 := WinHTTP.Status v5 := WinHTTP.StatusText v6 := WinHTTP.GetAllResponseHeaders msgbox % "BODY: " v1 "`nSTREAM: " v2 "`nTEXT: " v3 "`nSTATUS: " v4 "`nSTATUS TEXT: " v5 "`nHEADERS: " v6 return ; RESPONSE // get_template /* BODY: STREAM: TEXT: [] STATUS: 404 STATUS TEXT: Not Found HEADERS: Cache-Control: no-cache, no-store, max-age=0, must-revalidate Date: Tue, 15 Jan 2019 12:47:51 GMT Pragma: no-cache Transfer-Encoding: chunked Content-Type: application/json;charset=UTF-8 Expires: 0 Server: "" X-Application-Context: application X-XSS-Protection: 1; mode=block X-Frame-Options: DENY X-Content-Type-Options: nosniff */ ;Functions getGMT(deduct) { B_NOW := A_Now B_NOW += deduct,HH B_NOW += +1,seconds ;; because HMAC via powershell and clipboard is slow FormatTime, TimeString, %B_NOW%, ddd, dd MMM yyyy HH:mm:ss r := TimeString return r } calculate_HMAC_256_64base(input,key) { store_clip := clipboard raw_double_quote_ahk = `" raw_double_quote_PS = \" inp := regexreplace(input,"(" raw_double_quote_ahk ")","" raw_double_quote_PS "") ;; submitting script to powershell this way deletes double spaces, hence this regex.. inp := regexreplace(inp,A_Space,"A_SP8CE") clipboard := ps_script= ( $message = '%inp%' $message = $message.replace('A_SP8CE',' ') $secret = '%key%' $hmacsha = New-Object System.Security.Cryptography.HMACSHA256 $hmacsha.key = [Text.Encoding]::ASCII.GetBytes($secret) $signature = $hmacsha.ComputeHash([Text.Encoding]::ASCII.GetBytes($message)) $signature = [Convert]::ToBase64String($signature) | clip ) RunWait, PowerShell.exe %ps_Script%,,hide clipwait,1 r := clipboard r := regexreplace(r,"`n") r := regexreplace(r,"`r") clipboard := store_clip return r }