HttpClient implements mass mailing of Public numbers and httpclient public
1. Implement Functions
Send messages to users who have followed the public account. (It can be a collection of all users or users that provide openid)
2. Basic Steps
Prerequisites:
Authenticated public account or test public account
Message sending steps:
Information about related interfaces can be viewed: http://www.cnblogs.com/0201zcr/p/5866296.html has a test account application + Get access_token and send the message url and related parameter requirements. The meaning of each parameter.
3. Practice
Here, the HttpClient sends a request to the relevant interface.
1) maven dependency
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.3.1</version></dependency>
2) httpClient usage
It is easy to use HttpClient to send requests and receive responses. It generally takes the following steps.
3) instance
1. Request sending class
Import com. alibaba. druid. support. json. JSONUtils; import com. alibaba. druid. support. logging. log; import com. alibaba. druid. support. logging. logFactory; import com. alibaba. fastjson. JSON; import com. alibaba. fastjson. JSONObject; import com. seewo. core. util. json. jsonUtils; import org. apache. commons. collections. map. hashedMap; import org. apache. commons. lang. stringUtils; import org. apache. http. httpHost; import org. apac He. http. nameValuePair; import org. apache. http. client. clientProtocolException; import org. apache. http. client. httpClient; import org. apache. http. client. responseHandler; import org. apache. http. client. methods. httpGet; import org. apache. http. client. methods. httpPost; import org. apache. http. conn. params. connRoutePNames; import org. apache. http. conn. scheme. scheme; import org. apache. http. conn. ssl. SSLSocketFactory; im Port org. apache. http. entity. stringEntity; import org. apache. http. impl. client. basicResponseHandler; import org. apache. http. impl. client. defaultHttpClient; import org. apache. http. impl. conn. poolingClientConnectionManager; import org. apache. http. message. basicNameValuePair; import org. springframework. http. httpHeaders; import org. springframework. http. mediaType; import javax.net. ssl. SSLContext; import javax.net. s Sl. x509TrustManager; import javax. security. cert. certificateException; import javax. security. cert. x509Certificate; import java. io. IOException; import java. text. messageFormat; import java. util. arrayList; import java. util. list; import java. util. map;/*** Created by zhengcanrui on 16/9/20. */public class WechatAPIHander {/*** get token interface */private String getTokenUrl = "https://api.weixin.qq.com/cgi-bin/toke N? Grant_type = client_credential & appid = {0} & secret = {1} ";/*** pull user information interface */private String getUserInfoUrl =" https://api.weixin.qq.com/cgi-bin/user/info? Access_token = {0} & openid = {1} ";/*** push information interface (Group) */private String sendMsgUrl =" https://api.weixin.qq.com/cgi-bin/message/mass/sendall? Access_token = {0} "; private HttpClient webClient; private Log log = LogFactory. getLog (getClass (); public void initWebClient (String proxyHost, int proxyPort) {this. initWebClient (); if (webClient! = Null &&! StringUtils. isEmpty (proxyHost) {HttpHost proxy = new HttpHost (proxyHost, proxyPort); webClient. getParams (). setParameter (ConnRoutePNames. DEFAULT_PROXY, proxy) ;}}/*** @ desc initialize and create WebClient */public void initWebClient () {log.info ("initWebClient start .... "); try {PoolingClientConnectionManager tcm = new PoolingClientConnectionManager (); tcm. setMaxTotal (10); SSLContext ctx = SSLContext. getInstan Ce ("TLS"); X509TrustManager tm = new X509TrustManager () {@ Override public void checkClientTrusted (java. security. cert. x509Certificate [] x509Certificates, String s) throws java. security. cert. certificateException {}@ Override public void checkServerTrusted (java. security. cert. x509Certificate [] x509Certificates, String s) throws java. security. cert. certificateException {}@ Override public java. securi Ty. cert. x509Certificate [] getAcceptedIssuers () {return new java. security. cert. x509Certificate [0] ;}}; ctx. init (null, new X509TrustManager [] {tm}, null); SSLSocketFactory ssf = new SSLSocketFactory (ctx, SSLSocketFactory. ALLOW_ALL_HOSTNAME_VERIFIER); Scheme sch = new Scheme ("https", 443, ssf); tcm. getSchemeRegistry (). register (sch); webClient = new DefaultHttpClient (tcm);} catch (Exception ex ){ Log. error ("initWebClient exception", ex);} finally {log.info ("initWebClient end .... ") ;}}/*** @ desc get authorization token * @ param appid * @ param secret * @ return */public String getAccessToken (String appid, String secret) {String accessToken = null; try {log.info ("getAccessToken start. {appid = "+ appid +", secret: "+ secret +"} "); String url = MessageFormat. format (this. getTokenUrl, appid, secret); S Tring response = executeHttpGet (url); Map map = JsonUtils. jsonToMap (response); accessToken = (String) map. get ("access_token");/* Object = JSONUtils. parse (response); accessToken = jsonObject. getString ("access_token"); * // accessToken = JsonUtils. read (response, "access_token");} catch (Exception e) {log. error ("get access toekn exception", e);} return accessToken;}/*** @ desc push info * @ par Am token * @ param msg * @ return */public String sendMessage (String token, String msg) {try {log.info ("\ n \ nsendMessage start. token: "+ token +", msg: "+ msg); String url = MessageFormat. format (this. sendMsgUrl, token); HttpPost post = new HttpPost (url); ResponseHandler <?> ResponseHandler = new BasicResponseHandler (); // The data in json format must be valid. For the meaning of each field, see the preceding connection description, the test after content is the data to be sent to the user. Here, it is sent to all people in a group msg = "{\" filter \ ": {\" is_to_all \ ": true }, \ "text \": {\ "content \": \ "test \" },\ "msgtype \": \ "text \"}\""; // set the message sending parameter StringEntity entity = new StringEntity (msg); // solve the Chinese garbled problem entity. setContentEncoding ("UTF-8"); entity. setContentType ("application/json"); post. setEntity (entity); // sends the request St Ring response = (String) this.webClient.exe cute (post, responseHandler); log.info ("return response ==== start ===="); log.info (response ); log.info ("return response ==== end ===="); return response;} catch (Exception e) {log. error ("get user info exception", e); return null ;}} /*** @ desc initiate an http get request to return data * @ param url * @ return * @ throws IOException * @ throws ClientProtocolException */private Str Ing executeHttpGet (String url) throws IOException, ClientProtocolException {ResponseHandler <?> ResponseHandler = new BasicResponseHandler (); String response = (String) this.webClient.exe cute (new HttpGet (url), responseHandler ); log.info ("return response ==== start ===="); log.info (response ); log.info ("return response ==== end ===="); return response ;}}
2. Controller and Service layer call
@ RequestMapping (value = "/testHttpClient", method = RequestMethod. GET) public DataMap test () {WechatAPIHander wechatAPIHander = new WechatAPIHander (); // GET access_token
// The first parameter is your appid, and the second parameter is your key. You need to change the String accessToken = wechatAPIHander according to your actual situation. getAccessToken ("appid", "scerpt"); // send the wechatAPIHander message. sendMessage (accessToken, "Test Data"); return new DataMap (). addAttribute ("DATA", accessToken );}
3. Results
If you have followed the public account to see the test message you just sent.
HttpClient document: https://pan.baidu.com/s/1miO1eOg
Thank you! Thank you for reading this article.