主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情! |
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作 |
这篇文章是关于微信自定义分享功能的实现代码,非常详细。有需要的朋友可以参考一下,希望能帮到你。
前端开发了一个信息化项目,但是销售部门推广微信的时候,分享链接直接是网页链接加分享符号,很难看,不正规,所以我研究了微信的自定义分享功能。
准备工作:
1.认证微信官方账号的appId,appSecret
2.获取微信信息的各种链接(此部分寻找微信自定义分享API,地址:https://mp.weixin.qq.com/wiki?t =资源/RES _ main ;id=mp1421141115)
# Get access_token请求地址GetAccessTokenURL:https://api.weixin.qq.com/cgi-bin/token? grant _ type = client _ credential ;appid = % s Secret=%s #获取访问令牌GetAccessTokenouthURL:https://api.weixin.qq.com/sns/oauth2/access_token? appid = % s ;机密= % s 代码= % s Grant_type=authorization_code #获取用户基本信息请求地址GetUserInfoURL:https://api.weixin.qq.com/sns/userinfo?访问令牌= % s openid = % s https://open.weixin.qq.com/connect/oauth2/authorize? appid = % s ;重定向uri = % s 响应类型= % s 作用域= % s state = % s # we chat _ redirect # Get ticket getticket URL:https://api.weixin.qq.com/cgi-bin/ticket/getticket?访问令牌= % s type=jsapi
3 .控制器层
/* * *微信配置信息实体*/@ autowired私有weixin properties weixin properties;//微信参数私有字符串accessToken私有字符串jsApiTicket//获取参数的瞬间,private Long getTiketTime = 0Lprivate Long getTokenTime = 0L//参数的有效时间,单位为秒(s)Private Long Token Expiry Time = 0L;私有长ticketExpireTime = 0L/* * *微信自定义分享*/@ request mapping(value = "/getShareInfo ;,方法=请求方法。POST)公图 ltString,String gtgetshareinfo(http servlet request请求,http servlet response响应,string URL){//当前时间long now = system . current time millions();//判断accessToken是否已经存在或者令牌是否过期if(string utils . is blank(access token)| |(now -gettokentime >;tokenExpireTime * 1000)){ JSON object token info = getAccessToken();if (tokenInfo!= null){ access token = token info . getstring( ;访问令牌 );tokenExpireTime = token info . getlongvalue( ;过期时间为 );//获取令牌的时间GetToken Time = system . current Time millis();log.info(accessToken = = = = gt"+access token);log.info(token expire time = = = = = gt;"+token expire time+ ;s );log.info(getTokenTime = = = = = gt;"+getTokenTime+ ;女士 );} else { log . info( ;= = = = = gt;tokenInfo为空~ );log.info(= = = = = gt;获取tokenInfo失败,请做一些检查~ );} }//确定jsApiTicket是否已经存在或过期,如果(string utils。is blank(JSAPI ticket)| |(now -gettikettime >;ticket expiretime * 1000)){ JSON object ticket info = getjsapi ticket(access token);如果(ticketInfo!= null){ log . info( ;ticketInfo = = = = gt"+ticket info . tojsonstring());jsapi ticket = ticket info . getstring( ;门票 );ticket expiretime = ticket info . getlong value( ;过期时间为 );getTiketTime = system . current time millis();log.info(jsapi ticket = = = = = gt;"+jsapi ticket);log.info(ticket expire time = = = = = gt;"+ticket expiretime+ ;s );log.info(getTiketTime = = = = gt"+getTiketTime+ ;女士 );} else { log . info( ;= = = = = gt;ticketInfo为空~ );log.info(= = = = = gt;获取tokenInfo失败,请做一些检查~ );} }//生成微信权限验证的参数映射< String,String gtwe chat param = makeWXTicket(jsapi ticket,URL);返回微信参数;}//Get access token Private JSON Object getaccessstoken(){//String access token URL = https://api.weixin.qq.com/cgi-bin/token? grant _ type = client _ credential ;appid = APPID Secret=APPSECRET //获取访问令牌字符串请求URL = string . format(weixinproperties。GetGetAccessTokenURL(),weixinproperties。GetAppID(),weixinproperties。微信的GetAppSecret());字符串result = send(request URL);JSON object JSON object = JSON . parse object(结果);返回jsonObject}//Get Ticket Private JSON Object getjsapi Ticket(String Access _ Token){//String API ticker URL = https://api.weixin.qq.com/cgi-bin/ticket/getticket? Access _ Token = Access _ Token ;Type=jsapi // Get TicketString请求URL = string . format(weixinproperties . getgetgetticketurl(),access _ token)通过acessToken字符串result = send(request URL);JSON object JSON object = JSON . parse object(结果);返回jsonObject}//生成微信权限验证的参数public map < String,String gtmakeWXTicket(String jsApiTicket,String URL){ Map lt;String,String gtret = new HashMap ltString,String gt();string non centr = createnoncentr();字符串timest = create timest();String string1字符串签名= &;;//注意,这里的参数名必须全部小写,而且必须是有序的。string1 = &; jsapi _ ticket = +jsapi ticket+ ; noncestr = +non centr+ ; 时间戳= +时间戳+ ; url = +网址;log.info(String1 = = = = = gt&;+string 1);请尝试{ message digest crypt = message digest . getinstance( ;SHA-1 ;);crypt . reset();crypt . update(string 1 . getbytes( ;ut F-8 ;));signature = byteToHex(crypt . digest());log.info(签名= = = = = gt&;+签名);} catch(nosuch algorithm exception e){ log . error( ;we chat controller . makewxticket = = = = = Start ;);log.error(e.getMessage(),e);日志错误( we chat controller . makewxticket = = = = = End ;);} catch(UnsupportedEncodingException e){ log . error( ;we chat controller . makewxticket = = = = = Start ;);log.error(e.getMessage(),e);日志错误( we chat controller . makewxticket = = = = = End ;);} ret . put( ;url ,网址);ret . put( ;jsapi _ ticket ,jsapi ticket);ret . put( ;非中心 ,非中心);ret . put( ;时间戳 ,时间戳);ret . put( ;签名 ,签名);ret . put( ;appid ,weixinproperties . getappid());返回ret}/* * *发送请求* * @ param URL * @ return * @ throws exception */string Send(string URL){ return http client tools . post(URL);}//字节数组转换为十六进制字符串私有静态字符串bytetohex(final byte[]hash){ formatter formatter = new formatter();for(字节b:哈希){ formatter . format( ;% 02x ,b);} String result = formatter . tostring();formatter . close();返回结果;}//生成随机字符串私有静态字符串createnoncentr(){ return uuid . random uuid()。tostring();}//生成时间戳私有静态字符串create timest(){ return long . tostring(system。current time millions()/1000);}
4.引入share.js页面进行共享
$(function(){ var URL = location . href . split( # 39;#').toString();//网址杀不死$。Ajax({ type:" post ;,网址: /user/log in/getShareInfo ;数据类型: json ,async : false,data:{url:url},success:function(data){ wx . config({ debug:false,////生产环境需要关闭调试模式appid: data.appid.//appid可以通过微信服务号在后台查看timest: data.timest。//生成签名nonceStr的时间戳:data . non centr,//生成随机字符串signature: data.signature,//签名jsApiList: [//要调用的JS接口列表 # 39;checkJsApi # 39,//确定当前客户端版本是否支持指定的JS接口 # 39;onMenuShareTimeline # 39,//分享给你的朋友 # 39;onMenuShareAppMessage # 39//分享到朋友圈]});},错误:function(xhr,status,error){//alert(status);//alert(xhr . responsetext);} })});
5.将微信分享的核心js和share.js引入要分享的页面。
lt脚本类型= text/JavaScript ;src = /resources/js/jweixin -1 . 2 . 0 . js ; gt lt/script gt; lt脚本类型= text/JavaScript ;src = /resources/js/share . js ; gt lt/script gt;6.在当前页面< script gt,这部分可以直接写入share.js
/*共享代码*/wx . ready(function(){//验证配置信息后执行ready方法。所有接口调用都必须在config接口获得结果后进行。Config是客户端的异步操作,所以如果需要在页面加载时调用相关接口,必须将相关接口放在ready函数中,以保证正确执行。对于只在用户触发时调用的接口,可以直接调用,不需要放在ready函数中。console . log( # 39;微信验证成功 # 39;);//分享到朋友圈wx . onmenushare timeline({ title:detail _ title,//分享标题链接:link,//分享链接,链接的域名或路径必须与当前页面对应的微信官方账号JS安全域名一致。imgUrl: # 39;http://develop . fangxinyuesao . com/resources/images/logo . png # 39;、//分享图标成功:function() {//用户确认分享后执行的回调函数}、Cancel: function() {//用户取消分享后执行的回调函数} });//分享给朋友wx . onmenushareappmessage({ title:detail _ title,//分享标题desc: # 39;分享自妇孺头条 # 39;、//分享描述链接:link、//分享链接,且该链接的域名或路径必须与当前页面对应的微信官方账号JS安全域名一致。imgUrl: # 39;http://develop . fangxinyuesao . com/resources/images/logo . png # 39;,//共享图标类型: # 39;',//分享类型,音乐,视频或者链接,如果留空,默认为link dataUrl: # 39;'、//如果类型是音乐或视频,则应提供数据链接,默认为空成功:function() {//用户确认分享后执行的回调函数}、Cancel: function() {//用户取消分享后执行的回调函数} });});wx . error(function(RES){//如果配置信息验证失败,将执行错误函数。如果签名过期,则验证失败。可以在config的调试模式或返回的res参数中查看具体的错误信息。对于SPA,可以在此处更新签名。console . log( # 39;微信验证失败 # 39;);console . log(RES);});注意:设置网站白名单进行分享,建议在电脑端调试时使用微信web开发工具。
相关建议:
微信自定义菜单处理开发实例,微信自定义实例以上是微信自定义分享功能实现代码的详细内容。请多关注主机参考其他相关文章!
这几篇文章你可能也喜欢:
本文由主机参考刊发,转载请注明:关于微信自定义分享功能的代码(微信微信官方账号自定义分享) https://zhujicankao.com/79849.html
评论前必须登录!
注册