900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 微信分享内容给朋友 朋友圈 QQ QQ空间等

微信分享内容给朋友 朋友圈 QQ QQ空间等

时间:2021-09-29 23:04:55

相关推荐

微信分享内容给朋友 朋友圈 QQ QQ空间等

示例网页

<!DOCTYPE html><html><head><meta charset="UTF-8"><meta name="renderer" content="webkit"><meta name="format-detection" content="telephone=no"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"><meta name="author" content="ershuai" /><meta name="Copyright" content="ershuai" /><title>二帅</title><script type="text/javascript" src="http://res./open/js/jweixin-1.0.0.js"></script><script type="text/javascript" src="../scripts/common/wx_share/wechat_common_share.js"></script></head><body>init share</body><script type="text/javascript">$(document).ready(function() {var initUrl = window.location.href;var shareLogo = "http://img3./it/u=224917259,3388622236&fm=21&gp=0.jpg";var lineLink = "";var shareContent = "分享的内容描述";var shareTitle = "分享的标题描述";initShare(initUrl, lineLink, shareTitle, shareContent, shareLogo);});</script></html>

wechat_common.share.js

var init_share_url = "http://[host]/wechat/initWechatConfig.xhtml";/*** 初始化分享* @param initUrl当前初始化网页地址* @param lineLink点击后跳转地址* @param shareTitle分享标题* @param shareContent分享内容* @param shareLogo分享logo*/function initShare(initUrl, lineLink, shareTitle, shareContent, shareLogo) {$.ajax({type : "post",url : init_share_url,data : {"initUrl" : initUrl,"initType" : "jsapi"},dataType : "json",error : function(request) {alert('初始化分享失败,请稍后重试');},success : function(ajaxRes) {var state = ajaxRes.state;if (state == 1) {var data = ajaxRes.data;//初始化微信配置wxShareConfig(data.appId, data.timestamp, data.nonceStr, data.signature);//分享准备wxShareReady(lineLink, shareTitle, shareContent, shareLogo);} else {alert(ajaxRes.msg);}}});};/*** 初始化微信分享配置* @param appId* @param timestamp* @param nonceStr* @param signature*/function wxShareConfig(appId, timestamp, nonceStr, signature) {wx.config({debug: false,appId: appId,timestamp: timestamp,nonceStr: nonceStr,signature: signature,jsApiList: ['checkJsApi','onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareQZone']});wx.error(function (res) {alert(res.errMsg);});}/*** 分享准备* @param lineLink* @param shareTitle* @param shareContent* @param shareLogo*/function wxShareReady(lineLink, shareTitle, shareContent, shareLogo) {wx.ready(function () {//获取“分享到朋友圈”wx.onMenuShareTimeline({title: shareTitle, // 分享标题link: lineLink, // 分享链接imgUrl: shareLogo, // 分享图标success: function () { // 用户确认分享后执行的回调函数},cancel: function () { // 用户取消分享后执行的回调函数}});//获取“分享给朋友”wx.onMenuShareAppMessage({title: shareTitle, // 分享标题desc: shareContent, // 分享描述link: lineLink, // 分享链接imgUrl: shareLogo, // 分享图标type: 'link', // 分享类型,music、video或link,不填默认为linkdataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空success: function () { // 用户确认分享后执行的回调函数//alert('已分享');//window.location.href = "";},cancel: function () { // 用户取消分享后执行的回调函数//alert('已取消');}});//获取“分享到QQ”wx.onMenuShareQQ({title: shareTitle, // 分享标题desc: shareContent, // 分享描述link: lineLink, // 分享链接imgUrl: shareLogo, // 分享图标success: function () { // 用户确认分享后执行的回调函数},cancel: function () { // 用户取消分享后执行的回调函数}});//获取“分享到QQ空间”wx.onMenuShareQZone({title: shareTitle, // 分享标题desc: shareContent, // 分享描述link: lineLink, // 分享链接imgUrl: shareLogo, // 分享图标success: function () { // 用户确认分享后执行的回调函数},cancel: function () { // 用户取消分享后执行的回调函数}});//获取“分享到腾讯微博”wx.onMenuShareWeibo({title: shareTitle, // 分享标题desc: shareContent, // 分享描述link: lineLink, // 分享链接imgUrl: shareLogo, // 分享图标success: function () { // 用户确认分享后执行的回调函数},cancel: function () { // 用户取消分享后执行的回调函数}});});}

到这里,前端就完事了

现在实现,init_share_url方法

var init_share_url = "http://[host]/wechat/initWechatConfig.xhtml";

initWechatConfig方法内容:

(因为我这个有多个服务号要维护,是根据rawId来判断的;一般情况是不用rawId参数的)

@RequestMapping("/initWechatConfig.xhtml")public void initWechatConfig(HttpServletRequest request, HttpServletResponse response) throws Exception {try {String initUrl = getParams("initUrl");//当前网页地址String initType = getParams("initType");if (CommonUtil.isNull(initUrl) || CommonUtil.isNull(initType)) {//判断nullthrow new BizException(ErrorMsg.PARAMS_NULL);}String rawId = getParams("rawId");if (CommonUtil.isNull(rawId)) {rawId = Constants.RawId_broker;}HashMap<String, Object> respMap = new HashMap<String, Object>();if ("jsapi".equals(initType)) {//初始化分享String noncestr = RandomUtil.nextInt(initType.toUpperCase(), 100, 999);//随机数,用uuid什么的也可以String timestamp = DateUtil.getTimestampWx();//时间戳 Long.toString(System.currentTimeMillis() / 1000)String signature = null;//获取Ticket ticket = this.wechatService.getJsapiTicket(rawId);signature = SHA1Util.signForJsapiTicket(ticket.getTicket(), noncestr, timestamp, initUrl);respMap.put("appId", Constants.getAppId(rawId));respMap.put("timestamp", timestamp);respMap.put("nonceStr", noncestr);respMap.put("signature", signature);} else if ("pay".equals(initType)) {//初始化支付}writeSuccMsg(response, respMap);} catch (Exception e) {log.error("初始化微信配置 异常:", e);writeErrorMsg(response, e.getMessage());}}

RequestAddr的参数配置

// 获取access_token的接口地址(GET) API要求每天限制2000 - 全局access_token

public static final String access_token_url = "https://api./cgi-bin/token?grant_type=client_credential&appid=APPID&secret=SECRET";

// 获取ticket_url的接口地址(GET) API

public static final String ticket_url = "https://api./cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi";

// 获取ticket_url的参数

public static final String ticket_url_params = "jsapi_ticket=JSAPI_TICKET&noncestr=NONCESTR&timestamp=TIMESTAMP&url=INIT_URL";

getJsapiTicket方法

public Ticket getJsapiTicket(String rawId) throws Exception {//请求全局access_tokenAccessToken accessToken = getAccessToken(rawId);//获取jsapi_ticketTicket ticket = WeChatUtils.getJsapiTicket(accessToken.getAccess_token());return ticket;}/*** 获取全局access_token 公共方法* @author ershuai * @version V1.0 * @param rawId* @return* @throws Exception*/public AccessToken getAccessToken(String rawId) throws Exception {//请求全局access_tokenAccessToken accessToken = WeChatUtils.getAccessToken(rawId);return accessToken;}

WeChatUtils类

/*** 凭证access_token的获取方法-全局access_token* @author ershuai* @version V1.0 * @return* @throws Exception*/public static AccessToken getAccessToken(String rawId) throws Exception {String appId = Constants.getAppId(rawId);String appSecret = Constants.getAppSecret(rawId);//urlString access_token_url = RequestAddr.access_token_url;//匹配参数access_token_url = access_token_url.replace("APPID", appId);access_token_url = access_token_url.replace("SECRET", appSecret);//匹配参数//请求String respStr = WebUtils.doGet(access_token_url, null);AccessToken accessToken = null;if (null != respStr) {accessToken = JSON.parseObject(respStr, AccessToken.class);}return accessToken;}/*** 凭证JsapiTicket的获取方法* @author ershuai * @version V1.0 * @param accessToken* @return* @throws Exception*/public static Ticket getJsapiTicket(String accessToken) throws Exception {//urlString jsapi_ticket_url = RequestAddr.ticket_url.replace("ACCESS_TOKEN", accessToken);//匹配参数jsapi_ticket_url = jsapi_ticket_url.replace("ACCESS_TOKEN", accessToken);//请求String respStr = WebUtils.doGet(jsapi_ticket_url, null);Ticket ticket = null;if (null != respStr) {ticket = JSON.parseObject(respStr, Ticket.class);}return ticket;}

SHA1Util类

/*** sign签名,对于 jsapi_ticket* @author ershuai* @version V1.0* @param jsapiTicket* @param noncestr* @param timestamp* @param initUrl* @return*/public static String signForJsapiTicket(String jsapiTicket, String noncestr, String timestamp, String initUrl) {String signature = null;// 注意这里参数名必须全部小写,且必须有序String signatureStr = RequestAddr.ticket_url_params;signatureStr = signatureStr.replace("JSAPI_TICKET", jsapiTicket);signatureStr = signatureStr.replace("NONCESTR", noncestr);signatureStr = signatureStr.replace("TIMESTAMP", timestamp);signatureStr = signatureStr.replace("INIT_URL", initUrl);try {MessageDigest crypt = MessageDigest.getInstance("SHA-1");crypt.reset();crypt.update(signatureStr.getBytes("UTF-8"));signature = byteToHex(crypt.digest());} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();}return signature;}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;}

PS:做完以上流程,应该就可以完成分享功能了;出现最多的错误应该就是签名不正确,这个问题检查几个微信参数就好了;

config:invalid url domain 错误是需要去 公众号设置 - 功能设置 - JS接口安全域名;配置域名

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。