封装微信jssdk自定义分享代码

var protocol = window.location.protocol; //获取协议
var host = window.location.host;   //获取域名
var posuDomainUrl = protocol + "//" + host;

function WeChat(url, title, img, desc) {
    var configData = {
        title: title, // 分享标题
        desc: desc, // 分享描述
        link: url, // 分享链接
        imgUrl: img, // 分享图标
        success: function () {
            // 用户确认分享后执行的回调函数
        },
        cancel: function () {
            // 用户取消分享后执行的回调函数
        }
    };
    
    $.ajax({
        url: posuDomainUrl + '/wechatShare/wechatShare.do',
        type: 'POST',
        data: {url:url},
        success: function (resp) {
            if (resp.data) {
                resp.data.debug=false;
                resp.data.jsApiList=['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'];
                wx.config(resp.data);
                wx.ready(function () {
                    //分享到朋友圈
                    wx.onMenuShareTimeline({ //例如分享到朋友圈的API
                        title: title, // 分享标题
                        link: url, // 分享链接
                        imgUrl: img, // 分享图标
                        success: function () {
                        },
                        cancel: function () {
                            // 用户取消分享后执行的回调函数
                        }
                    });

                    //分享给朋友
                    wx.onMenuShareAppMessage({
                        title: title, // 分享标题
                        desc: desc, // 分享描述
                        link: url, // 分享链接
                        imgUrl: img, // 分享图标
                        type: '', // 分享类型,music、video或link,不填默认为link
                        dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
                        success: function () {
                        },
                        cancel: function () {
                            // 用户取消分享后执行的回调函数
                        }
                    });

                    //分享到QQ
                    wx.onMenuShareQQ(configData);

                    //分享到腾讯微博
                    wx.onMenuShareWeibo(configData);

                    //分享到QQ空间
                    wx.onMenuShareQZone(configData);


                    wx.error(function (res) {
                        //alert(res.errMsg); //打印错误消息。及把 debug:false,设置为debug:ture就可以直接在网页上看到弹出的错误提示
                    });
                });
            } else {
                return;
            }
        },error:function(e){
            console.log(e);
        }
    });
}
package com.hlziben.web.controller.webController.wechatShare;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.hlziben.web.common.request.HonlineRestTemplate;
import com.hlziben.web.common.utils.EncryptUtils;
import com.hlziben.web.common.utils.HttpClientUtil;
import com.hlziben.web.common.utils.Setting;
import com.tzbao.api.common.utils.JsonResponse;
/**
 *
 *<dl>
 *<dt>类名:WechatShareController</dt>
 *<dd>描述: </dd>
 *</dl>
 */
@Controller
@RequestMapping("wechatShare")
public class WechatShareController {

    public static final Log log = LogFactory.getLog(WechatShareController.class);
    @Resource
    private HonlineRestTemplate honlineRestTemplate;
    @Resource
    private StringRedisTemplate numberRedisTemplate;



    /**
     * 向微信请求accessToken和ticket
     * @param role
     * @param phone
     * @param code
     * @param password
     * @param repassword
     * @param request
     * @param response
     * @param model
     * @return
     */
    @RequestMapping(method = RequestMethod.POST, value = "/wechatShare.do")
    @ResponseBody
    public Object register(
            @RequestParam("url") String url,   //前台传入URL
            HttpServletRequest request, HttpServletResponse response, ModelMap model) {

        try{
            //检查Redis中现有的accessToken和ticket
            Long timeStamp=System.currentTimeMillis();
            String accessToken=numberRedisTemplate.opsForValue().get("member_wechat_access_token");
            String appId=Setting.getSetting("weixin.app.id");
            String appSecret=Setting.getSetting("weixin.app.secret");
            String ticket=numberRedisTemplate.opsForValue().get("wechatTicket");

            //如果redis中的accessToken为空,则重新获取
            if(StringUtils.isBlank(accessToken)||StringUtils.isBlank(ticket)){
                String accessTokenUrl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appId+"&secret="+appSecret;
                JSONObject objectAuthToken=HttpClientUtil.httpGetRequest(accessTokenUrl);
                accessToken=objectAuthToken.get("access_token").toString();
                numberRedisTemplate.opsForValue().set("member_wechat_access_token",accessToken,Long.valueOf(6600), TimeUnit.SECONDS);              
                String ticketUrl="https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token="+accessToken;
                JSONObject objectTicket=HttpClientUtil.httpGetRequest(ticketUrl);
                ticket=objectTicket.get("ticket").toString();
                numberRedisTemplate.opsForValue().set("wechatTicket", ticket,Long.valueOf(6600), TimeUnit.SECONDS);
            }



            //获取微信accessToken及ticket
            Map<String, Object> resultMap = new HashMap<>();
            String nonceString=UUID.randomUUID().toString();
            String encodeStr="jsapi_ticket="+ticket+"&noncestr="+nonceString+"&timestamp="+timeStamp.toString()+"&url="+url;
            String signature=EncryptUtils.codesBySHA1(encodeStr);
            log.info(signature);
            resultMap.put("appId",appId);
            resultMap.put("nonceStr",nonceString);
            resultMap.put("timestamp", timeStamp.toString());
            resultMap.put("url", url);
            resultMap.put("signature",signature);
            resultMap.put("rawString",encodeStr);
            return JsonResponse.getSuccessResponse(resultMap);

        }catch(Exception e){
            log.error(e);
            return  JsonResponse.getServerErrorResponse("微信共享失败");
        }
    }


}

作者: 随风

出处: http://www.cnblogs.com/hanhaihu/>

关于作者:专注Java和前端!

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(739065949@qq.com)咨询.

原文地址:https://www.cnblogs.com/hanhaihu/p/8304020.html