专栏简介 | ||
📄本栏目录 | 📖心灵鸡汤📖 你要明白,你不是吃什么都胖的易胖体质,你是什么都吃才这么胖的贪吃体质。 | ✍相关博文✍ |
微信分享开发:准备工作[微信公众平台以及微信中控服务配置](一)
微信开发的准备工作完成后就可以开始开发,废话不多说,直接贴代码
一,前端实现
前端的实现微信开放平台已经给出了实现步骤,我们只需要按照其给出的步骤实现就行,微信公众平台
二,后端
①,Controller层(我是以接口形式实现的,如果你是方法函数的话,取核心的就行)
@RequestMapping("/getWXConfig")
@ResponseBody
public Object WeixShare(String requestUrl){
Object share_obj=WeixinUtil.getAppWxConfig(requestUrl,null); //微信分享参数
return ParamUtils.buildMap("share_obj", share_obj);
}
②,WeixinUtil.java
/**
* 单页面引用的分享conf
* @param requestUrl 加密的请求路由
* @param redirectUrl 回调路由
* @return
*/
public static Map<String, Object> getAppWxConfig(String requestUrl,String redirectUrl) {
Map<String, Object> ret = new HashMap<String, Object>();
String jsapi_ticket = AdvancedUtil.getTicket();
String timestamp = Long.toString(System.currentTimeMillis() / 1000); // 必填,生成签名的时间戳
String nonceStr = UUID.randomUUID().toString(); // 必填,生成签名的随机串
// 注意这里参数名必须全部小写,且必须有序
String signature = "";
String sign = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonceStr+ "×tamp=" + timestamp + "&url=" + requestUrl;
try {
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(sign.getBytes("UTF-8"));
signature = byteToHex(crypt.digest());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if(redirectUrl != null){
requestUrl = redirectUrl;
}
ret.put("backTitle", "祖国必然统一,安全搜索必须可靠!");
ret.put("backLink", requestUrl);
ret.put("backImgUrl", "http://wasai-oss-3.oss-cn-shenzhen.aliyuncs.com/1a_picture/jijingyun/20190103132435.png");
ret.put("backDesc", "价值百万的安全漏洞库,限时免费!");
ret.put("backType", "link");
ret.put("backDescUrl", "");
ret.put("appId", ParamUtils.getMessage("appId","wx010f4709f3abffe3"));//这里替换你在微信公众平台申请的appid
ret.put("timestamp", timestamp);
ret.put("nonceStr", nonceStr);
ret.put("signature", signature);
ret.put("sign", sign);//测试
return ret;
}
③,AdvancedUtil.java(JSONObject引用的是net.sf.json.JSONObject)
public static String getTicket() {
// 获取网页授权凭证
JSONObject jsonObject = JSONObject.fromObject(HttpRequest.sendGet("http://localhost:3000/ticket", ""));
String jsapi_ticket = null;
if (null != jsonObject) {
jsapi_ticket = jsonObject.getString("ticket");
}
return jsapi_ticket;
}
④,HttpRequest.java
/**
* 向指定URL发送GET方法的请求
*
* @param url
* 发送请求的URL
* @param param
* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
* @return URL 所代表远程资源的响应结果
*/
public static String sendGet(String url, String param) {
String result = "";
BufferedReader in = null;
try {
String urlNameString = url + "?" + param;
URL realUrl = new URL(urlNameString);
// 打开和URL之间的连接
URLConnection connection = realUrl.openConnection();
// 设置通用的请求属性
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("user-agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
// 建立实际的连接
connection.connect();
// 获取所有响应头字段
Map<String, List<String>> map = connection.getHeaderFields();
// 定义 BufferedReader输入流来读取URL的响应
in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
} catch (Exception e) {
logger.error("发送GET请求出现异常!" + e);
e.printStackTrace();
}
// 使用finally块来关闭输入流
finally {
try {
if (in != null) {
in.close();
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return result;
}
到此,微信分享的后端业务已经实现
走下接口试下,
效果展示(微信开发工具):
总结:标题内容分享图标都可以写活,扩展下可以在数据库配置,主要用的就是sing签名。