必须绑定,通过开放平台获取unionid,与公众号的unionid匹配。
不绑定的话,公众号获取不到unionid
uni.login({
provider: "weixin",
success: function(loginRes) {
var wechatUnionid = loginRes.authResult.unionid;
}
});
@RequestMapping("verifyToken")
public byte[] verifyToken(String signature, String timestamp, String nonce, String echostr) throws UnsupportedEncodingException {
List<String> params= new ArrayList<>();
params.add(nonce);
params.add(timestamp);
// 在微信公众号平台上设置的Token
params.add("token");
if (echostr!=null){
// 确定是否是微信的请求,验证是否正确签名,返回echostr
if(wechatUtil.verifySignature(params,signature)){
return URLEncoder.encode(echostr,"UTF-8").getBytes();
} else {
return null;
}
} else {
return null;
}
}
public boolean verifySignature(List<String> params,String signature){
// 字典序排序
Collections.sort(params);
// SHA1加密
String paramsStr = StringUtils.join(params.toArray(),"");
String checksignature = DigestUtils.shaHex(paramsStr);
return checksignature.equals(signature);
}
https请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
参数 | 是否必须 | 说明 |
---|---|---|
grant_type | 是 | 获取access_token直接填写client_credential |
appid | 是 | 开发者ID(AppID) |
secret | 是 | 开发者密码(AppSecret) |
https请求方式: GET
https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID
参数 | 是否必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
next_openid | 是 | 第一个拉取的OPENID,不填默认从头开始拉取 |
https请求方式: GET
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
参数 | 是否必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
openid | 是 | 普通用户的标识,对当前公众号唯一 |
lang | 否 | 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语 |
https请求方式: GET
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
参数 | 是否必须 | 说明 |
---|---|---|
access_token | 是 | 调用接口凭证 |
public class TemplateContentEntity {
public String touser; //用户OpenID
public String template_id; //模板消息ID
public HashMap<String,TemplateDataEntity> data;
@Override
public String toString() {
return "{" +
"touser='" + touser + '\'' +
", template_id='" + template_id + '\'' +
", data=" + data +
'}';
}
}
public class TemplateDataEntity {
public String value;
public String color;
public TemplateDataEntity(String value, String color){
this.value = value;
this.color = color;
}
@Override
public String toString() {
return "{" +
"value='" + value + '\'' +
", color='" + color + '\'' +
'}';
}
}
@RequestMapping("sendTemplateMsg")
public JSONObject sendTemplateMsg(String openid,String msg){
// 模板消息实体类
TemplateContentEntity temp = new TemplateContentEntity();
temp.touser=openid;
temp.template_id = wechatTemplateID;
LinkedHashMap<String, TemplateDataEntity> data = new LinkedHashMap<>();
data.put("first",new TemplateDataEntity("消息","#173177"));
data.put("keyword1",new TemplateDataEntity(msg,"#000"));
data.put("keyword2",new TemplateDataEntity(nowTime,"#000"));
data.put("remark",new TemplateDataEntity("如有问题请联系管理员","#173177"));
temp.data= data;
// sendMessage使用post传json格式
return wechatUtil.sendMessage(temp);
}