`

微信 h5 分享

    博客分类:
  • java
 
阅读更多
微信 h5分享
1.前端jsp 需要去除追加字符,传到后端进行签名
2.后端返回配置。

后端代码:

@RequestMapping(value="getJingliList")
    public void getJingliList(ModelMap modelMap,HttpServletResponse response,HttpServletRequest request,String url){
   
    //String url ="http://jingli.shiyetv.com";
   
    Map<String,Object> map = new HashMap<>();
   
    String timeStamp = WxConfig.create_timestamp();//时间戳
         String nonceStr = WxConfig.getUUID();//随机字符串,不长于32位
         String signature = WxConfig.getSignature( url, timeStamp, nonceStr);
         map.put("timeStamp", timeStamp);
         map.put("nonceStr", nonceStr);
         map.put("url", url);
         map.put("signature", signature);
         map.put("appid", WxConfig.APPID);

        
    Tools.printJsonToPage(map, response);
    }


配置类



package com.jingli.util;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import java.util.*;

/**
* Created by Administrator on 2017/6/9.
*/
public class WxConfig {

    private final static Log logger = LogFactory.getLog(WxConfig.class);
    public final static String WEIXIN_JSAPI_TICKET_URL ="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi";

    public static String APPID="xxx";

    private static String APPSECRET="xx";

    private static Map<String, String> map = new HashMap<String,String>();



    //access_token
    public static Map<String,String> getAccessToken(){
        String access_token =null;
        JsonObject object = null;
        Long nowDate = new Date().getTime();

        String  accessToken = map.get("access_token");
        String time = map.get("time");

        if (accessToken != null && time != null && nowDate - Long.parseLong(time) < 3000 * 1000) {
            logger.info("get getAccessToken from cache " +accessToken);
           return map;
        }
        else{
            String url =  "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+APPID+"&secret="+APPSECRET;
            try{
                logger.info("get getAccessToken from remote " +nowDate );
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(url);
                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                String tokens = EntityUtils.toString(httpEntity, "utf-8");
                Gson token_gson = new Gson();
                object = token_gson.fromJson(tokens, JsonObject.class);

                access_token = object.get("access_token").toString().replaceAll("\"", "");
                String expires_in = object.get("expires_in").toString().replaceAll("\"", "");
                map.put("access_token",access_token);
                map.put("time",nowDate+"");
                //mapToken.put("accessToken", access_token);
                logger.info("access_token:"+access_token+";expires_in:"+expires_in);

               String jsTickect= getJsapiTicket(access_token);
               map.put("jsapi_ticket",jsTickect);


            }catch (Exception e) {
                access_token = null;
                e.printStackTrace();
                logger.error("errcode:{}:"+object.get("errcode")+"errmsg:{}:"+object.get("errmsg"));
            }
        }
        return map;
    }

    //jsapi_ticket
    public static String getJsapiTicket(String accessToken){
        String ticket =null;
        JsonObject object = null;
        Long nowDate = new Date().getTime();

            String url =  "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+accessToken+"&type=jsapi";
            try{
                logger.info("get getJsapiTicket from remote " +nowDate );
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(url);
                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                String tokens = EntityUtils.toString(httpEntity, "utf-8");
                Gson token_gson = new Gson();
                object = token_gson.fromJson(tokens, JsonObject.class);
                ticket = object.get("ticket").toString().replaceAll("\"", "");
                String expires_in = object.get("expires_in").toString().replaceAll("\"", "");
                logger.info("jsapi_ticket:"+ticket+";expires_in:"+expires_in);
            }catch (Exception e) {
                ticket = null;
                e.printStackTrace();
                logger.error("ticket  errcode:{}:"+object.get("errcode")+"errmsg:{}:"+object.get("errmsg"));
            }

            return ticket;

    }

    //生成随机字符串UUID
    public static String getUUID(){
        String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
        return uuid;
    }

    //JS-SDK Signature
    public static String getSignature(String url,String timeStamp,String nonceStr){
        Map<String,String> accessToken = getAccessToken();
        String jsapi_ticket =accessToken.get("jsapi_ticket");

        logger.info("accessToken==="+accessToken);
        String[] paramArr = new String[] { "jsapi_ticket=" + jsapi_ticket,
                "timestamp=" + timeStamp, "noncestr=" + nonceStr, "url=" + url };
        Arrays.sort(paramArr);
// 将排序后的结果拼接成一个字符串
        String content = paramArr[0].concat("&"+paramArr[1]).concat("&"+paramArr[2])
                .concat("&"+paramArr[3]);
        logger.info("微信JS-SDK权限验证的签名串:"+content);
        //这个签名.主要是给加载微信js使用.别和上面的搞混了.
        String signature =  DigestUtils.shaHex(content);
        logger.info("微信JS-SDK权限验证的签名:"+signature);
        return signature;
    }

    public static String create_timestamp() {
        return Long.toString(System.currentTimeMillis() / 1000);
    }

}

前端代码

<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js" ></script>

function detail(){

var urlAction="${web_root}/showPage/getJingliList.action"
var url=window.location.href.split('#')[0];
var data={
url:url
};

getRemotePostData(urlAction,data,showData)

function showData(res){

var count1 ="我是第"+res.count+"位";
$("#showCount").html(count1);
var list = res.jingliList;
var area="";

var vote ="";


for(var i=0;i<list.length;i++){
//console.info(list[i]);
var item =list[i];
var name =item.name;
var count= item.count;
var id = item.id;
area +='<span class="bigbox5-left-text">'+name+'</span>';

vote +='<div class="bigbox5-rightbox">' +
                '<span class="bigbox5-right-btn" onclick="vote('+id+')" >敬礼</span>'+
                '<span class="bigbox5-right-text1" id="count_'+id+'">'+count+'</span>'+
             '</div>';


}

$("#showArea").html(area);
$("#showResult").html(vote);

initConfig(res);

}

}


function initConfig(res){

wx.config({
         debug: false,
         appId: res.appid,
         timestamp:res.timeStamp,
         nonceStr:res.nonceStr,
         signature:res.signature,
         jsApiList: [
             'checkJsApi',
             'onMenuShareTimeline',
             'hideOptionMenu',
             'onMenuShareAppMessage'
         ]
     });


     wx.ready(function(){
         //wx.hideOptionMenu();/***隐藏分享菜单****/
         wx.checkJsApi({
             jsApiList: [
                 'getLocation',
                 'onMenuShareTimeline',
                 'onMenuShareAppMessage'
             ],
             success: function (res) {
                 //alert(res.errMsg);
             }
         });


   
    var title="向国旗敬礼";
    var desc ="上海文明网";
   
    var url=window.location.href.split('#')[0];
    var link=url;
    var imgUrl="http://xxx.shiyetv.com/images/guoqi.gif"
         wx.onMenuShareAppMessage({
             title: title,
             desc: desc,
             link: link,
             imgUrl: imgUrl,
             type: 'link',


             success: function (res) {
                 alert('分享成功');

             },
             cancel: function (res) {
                 //alert('已取消');
             },
             fail: function (res) {
                 //alert(res.errMsg);
             }
         });

         // 2.2 监听“分享到朋友圈”按钮点击、自定义分享内容及分享结果接口
         wx.onMenuShareTimeline({
             title:title,
             desc: desc,
             link: link,
             imgUrl: imgUrl,
             type: 'link',

             success: function (res) {
                 alert('分享成功');
                 //分享之后增加游戏次数

             },
             cancel: function (res) {
                 //alert('已取消');
             },
             fail: function (res) {
                // alert(res.errMsg);
             }
         });

         wx.error(function (res) {
            // alert(res.errMsg);
         });
        
     });
        
}




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics