package com.borntrust.weixin.server.provider.impl;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
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.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject;
import com.borntrust.common.redis.RedisRepository;
import com.borntrust.common.utils.HttpHelper;
import com.borntrust.weixin.server.api.service.IWeixinServer;
import com.borntrust.weixin.server.provider.config.WeixinConfig;
@Service(“weixinServer”)
public class WeixinServerImpl implements IWeixinServer{
@Autowired
private WeixinConfig weixinConfig;
@Autowired
private RedisRepository redisRepository;
//获取access_token
public Map<String,Object> getAccessToken() {
Map<String, Object> map =new HashMap<>();
try {
//获取access_token的连接
String accessTokenUrl =weixinConfig.getAccessTokenUrl()+"&appid="
+weixinConfig.getAppid()+"&secret="+weixinConfig.getSecret();
//获取返回的code
HttpClient httpClient = HttpClientBuilder.create().build();//获取DefaultHttpClient请求
HttpGet httpGet = new HttpGet(accessTokenUrl);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
//向微信发送请求并获取response
String response;
response = httpClient.execute(httpGet,responseHandler);
JSONObject jsonObject = JSONObject.parseObject(response);
String accessToken = jsonObject.getString("access_token");
String expiresIn = jsonObject.getString("expires_in");
String errcode = jsonObject.getString("errcode");
String errmsg = jsonObject.getString("errmsg");
redisRepository.setExpire("ACCESS_TOKEN:accessToken", accessToken, Long.parseLong(expiresIn));
map.put("accessToken", accessToken);
map.put("expiresIn", expiresIn);
map.put("errcode", errcode);
map.put("errmsg", errmsg);
return map;
} catch (ClientProtocolException e) {
return map;
} catch (IOException e) {
return map;
}
}
@Override
public Map<String, Object> getSessionKey(String code) throws Exception{
Map<String, Object> map = new HashMap<>();
map.put("openid", "");
map.put("session_key", "");
if (code != null) {
//获取openid和access_token的连接
String getOpenIdUrl = weixinConfig.getGetOpenIdUrl()
+ "&appid="+weixinConfig.getAppid()
+"&secret="+weixinConfig.getSecret()
+"&js_code="+code
+"&grant_type=authorization_code";
//获取返回的code
HttpClient httpClient = HttpClientBuilder.create().build();//获取DefaultHttpClient请求
HttpGet httpGet = new HttpGet(getOpenIdUrl);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
//向微信发送请求并获取response
String response;
response = httpClient.execute(httpGet,responseHandler);
JSONObject jsonObject = JSONObject.parseObject(response);
String openid = jsonObject.getString("openid");
String session_key = jsonObject.getString("session_key");
map.put("openid", openid);
map.put("session_key", session_key);
}
return map;
}
@Override
public Map<String, Object> sendCustomerMessage(Map<String, Object> map){
String accessToken = redisRepository.get("ACCESS_TOKEN:accessToken");
if (accessToken == null) {
Map<String, Object> accessTokenMap = getAccessToken();
accessToken = (String) accessTokenMap.get("accessToken");
}
String messageUrl =weixinConfig.getMessageUrl()+accessToken;
JSONObject param = new JSONObject();
param.put("touser", map.get("openId"));
param.put("template_id",map.get("templateId"));
param.put("page", map.get("page"));
param.put("form_id",map.get("formId"));
param.put("data", map.get("data"));
//param.put("emphasis_keyword", "keyword2.DATA");
String response = HttpHelper.sendPOST(messageUrl, param.toString());
Map<String, Object> returnMap=new HashMap<>();
JSONObject jsonObject = JSONObject.parseObject(response);
String errcode = jsonObject.getString("errcode");
String errmsg = jsonObject.getString("errmsg");
returnMap.put("errcode", errcode);
returnMap.put("errmsg", errmsg);
return returnMap;
}