java 朋友圈功能开发_java开发的微信分享到朋友圈功能
微信分享到朋友圈其实是微信中的一个内置功能,但当我们想自定义分享的内容的时候,就得自己写js代码调用微信的jsapi。
过程大体分为两步:
一、当你打开一个页面(你项目中需要加入分享朋友圈功能的页面)时,会执行一段js代码,这段js代码中实现了一个微信注入权限的功能,因为只有注入权限之后你才可以调用微信的分享朋友圈的功能,微信注入权限接口的js代码如下所示:
$(function(){
ajaxConfig();
});
function ajaxConfig(){
$.ajax({
type:"post",
dataType: "json",
data: {
url : location.href.split('#')[0]
},
url: "${pageContext.request.contextPath }/wxUser/testConfig.shtml",
success: function(obj){
if(obj.result == "success"){
//微信注入权限接口
wx.config({
debug: false,
appId: obj.appId,
timestamp: obj.timestamp,
nonceStr: obj.nonceStr,
signature: obj.signature,
jsApiList: [
'onMenuShareTimeline', //分享到朋友圈
]
});
}else{
alert("加载数据错误");
}
},
error:function(){
alert("系统请求异常!");
}
});
}
如果接口权限注入成功,这个接口需要5个重要的参数,公众号的appid,时间戳timestamp,随机字符串nonceStr,以及加密签名signature,这四个参数通过ajax的回调函数进行接收,后台代码的实现如下:
@RequestMapping("/testConfig")
public void testConfig(String url,Model model,HttpServletResponse response) throws IOException{
String jsapi_ticket = JsapiTicketTimeTask.jsapi_ticket;
String result;
if("".equals(jsapi_ticket)){
result = "error";
}
//进行数据的加密(url,jsapi_ticket,nonceStr,timestamp)等参数进行SHA1加密
Map ret = Sign.sign(jsapi_ticket, url);
String appId=WxConfigure.getAPPID();
String timestamp = ret.get("timestamp");
String nonceStr = ret.get("nonceStr");
String signature = ret.get("signature");
result = "success";
JSONObject jsonObject = new JSONObject();
jsonObject.put("timestamp", timestamp);
jsonObject.put("nonceStr", nonceStr);
jsonObject.put("signature", signature);
jsonObject.put("result", result);
jsonObject.put("appId", appId);
response.setContentType("application/json;charset=utf-8");
response.setHeader("Access-Control-Allow-Origin", "*");
response.getWriter().write(jsonObject.toString());
}
二、当你点击你页面的一个按钮时(携带有点击事件的标签,不一定非得是按钮),会弹出一个页面指向右上角提示你分享朋友圈(因为微信不能实现自定义的按钮直接分享到朋友圈,所以只能这样提示),会调用微信分享朋友圈的js代码,微信分享到朋友圈的js代码如下所示:
$("#share").on("click", function() {
$("#shareit").show();
wx.onMenuShareTimeline({
title: '欢迎来到慧聪网产业带性格色彩测试',
link: 'https://rong580.com/wzh/wxUser/toTestChoice.shtml',
imgUrl: '../img/zp-header.png',
trigger: function (res) {
},
success: function (res) {
alert('已分享');
window.location.href="toIndex.shtml?tag4="+4;
},
cancel: function (res) {
alert('已取消');
window.location.href="toIndex.shtml";
},
fail: function (res) {
alert(JSON.stringify(res));
}
});
});
$("#shareit").on("click", function(){
$("#shareit").hide();
})
这时候你点击分享朋友圈按钮,就可以将你自定义的内容分享到朋友圈了,这里的shareit就是你指引你分享到朋友圈的图片,通过点击事件可以控制它的显示与隐藏,这个图片你可以自定义,大概是这样的:
以上就是分享到朋友圈的功能实现;
在这个功能中会实现遇到一个问题,就是jsapiticket的获取,因为微信官方规定jsapiticket每天的获取次数是有限的,一旦超过次数就无法获取,这样就会影响到项目的正常功能,这里可以写一个定时器每小时获取一次就可以了。定时器利用spring的定时器来实现,直接在spring的配置文件中配置即可:
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
这里要注意一个问题,spring3和spring4中所使用的定时器是不一样的;
接下来附上相关的代码:
获取jsapiticket的类:
package chan.ye.dai.wexin;
import chan.ye.dai.http.Con2http;
import net.sf.json.JSONObject;
/**
*
* @ClassName: JsapiTicketTimeTask
* @Description: TODO(jsapi_ticket类)
* @author anyou
* @date 2016年12月9日 上午8:29:19
*
*/
public class JsapiTicketTimeTask {
public static String jsapi_ticket = "";
/**
*
* @Title: getTicket
* @Description: TODO(每隔一个小时调用一次微信获取jsapi的接口的任务调用器,在spring配置里面调用)
* @param 设定文件
* @return void 返回类型
* @throws
*/
public static void getTicket() {
//调用微信接口获取access_token凭证
//Constant.ACCESS_TOKEN = https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
String _url = WexinUrlConst.WEXIN_USER_ACCESS_TOKEN.replace("APPID", WxConfigure.getAPPID()).replace("SECRET", WxConfigure.getAPPSECRET());
String resp = new Con2http().httpsRequest(_url, "GET", null);
if (!resp.contains("errcode")) {
JSONObject object = JSONObject.fromObject(resp);
String access_token = (String) object.get("access_token");
if(access_token != null && !"".equals(access_token)){
//如果可以获取access_token,即可以调用jsapi_tiket的凭证了
String ticketUrl = WexinUrlConst.JSAPI_TICKET.replace("ACCESS_TOKEN", access_token); //Constant.JSAPI_TICKET = https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
String ticketStr = new Con2http().httpsRequest(ticketUrl, "GET", null);
JSONObject ticketJson = JSONObject.fromObject(ticketStr);
String errmsg = (String) ticketJson.get("errmsg");
//如果调用成功,返回ok
if("ok".equals(errmsg)){
jsapi_ticket = (String) ticketJson.get("ticket");
}
}
}
}
}
sign类:
package chan.ye.dai.utils;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class Sign {
public static Map sign(String jsapi_ticket, String url) {
Map ret = new HashMap();
String nonce_str = create_nonce_str();
String timestamp = create_timestamp();
String string1;
String signature = "";
//注意这里参数名必须全部小写,且必须有序
string1 = "jsapi_ticket=" + jsapi_ticket +
"&noncestr=" + nonce_str +
"×tamp=" + timestamp +
"&url=" + url;
System.out.println(string1);
try
{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(string1.getBytes("UTF-8"));
signature = byteToHex(crypt.digest());
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
ret.put("url", url);
ret.put("jsapi_ticket", jsapi_ticket);
ret.put("nonceStr", nonce_str);
ret.put("timestamp", timestamp);
ret.put("signature", signature);
return ret;
}
private static String byteToHex(final byte[] hash) {
Formatter formatter = new Formatter();
for (byte b : hash)
{
formatter.format("%02x", b);
}
String result = formatter.toString();
formatter.close();
return result;
}
private static String create_nonce_str() {
return UUID.randomUUID().toString();
}
private static String create_timestamp() {
return Long.toString(System.currentTimeMillis() / 1000);
}
}
java 朋友圈功能开发_java开发的微信分享到朋友圈功能相关推荐
- java微信分享朋友圈_java怎么实现微信分享到朋友圈功能
展开全部 申请应用 AppKey 申请方法:访问友推网站后台,登录后进入应用列表,添加需要集成友推组件的 App,如下636f7079323131333532363134313032313635333 ...
- 【源码+图片素材+详细教程】Java游戏开发_Java开发经典游戏飞翔的小鸟_飞扬的小鸟_Java游戏项目Flappy Bird像素鸟游戏_Java课程设计项目
课程目标: 1.通过本课程的学习巩固Java的相关基础知识,例如循环判断,数组和集合的使用,对象的继承,接口的实现,窗口的创建,事件监听,图形绘制. 2.完成小鸟的移动,管道自动生成.碰撞死亡,计分系 ...
- iOS开发之第三方分享微信分享、朋友圈分享,史上最新最全第三方分享微信方式实现、朋友圈方式实现
本文章项目demo地址: https://github.com/zhonggaorong/weixinLoginDemo 微信分享环境搭建参考(包含登录的源码):http://blog.csdn.ne ...
- 微信分享到朋友圈、发送给朋友开发注意事项
1.invalid url domain 当前页面所在域名与使用的appid没有绑定,请确认正确填写绑定的域名,如果使用了端口号,则配置的绑定域名也要加上端口号(一个appid可以绑定三个有效域名,见 ...
- php 微信转发朋友圈,php实现的微信分享到朋友圈并记录分享次数功能的讲解
这篇文章主要介绍了php实现的微信分享到朋友圈并记录分享次数功能,结合实例形式分析了php微信分享功能接口调用及分享次数统计具体操作技巧,需要的朋友可以参考下 本文实例讲述了php实现的微信分享到朋友 ...
- php 微信分享功能_php实现微信分享到朋友圈并记录分享次数功能
在一些带有分销功能或者需要用微信裂变的程序中,经常需要用到微信分享并记录次数,这样就知道别人分享了多少次,小郭今天正好也在做这个,就记录一下这个原理和实现方法, 1.引入JS文件 2.通过config ...
- php判断朋友圈是否分享,php实现的微信分享到朋友圈并记录分享次数功能
本文实例讲述了php实现的微信分享到朋友圈并记录分享次数功能.分享给大家供大家参考,具体如下: 1.引入js文件 2.通过config接口注入权限验证配置 3.通过ready接口处理成功验证 4.通过 ...
- java 朋友圈分享接口_微信分享到朋友圈接口
微信分享到朋友圈接口遇到了问题,之前遇到的问题是"invalid domain",查了好久发现是域名没有备案.现在一切都正常了,微信打开网页也显示"config ok&q ...
- 微信分享好友+朋友圈 开发文档
微信分享好友+朋友圈 准备工作 资源申请 配置AS 备注 准备工作 资源申请 申请微信开放平台账号 申请自己的AppID 地址 准备开发资源 开发工具包 android项目,添加依赖库 2018.12 ...
- php 分享微博,php微信分享到朋友圈、QQ、朋友、微博
本文实例为大家分享了php微信分享到朋友圈.QQ.朋友.微博的具体代码,供大家参考,具体内容如下 前台代码 wx.config({ debug: false, appId: "{$signP ...
最新文章
- 【Groovy】Groovy 方法调用 ( 使用 对象名.@成员名 访问 Groovy 对象成员 )
- Android Kotlin协程和Retrofit结合使用
- Symantec防病毒企业版10.1部署方法一
- Sharepoint 2010 隐藏基本搜索中心搜索结果左侧的分类条件
- 24c语言程序设计是啥,《C语言程序设计》作业答案.docx
- VMware Workstation(虚拟机) V6.0.2 Build 59824 汉化版 |
- 问题-提示“请确定磁盘未满或未被写保护而且文件未被使用”
- 为什么要文件名和类名一样php_php文件名和类名相同时include不起作用?
- ThinkPHP5最新URL访问:PATH_INFO和兼容模式
- 数据随机丢失情况下多传感器多速率鲁棒融合估计
- String、StringBuilder、StringBuffer、StringConcatFactory
- 【Matlab优化预测】贝叶斯网络优化LSTM预测【含源码 1158期】
- linux命令df命令全称,df命令--Linux命令应用大词典729个命令解读
- 用计算机打出歌词,Overture软件中如何输入歌词?
- 思科模拟器Cisco Packet Tracer 7.3.0安装配置
- 何通过ArcCatalog本地发布地图服务
- Unsupported Modules Detected: Compilation is not supported for following modules: app, library. Unfo
- 资源分享——Java实现的密码生成器
- STM32下的LED灯闪烁
- unity手游之聊天SDK集成与使用二
热门文章
- js 实现下拉菜单 完整代码
- 十六进制换算成二进制、八进制、十进制
- 易读文库下载器1.2版发布
- 如何用photoshop做24色环_色相环:用PS做色相环教程
- axure8 事件改变样式_AxureRP8实战手册-案例2(文本框:边框变色)
- win10计算机管理看不见蓝牙,win10蓝牙不见了的解决方法
- 纯php实现中秋博饼游戏(1):绘制骰子图案
- java混淆工具zelix比较_Java逆向基础之混淆器
- 美术集网校—多点透视如何运用于绘画中?学会透视增加绘画体积感!
- Rejected: destination has a full message queue