一、材料
微信公众平台:https://mp.weixin.qq.com/
微信开发文档:https://mp.weixin.qq.com/wiki/home/
二、准备
1.使用测试号,企业号需要申请有接口权限等问题,开发者可以使用测试账号。
三、开发
1.创建一个web工程
2.新建web.xml
<?xml version="1.0"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<welcome-file-list>
<welcome-file>/WelcomeServlet</welcome-file>
<welcome-file>/WelcomeServlet</welcome-file>
</welcome-file-list>
<!-- PC登录 -->
<servlet>
<servlet-name>WelcomeServlet</servlet-name>
<servlet-class>com.kakasys.servlet.WelcomeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WelcomeServlet</servlet-name>
<url-pattern>/WelcomeServlet</url-pattern>
</servlet-mapping>
<!-- 微信登录 -->
<servlet>
<servlet-name>WeChatServlet</servlet-name>
<servlet-class>com.kakasys.servlet.WeChatServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WeChatServlet</servlet-name>
<url-pattern>/WeChatServlet</url-pattern>
</servlet-mapping>
</web-app>
3.新建 servlet , WelcomeServlet pc 端返回二维码显示到登录首页、 WeChatServlet微信登录校验。
package com.kakasys.servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.kakasys.utils.QRcodeUtil;
import sun.misc.BASE64Encoder;
public class WelcomeServlet extends HttpServlet {
/**@description 描述:pc 端返回二维码显示到登录首页
* @date 创建时间:2017年4月13日 下午6:52:53?
* @author? 作者 : 周壮
*/
private static final long serialVersionUID = 1L;
private static Log log = LogFactory.getLog(WelcomeServlet.class);
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
System.out.println("enter WelcomeServlet...");
String imgpath = "/img/qrcode/";
int wechatid = (int)(Math.random()*100000000);
System.out.println("===============================发发发===========wechatid" + wechatid);
String ewm_str = "http://192.168.2.73:8080/MyServlet/WeChatServlet?id=" + wechatid;
File file =new File(imgpath);
//如果文件夹不存在则创建
if (!file.exists() && !file.isDirectory()){
file.mkdir();
file.getParentFile().mkdirs();
}
System.out.println("WelcomeServlet qrcode " + ewm_str);
QRcodeUtil.keygenQRcode(imgpath + File.separator + wechatid + ".png", ewm_str, 250, 250);
byte[] data = null;
System.out.println("WelcomeServlet qrcode " + data);
// 获取生产的二维码图片
// 读取图片字节数组
try {
InputStream in = new FileInputStream(imgpath + File.separator + wechatid + ".png");
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
// 对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
System.out.println("WelcomeServlet qrcode " + data);
String qrcode = encoder.encode(data);// 返回Base64编码过的字节数组字符串
System.out.println("WelcomeServlet qrcode " + qrcode);
PrintWriter out = response.getWriter();
try {
try {
// Write some content
out.println("<html>");
out.println("<head>");
out.println("<title>登录</title>");
out.println("</head>");
out.println("<body>");
//二维码
out.println("<h1><center>欢迎登录</center></h1>");
out.println("<center><img style=\"width : 30% \"; src=\"data:image/png;base64,"+qrcode+"\"/></center>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
} catch (Exception e) {
System.out.println("WelcomeServlet getCode Exception " + e);
}
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//Do some other work
}
@Override
public String getServletInfo() {
return "WelcomeServlet";
}
}
4.微信登录校验
package com.kakasys.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.kakasys.utils.WxApi;
public class WeChatServlet extends HttpServlet {
/**@description 描述:微信登录校验
* @date 创建时间:2017年4月13日 下午6:53:05?
* @author? 作者 : 周壮
*/
private static final long serialVersionUID = 1L;
private static Log log = LogFactory.getLog(WeChatServlet.class);
//测试账号
protected final static String AppID = "wx8d9ed8df25ea8861";
protected final static String AppSecret = "f9064434b33ec786a6e8fe8ea79f8430";
protected final static String host = "http://192.168.2.73:8080/MyServlet";
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
log.debug("enter WeChatServlet...");
WxApi wechat = new WxApi();
String id = request.getParameter("id");
String code = request.getParameter("code");
PrintWriter out = response.getWriter();
if (null == code || "" == code) {
try {
String redirect_uri = host + "/WeChatServlet?id=" + id;
//redirect_uri = URLEncoder.encode(redirect_uri, "UTF-8");
StringBuffer url = new StringBuffer();
url.append("https://open.weixin.qq.com/connect/oauth2/authorize?appid=");
url.append(AppID);
url.append("&redirect_uri=");
url.append(redirect_uri);
url.append("&response_type=code&scope=snsapi_base&state=1#wechat_redirect");
log.debug("url: " + url);
response.sendRedirect(url.toString());
} catch (Exception e) {
log.debug("WeChatServlet getCode Exception " + e);
try {
// Write some content
// Write some content
out.println("<html>");
out.println("<head>");
out.println("<title>登录异常</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1><center>登录异常" + e + "</center></h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
} else {
try {
String openid = wechat.getOpenId(code);
log.debug("openid: " + openid);
try {
// Write some content
out.println("<html>");
out.println("<head>");
out.println("<title>登录成功</title>");
out.println("</head>");
out.println("<body>");
out.println("<br><br><h1><center>登录成功</center></h1><br>");
out.println("<h1><center>你的openid是" + openid + "</center></h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
} catch (Exception e) {
log.debug("WeChatServlet getCode Exception " + e);
try {
// Write some content
out.println("<html>");
out.println("<head>");
out.println("<title>登录异常</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1><center>登录异常" + e + "</center></h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
}
}
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
//Do some other work
}
@Override
public String getServletInfo() {
return "WeChatServlet";
}
}
5.工具类 HttpUtil.class 、 QRcodeUtil.class 、 WxAccessToken.class 、 WxApi.class
package com.kakasys.utils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import okhttp3.Headers;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class HttpUtil {
public static final String UTF8 = "UTF-8";
public static final String GBK = "GBK";
public static final String GB2312 = "GB2312";
public static final String ISO8859_1 = "ISO8859-1";
public static final String user_agent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36";
public static final String user_agent_wechat = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36";
public static int connectTimeout = 60;
public static int readTimeout = 30;
public static int writeTimeout = 60;
private static final Log log = LogFactory.getLog(HttpUtil.class);
protected static OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(connectTimeout, TimeUnit.SECONDS).readTimeout(readTimeout, TimeUnit.SECONDS)
.writeTimeout(writeTimeout, TimeUnit.SECONDS).build();
public Object post(String url, Map<String, String> params, String charset) {
log.info("post "+url+" starting...");
HttpClient httpclient = null;
HttpPost post = null;
String responseText = "";
try {
httpclient = new DefaultHttpClient();
post = new HttpPost(url);
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(getParams(params));
post.setEntity(entity);
log.info("httpclient executing...");
HttpResponse response = httpclient.execute(post);
log.info("httpclient executed.");
int status = response.getStatusLine().getStatusCode();
log.info(">>>HttpStatus:" + status);
if (status == HttpStatus.SC_OK) {
responseText = EntityUtils.toString(response.getEntity(), UTF8);
} else {
System.out.println("执行检测业务信息失败,网络错误或配置文件出错.");
}
log.info("==========================post "+url+" over==================================");
} catch (Exception e) {
log.error("request "+url+" exception!!!", e);
} finally {
if (post != null)
post.abort();
if (httpclient != null)
httpclient.getConnectionManager().shutdown();
}
return responseText;
}
/**
* 参数转换,将map转为list中存放NameValuePair
* @param map
* @return 转换完毕的
*/
private List<NameValuePair> getParams(Map<String,String> map){
List<NameValuePair> param = new ArrayList<NameValuePair>();
for(String key:map.keySet()) {
param.add(new BasicNameValuePair("dateparam", map.get(key)));
}
return param;
}
public static String post(String string, String params, Object charset) {
// TODO Auto-generated method stub
return null;
}
public static String get(String url, Map<String, String> headers) {
String responseBody = "";
try {
Request.Builder reqBuild = new Request.Builder();
if (headers != null) {
headers.put("User-Agent", user_agent);
reqBuild.headers(Headers.of(headers));
} else {
reqBuild.addHeader("User-Agent", user_agent);
}
Request request = reqBuild.url(url).build();
Response response = client.newCall(request).execute();
responseBody = response.body().string();
log.info("responseBody" + responseBody);
response.close();
} catch (IOException e) {
log.error("", e);
}
return responseBody;
}
public static String postSSL(String url, String string, String cert, String certpassword) {
// TODO Auto-generated method stub
return null;
}
}
package com.kakasys.utils;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import javax.imageio.ImageIO;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.Result;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.kakasys.common.CreateID;
/***
* 二维码生成工具类
*
*/
public class QRcodeUtil {
private static final Log LOG = LogFactory.getLog(QRcodeUtil.class);
private static final String SUFFIX = "png";// 后缀
private static final String FILE_TYPE = "png";
public QRcodeUtil() {
}
/***
* 生成单个二维码
*
* @param filePath
* 文件路径
* @param content
* 二维码内容
* @param hints
* 生成条件的设置
* @param width
* 宽
* @param heigh
* 高度
*/
public static void keygenQRcode(String filePath, String content,int width,int heigh) {
try {
MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
Map hints = new Hashtable();
//将二维码容错率设置为最高
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
//设置二维码边界大小为1
hints.put(EncodeHintType.MARGIN, 1);
//设置二维码字符集为UTF-8
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
if (content != null && content.length() > 0) {
BitMatrix bitMatrix = multiFormatWriter.encode(content,
BarcodeFormat.QR_CODE, width, heigh, hints);
BitMatrix noWhiteBitMatrix = deleteWhite(bitMatrix);
File drFile = new File(filePath);
MatrixToImageWriter.writeToFile(noWhiteBitMatrix, FILE_TYPE, drFile);
}
} catch (WriterException e) {
LOG.error("keygenQRcode writer file error",e);
} catch (IOException e) {
LOG.error("keygenQRcode IO error",e);
}
}
/***
* 二维码去白边
* @param matrix
* @return
*/
public static BitMatrix deleteWhite(BitMatrix matrix){
int[] rec = matrix.getEnclosingRectangle();
int resWidth = rec[2] + 1;
int resHeight = rec[3] + 1;
BitMatrix resMatrix = new BitMatrix(resWidth, resHeight);
resMatrix.clear();
for (int i = 0; i < resWidth; i++) {
for (int j = 0; j < resHeight; j++) {
if (matrix.get(i + rec[0], j + rec[1]))
resMatrix.set(i, j);
}
}
return resMatrix;
}
public String addleft(String val, int len)
{
for(; val.length() < len; val = (new StringBuilder("#")).append(val).toString());
return val;
}
@SuppressWarnings({ "unused", "unchecked", "rawtypes" })
private static String keygenQRencode(String path) {
String text = "";
try {
MultiFormatReader formatReader = new MultiFormatReader();
File file = new File(path);
BufferedImage image = ImageIO.read(file);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
//定义二维码的参数
HashMap hints = new HashMap();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
Result result = formatReader.decode(binaryBitmap,hints);
text = result.getText();
LOG.debug(text);
} catch (Exception e) {
e.printStackTrace();
}
return text;
}
public static void main(String[] args){
String imgpath = "/img/qrcode/";
String wechatid = CreateID.I().CreateCheckID("hs_wechat");
System.out.println("=================================================wechatid" + wechatid);
String ewm_str = "https://oa.kakasys.com:8443/?id=" + wechatid;
QRcodeUtil.keygenQRcode(imgpath + File.separator + wechatid + ".png", ewm_str, 250, 250);
}
}
package com.kakasys.utils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.kakasys.common.Param;
import net.sf.json.JSONObject;
public class WxAccessToken {
private static Log log = LogFactory.getLog(WxAccessToken.class);
protected final static String AppID = Param.getValue("WX", "AppID");
protected final static String AppSecret = Param.getValue("WX", "AppSecret");
/**
* 获取access_token 不能再同一个类中调用被注解缓存了的方法
*/
public static String getAccess_token() {
StringBuffer url = new StringBuffer();
url.append("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=").append(AppID);
url.append("&secret=").append(AppSecret);
log.debug("微信公众号请求信息:" + url.toString());
String resp_str = HttpUtil.get(url.toString(), null);
log.debug("微信公众号返回信息:" + resp_str);
return JSONObject.fromObject(resp_str) == null ? "" : JSONObject.fromObject(resp_str).getString("access_token");
}
public static String getTicket() {
String ticket = null;
String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + getAccess_token()
+ "&type=jsapi";// 这个url链接和参数不能变
String message = HttpUtil.get(url.toString(), null);
JSONObject demoJson = JSONObject.fromObject(message);
log.debug("微信公众号返回信息:" + demoJson);
ticket = demoJson.getString("ticket");
return ticket;
}
}
package com.kakasys.utils;
import java.io.UnsupportedEncodingException;
import java.util.Set;
import java.util.UUID;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.kakasys.common.Param;
import net.sf.json.JSONObject;
/**
* 微信api
*
* @author zwx
*
*/
public class WxApi {
private static Log log = LogFactory.getLog(WxApi.class);
protected final static String AppID = "wx8d9ed8df25ea8861";
protected final static String AppSecret = "f9064434b33ec786a6e8fe8ea79f8430";
/**
* 获取隐形授权的code
*
* @throws UnsupportedEncodingException
*/
public String getCode() throws UnsupportedEncodingException {
String redirect_uri = "http://192.168.2.73:8080/IBank/wechat/wechatlogin.do?id=123";
//redirect_uri = URLEncoder.encode(redirect_uri, "UTF-8");
StringBuffer url = new StringBuffer();
url.append("https://open.weixin.qq.com/connect/oauth2/authorize?appid=");
url.append(AppID);
url.append("&redirect_uri=");
url.append(redirect_uri);
url.append("&response_type=code&scope=snsapi_base&state=123#wechat_redirect");
log.debug("url: " + url);
return url.toString();
}
/**
* 微信隐形授权返回code,使用code去查询openid
*
* @param code
* @return
*/
public String getOpenId(String code) {
// 1.通过code换取网页授权access_token
StringBuffer url = new StringBuffer();
url.append("https://api.weixin.qq.com/sns/oauth2/access_token?appid=").append(AppID);
url.append("&secret=").append(AppSecret);
url.append("&code=").append(code);
url.append("&grant_type=authorization_code");
String resp_str = HttpUtil.get(url.toString(), null);
log.debug("网页授权获取code微信公众号返回信:" + resp_str);
JSONObject codeResp = JSONObject.fromObject(resp_str);
String openid = codeResp.optString("openid", "");
return openid;
}
/**
* 判断用户是否关注
*
* @param openId
* @return true :关注�? false 没关�?
*/
public boolean IsConcern(String openId) {
// 判断用户是否关注公众�? subscribe:0表示你还没关注这个公众号�?1表示你已经关注了
StringBuffer url = new StringBuffer();
url.append("https://api.weixin.qq.com/cgi-bin/user/info?access_token=").append(WxAccessToken.getAccess_token());
url.append("&openid=").append(openId).append("&lang=zh_CN");
String resp_str = HttpUtil.get(url.toString(), null);
log.debug("网页授权获取是否关注公众号微信公众号返回信息:" + resp_str);
int subscribe = JSONObject.fromObject(resp_str).getInt("subscribe");
return 0 != subscribe;
}
/**
* 获取常用服务器ip地址
*/
public void getIpList() {
StringBuffer url = new StringBuffer();
url.append("https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=");
url.append(WxAccessToken.getAccess_token());
String resp_str = HttpUtil.get(url.toString(), null);
log.debug("微信公众号返回信�?:" + resp_str);
}
public void deleteMenu() {
// https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN
StringBuffer url = new StringBuffer();
url.append("https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=");
url.append(WxAccessToken.getAccess_token());
String resp_str = HttpUtil.get(url.toString(), null);
log.debug("微信公众号返回信�?:" + resp_str);
}
/**
* 新增微信菜单
*/
public void addMenu() {
StringBuffer url = new StringBuffer();
url.append("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=");
url.append(WxAccessToken.getAccess_token());
String params = "{\"button\": [{\"type\":\"view\",\"name\":\"我的\",\"url\":\"http://dev.kakasys.com/wx/mine\"}]}";
String resp_str = HttpUtil.post(url.toString(), params, null);
log.debug("微信公众号返回信�?:" + resp_str);
}
/**
* 通过 json获取批量的用户信�?
*
* @param json
* @return
*/
public JSONObject getAllUserInfo(JSONObject json) {
JSONObject userlist = new JSONObject();
StringBuffer url = new StringBuffer();
url.append("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=");
url.append(WxAccessToken.getAccess_token());
String params = json.toString();
String resp_str = HttpUtil.post(url.toString(), params, null);
log.debug("微信公众号返回信�?:" + resp_str);
return userlist;
}
/**
*
* @param mch_billno
* 订单尾号
* @return
*/
public String queryRedPack(String mch_billno) {
String url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/gethbinfo";
String mch_id = Param.getValue("WXPAY", "mch_id");
String appid = Param.getValue("WX", "APPID");
String bill_type = "MCHT";
String cert = Param.getValue("WXPAY", "CERTPATH");
cert = WxApi.class.getResource("/" + cert).getFile();
String certpassword = Param.getValue("WXPAY", "CERTPASSWORD");
String key = Param.getValue("WXPAY", "KEY");
String nonce_str = UUID.randomUUID().toString().replaceAll("-", "");
StringBuffer s = new StringBuffer();
s.append("appid=").append(appid);
s.append("&bill_type=").append(bill_type);
s.append("&mch_billno=").append(mch_billno);
s.append("&mch_id=").append(mch_id);
s.append("&nonce_str=").append(nonce_str);
s.append("&key=").append(key);
String sign = DigestUtils.md5Hex(s.toString()).toUpperCase();
StringBuffer xml = new StringBuffer();
xml.append("<xml>");
xml.append("<sign><![CDATA[" + sign + "]]></sign>");
xml.append("<mch_billno><![CDATA[" + mch_billno + "]]></mch_billno>");
xml.append("<mch_id><![CDATA[" + mch_id + "]]></mch_id>");
xml.append("<appid><![CDATA[" + appid + "]]></appid>");
xml.append("<bill_type><![CDATA[MCHT]]></bill_type> ");
xml.append("<nonce_str><![CDATA[" + nonce_str + "]]></nonce_str>");
xml.append("</xml>");
String rst = HttpUtil.postSSL(url, xml.toString(), cert, certpassword);
return rst;
}
/**
* 通过openid获取微信用户信息
*
* @param openid
* @return
*/
public JSONObject getUserInfoByOpenId(String openid) {
JSONObject user = new JSONObject();
StringBuffer url = new StringBuffer();
url.append("https://api.weixin.qq.com/cgi-bin/user/info?access_token=");
url.append(WxAccessToken.getAccess_token());
url.append("&openid=");
url.append(openid).append("&lang=zh_CN");
String resp_str = HttpUtil.get(url.toString(), null);
log.debug("微信公众号返回信�?:" + resp_str);
return user;
}
/**
* 新活动�?�知
*/
public void sendHDTZ(Set<String> toUsers, String activity_name, String activity_time, String activity_url) {
StringBuffer url = new StringBuffer();
url.append("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=");
url.append(WxAccessToken.getAccess_token());
JSONObject arry = new JSONObject();
JSONObject first = new JSONObject();
first.put("value", "新活动�?�知");
first.put("color", "#173177");
arry.put("first", first);
JSONObject keyword1 = new JSONObject();
keyword1.put("value", "活动分享推广");
keyword1.put("color", "#173177");
arry.put("keyword1", keyword1);
JSONObject keyword2 = new JSONObject();
keyword2.put("value", activity_name);
keyword2.put("color", "#173177");
arry.put("keyword2", keyword2);
JSONObject keyword3 = new JSONObject();
keyword3.put("value", activity_time);
keyword3.put("color", "#173177");
arry.put("keyword3", keyword3);
JSONObject remark = new JSONObject();
remark.put("value", "更多精彩请继续关�?");
remark.put("color", "#173177");
arry.put("remark", remark);
JSONObject json = new JSONObject();
json.put("template_id", "LnFs4TgM1f7Ih-F6MSRvDOfQTbMRISOw95eIn-IQ-PM");
json.put("data", arry);
for (String openid : toUsers) {
json.put("url", activity_url + "?openid=" + openid);
json.put("touser", openid);
String resp_str = HttpUtil.post(url.toString(), json.toString(), null);
log.debug("微信公众号返回信�?:" + resp_str);
}
}
/**
* 意向客户抢单通知
*/
public void sendYXKH(Set<String> toUsers, String mobile_, String mobile, String yytime, String activity_name,
String orderid) {
StringBuffer url = new StringBuffer();
url.append("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=");
url.append(WxAccessToken.getAccess_token());
JSONObject arry = new JSONObject();
JSONObject first = new JSONObject();
first.put("value", "亲,你有�?位意向客户待跟进�?");
first.put("color", "#173177");
arry.put("first", first);
JSONObject keyword1 = new JSONObject();
keyword1.put("value", "");
keyword1.put("color", "#173177");
arry.put("keyword1", keyword1);
JSONObject keyword2 = new JSONObject();
keyword2.put("value", mobile_);
keyword2.put("color", "#173177");
arry.put("keyword2", keyword2);
JSONObject keyword3 = new JSONObject();
keyword3.put("value", yytime);
keyword3.put("color", "#173177");
arry.put("keyword3", keyword3);
JSONObject keyword4 = new JSONObject();
keyword4.put("value", activity_name);
keyword4.put("color", "#173177");
arry.put("keyword4", keyword4);
JSONObject remark = new JSONObject();
remark.put("value", "请您确认是否接此任务");
remark.put("color", "#173177");
arry.put("remark", remark);
JSONObject json = new JSONObject();
json.put("template_id", "md1vYcqYlBMRfQF2qa13E6XTIHISwn_wdsH-h9sXmVs");
json.put("data", arry);
for (String openid : toUsers) {
json.put("touser", openid);
json.put("url", host + "wx/tz1/" + orderid + "/" + openid);
String resp_str = HttpUtil.post(url.toString(), json.toString(), null);
log.debug("微信公众号返回信�?:" + resp_str);
}
}
/**
* 活动推广微信通知
*
* @param toUsers
* @param activityName
* @param activityType
* @param customerName
* @param sendTime
* @param activytiUrl
*/
public boolean sendWxActivitySend(String openID, String activityName, String activityType, String customerName,
String sendTime, String activytiUrl) {
StringBuffer url = new StringBuffer();
url.append("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=");
url.append(WxAccessToken.getAccess_token());
JSONObject arry = new JSONObject();
JSONObject first = new JSONObject();
first.put("value", "活动推广通知");
first.put("color", "#173177");
arry.put("first", first);
JSONObject keyword1 = new JSONObject();
keyword1.put("value", activityName);
keyword1.put("color", "#173177");
arry.put("keyword1", keyword1);
JSONObject keyword2 = new JSONObject();
keyword2.put("value", customerName);
keyword2.put("color", "#173177");
arry.put("keyword2", keyword2);
JSONObject keyword3 = new JSONObject();
keyword3.put("value", activityType);
keyword3.put("color", "#173177");
arry.put("keyword3", keyword3);
JSONObject keyword4 = new JSONObject();
keyword4.put("value", sendTime);
keyword4.put("color", "#173177");
arry.put("keyword4", keyword4);
JSONObject remark = new JSONObject();
remark.put("value", "分享越多,奖品越多哦�?");
remark.put("color", "#173177");
arry.put("remark", remark);
JSONObject json = new JSONObject();
json.put("template_id", "t_BZI6krXYPe4f8uSbo5wCG64umwv7_cacr_3ijeqYE");
json.put("data", arry);
String resp_str = "";
json.put("touser", openID);
json.put("url", activytiUrl);
resp_str = HttpUtil.post(url.toString(), json.toString(), null);
log.debug("微信公众号返回信�?:" + resp_str);
boolean flag = false;
try {
flag = JSONObject.fromObject(resp_str).getString("errcode").equals("0");
} catch (Exception e) {
return flag;
}
return flag;
}
/** 微信服务器地�? */
String host = Param.getValue("SYSTEM", "HOST");
}