• 首页
  • 栏目
  • CRM
  • Java连接Dynamics 365 CRM并请求数据,通过Oauth2.0认证

Java连接Dynamics 365 CRM并请求数据,通过Oauth2.0认证

  • 2021-12-15
  • Admin
  1. import com.microsoft.aad.adal4j.AuthenticationResult;
  2. import com.microsoft.aad.adal4j.AuthenticationContext;
  3. import io.vertx.core.json.JsonObject;
  4. import netscape.javascript.JSObject;
  5. import org.apache.http.HttpResponse;
  6. import org.apache.http.client.HttpClient;
  7. import org.apache.http.client.methods.HttpPost;
  8. import org.apache.http.entity.StringEntity;
  9. import org.apache.http.impl.client.DefaultHttpClient;
  10. import org.apache.http.protocol.HTTP;
  11. import org.apache.http.util.EntityUtils;
  12. import org.apache.olingo.client.api.ODataClient;
  13. import org.apache.olingo.client.api.ODataClientBuilder;
  14. import org.apache.olingo.client.api.domain.ClientEntity;
  15. import org.apache.olingo.client.api.domain.ClientEntitySet;
  16. import org.apache.olingo.client.api.domain.ClientProperty;
  17. import org.apache.olingo.client.core.ODataClientFactory;
  18. import org.apache.olingo.client.core.http.HttpPatch;
  19. import org.apache.olingo.commons.api.format.ContentType;
  20. import org.springframework.security.oauth2.client.DefaultOAuth2ClientContext;
  21. import org.springframework.security.oauth2.client.OAuth2ClientContext;
  22. import org.springframework.security.oauth2.client.OAuth2RestTemplate;
  23. import org.springframework.security.oauth2.client.token.AccessTokenRequest;
  24. import org.springframework.security.oauth2.client.token.DefaultAccessTokenRequest;
  25. import org.springframework.security.oauth2.client.token.grant.password.ResourceOwnerPasswordResourceDetails;
  26. import org.springframework.security.oauth2.common.OAuth2AccessToken;
  27. import java.io.*;
  28. import java.net.HttpURLConnection;
  29. import java.net.MalformedURLException;
  30. import java.net.URL;
  31. import java.net.URLEncoder;
  32. import java.nio.charset.StandardCharsets;
  33. import java.util.Arrays;
  34. import java.util.HashMap;
  35. import java.util.List;
  36. import java.util.Map;
  37. import java.util.concurrent.*;
  38. import java.util.zip.GZIPInputStream;
  39. public class demo {
  40. private HttpURLConnection urlConnection =null;
  41. public demo()
  42. {
  43. }
  44. public static void main(String[] args) throws Exception {
  45. System.out.println("Hello World!");
  46. String _token = GetDynamics365Token();// getToken().getAccessToken().toString();
  47. System.out.println(_token);
  48. //String ret = GetAccount(_token);
  49. // testcreateContact(_token);
  50. // testGetContact(_token);
  51. testupdateContact(_token);
  52. }
  53. private static void testupdateContact(String _token)
  54. {
  55. String api = APIUrl+"procontacts"+"(1948d283-a404-ec11-b6e6-000d3aa2e3d2)";
  56. JsonObject json = new JsonObject();
  57. json.put("name","tested by JAVA API(Data patch)");
  58. json.put("phone","18824158458_patch");
  59. json.put("email","7874108@qq.com_patch");
  60. json.put("fullname","fullname test of java call api");
  61. json.put("contactid@odata.bind","/contacts(40a42e1b-9900-ec11-94ef-00224858241d)");
  62. //String b = HttpUtil.doPostToJson(api,json.toString(),_token,"Patch");
  63. String b = HttpPatch(api,_token,json);
  64. if(String.valueOf(b).contains("No-Content"))
  65. {
  66. System.out.println("Updated.");
  67. }
  68. }
  69. /**
  70. * patch请求
  71. *author:fantabulous24
  72. * @date 2020年7月9日 下午3:24:50
  73. */
  74. public static String HttpPatch(String url,String _token,JsonObject json) {
  75. String resultObj = null;
  76. HttpClient httpClient = new DefaultHttpClient();
  77. HttpPatch httpPatch = new HttpPatch(url);
  78. httpPatch.setHeader("Content-type", "application/json");
  79. httpPatch.setHeader("Charset", HTTP.UTF_8);
  80. httpPatch.setHeader("Accept", "application/json");
  81. httpPatch.setHeader("Accept-Charset", HTTP.UTF_8);
  82. httpPatch.setHeader("Authorization","Bearer "+_token);
  83. try {
  84. StringEntity entity=null;
  85. if(json !=null)
  86. {
  87. entity = new StringEntity(json.toString(),StandardCharsets.UTF_8);
  88. }
  89. else
  90. {
  91. return "";
  92. }
  93. httpPatch.setEntity(entity);
  94. HttpResponse response = httpClient.execute(httpPatch);
  95. resultObj = response.toString();
  96. } catch (IOException e) {
  97. e.printStackTrace();
  98. }
  99. return resultObj;
  100. }
  101. private static void testcreateContact(String _token) throws Exception {
  102. String api = APIUrl+"procontacts";
  103. JsonObject json = new JsonObject();
  104. json.put("name","tested by JAVA API");
  105. json.put("phone","18824158458");
  106. json.put("email","7874108@qq.com");
  107. String a = HttpUtil.doPostToJson(api,json.toString(),_token,"POST");
  108. if(a=="")
  109. {
  110. System.out.println("Created!");
  111. }
  112. }
  113. private static void testGetContact(String token) throws Exception {
  114. String ret = null;
  115. String queryurl = APIUrl + "procontacts?$select=procontactid,email,phone,name,createdon&$top=3";
  116. ret = HttpUtil.doPostToJson(queryurl,null,token,"GET");
  117. System.out.println(ret);
  118. }
  119. private static String GetAccount(String token) throws Exception {
  120. String ret =null;
  121. HttpURLConnection connection =null;
  122. String queryurl = APIUrl+ "accounts?$select=accountid,accountnumber,createdon,telephone1&$top=3";
  123. URL url = new URL(queryurl);
  124. connection = buildConnection(url,token,"GET");
  125. int res = connection.getResponseCode();
  126. if(res==200)
  127. {
  128. ClientEntitySet odataEntitySet = GetConnectionResult(connection);
  129. for (ClientEntity odataEntity: odataEntitySet.getEntities())
  130. {
  131. for (ClientProperty curProperty: odataEntity.getProperties())
  132. {
  133. String propertyContent = curProperty.getName()+":"+curProperty.getValue().toString();
  134. ret += propertyContent +"\n";
  135. System.out.println(propertyContent);
  136. }
  137. }
  138. }
  139. return ret;
  140. }
  141. private static ClientEntitySet GetConnectionResult(HttpURLConnection conn) throws Exception {
  142. ODataClient client = ODataClientFactory.getClient();
  143. String jsonObject =null;
  144. if("gzip".equals(conn.getContentEncoding()))
  145. {
  146. Reader reader = new InputStreamReader(new GZIPInputStream(conn.getInputStream()));
  147. String jsonRawOutput ="";
  148. while (true)
  149. {
  150. int ch = reader.read();
  151. if(ch==1)
  152. {
  153. break;
  154. }
  155. jsonRawOutput += (char)ch;
  156. }
  157. jsonObject = jsonRawOutput;
  158. }
  159. else
  160. {
  161. BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
  162. String jsonoutput ="";
  163. while (true)
  164. {
  165. int ch = in.read();
  166. if(ch==-1)
  167. {
  168. break;
  169. }
  170. jsonoutput += (char)ch;
  171. }
  172. jsonObject = jsonoutput;
  173. }
  174. InputStream inputStream = new ByteArrayInputStream(jsonObject.getBytes(StandardCharsets.UTF_8));
  175. return client.getReader().readEntitySet(inputStream, ContentType.APPLICATION_JSON);
  176. }
  177. private static HttpURLConnection buildConnection( URL _url,String _token,String _RequestMethod ) throws Exception {
  178. if(_RequestMethod.trim()=="")
  179. {
  180. return null;
  181. }
  182. HttpURLConnection _connect = (HttpURLConnection) _url.openConnection();
  183. _connect.setRequestMethod(_RequestMethod);
  184. _connect.setRequestProperty("OData-MaxVersion","4.0");
  185. _connect.setRequestProperty("OData-Version","4.0");
  186. _connect.setRequestProperty("Accept","application/json");
  187. _connect.setRequestProperty("Content-Type","application/json");
  188. _connect.setRequestProperty("Prefer","odata.include-annotations=OData.Community.Display.V1.FormattedValue");
  189. // _connect.setRequestProperty("Prefer","odata.include-annotations=\\\"Microsoft.Dynamics.CRM.fetchxmlpagingcookie\\");
  190. _connect.setRequestProperty("Authorization","Bearer "+_token);
  191. _connect.connect();
  192. return _connect;
  193. }
  194. private static String tokenUrl = "https://login.microsoftonline.com/common/oauth2/token";
  195. private static String resource = "https://url.crm5.dynamics.com";
  196. private static String clientId ="xxxxxxx-e055-4f71-b3c0-xxxxxxxf3";
  197. private static String username = "youraccount of CLOUD.onmicrosoft.com";
  198. private static String password = "pwd";
  199. private static String APIUrl = "https://youraddress.crm5.dynamics.com/api/data/v9.0/";
  200. private static AuthenticationResult getToken() {
  201. AuthenticationResult token = null;
  202. AuthenticationContext context = null;
  203. ExecutorService service = null;
  204. try

联系站长

QQ:769220720

Copyright © SibooSoft All right reserved 津ICP备19011444号