`

微信 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);
         });
        
     });
        
}




分享到:
评论

相关推荐

    微信h5分享好友和朋友圈-内含html引入、wxshare.js、php服务端接口

    微信h5分享好友和朋友圈-内含html引入、wxshare.js、php服务端接口

    uniapp 微信H5分享 下载就能用

    针对uniapp 微信H5分享,我已经封装好,非常方便好用,有需要的朋友可以去下载,更多详细使用内容可以看我的博客https://blog.csdn.net/nihao123456789222/article/details/121954495

    php 微信h5支付完整版

    购买的php版微信h5支付分享给大家,帮助大家解决h5支付难题

    微信h5分享js接口写法老接口

    这个是我自己写的分享微信内的分享js写法,总是报错的参考一下,也可直接复制,另外还需要引用微信接口的js

    微信 H5分享 下载jssdk文件-附件资源

    微信 H5分享 下载jssdk文件-附件资源

    一键链接地图、微信h5一键打开qq、一键呼出

    在IT行业中,尤其是在移动互联网应用开发领域,"一键链接地图、微信H5一键打开QQ、一键呼出"这样的功能设计非常常见,它们极大地提升了用户体验,简化了操作流程。以下是对这些知识点的详细解释: 首先,"一键链接...

    微信h5小游戏源码

    4. **微信API集成**:由于是微信H5小游戏,所以往往需要集成微信的SDK,以便实现用户登录、分享、支付等功能。微信提供了JS-SDK,开发者可以调用其中的接口,与微信服务器进行通信,增强游戏的社交属性。 5. **游戏...

    微信h5游戏平台

    5. **发布**:将游戏上传到微信H5游戏平台,进行审核和发布,同时进行推广和运营。 微信H5游戏平台的优点在于其广泛的用户基础、便捷的传播方式以及较低的开发成本。它为开发者提供了展示创意和获取用户反馈的快速...

    微信H5答题小游戏,带分值、分享、问题可编辑

    微信H5答题小游戏的设计和开发涉及多个技术层面,主要包括以下几个方面: 1. **HTML5技术**:作为游戏的基础,HTML5提供了更丰富的网页交互能力,包括音频、视频、Canvas绘图、离线存储等,使得开发者能够创建出更...

    微信h5游戏源码

    - **响应式设计**:由于微信H5游戏要在不同尺寸的设备上运行,所以理解响应式设计原则,使游戏适应不同屏幕尺寸非常重要。 - **微信小游戏接口**:如果这些源码是专门针对微信小游戏开发的,那么可能涉及微信提供的...

    H5微信分享.rar

    H5微信分享好友朋友圈带图片和描述。本人亲测完全没问题,如果有问题包退。哈哈,过来支持一下吧!~~~~

    微信端html5页面调用分享接口示例

    主要介绍了微信端html5页面调用分享接口示例的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    微信h5游戏 夺宝源码

    微信h5游戏夺宝源码,拿出来一一起分享下。自己测试过的,可以用

    H5微信JS-SDK分享接口PHP

    微信JS-SDK分享接口,可通过javascript文件引入方式来实现自定义分享。 具体说明:https://blog.csdn.net/gaofei880219/article/details/80147575

    微信公众-提示分享到朋友圈样式demo-微信公众平台-微网站-微APP

    微信公众-提示分享到朋友圈样式demo-微信公众平台-微网站-微APP

    微信h5游戏平台源码(几十个)

    微信H5游戏平台源码通常包括以下几个主要部分: 1. **游戏逻辑**:这是游戏的核心部分,包含游戏规则、玩家交互、得分计算等。开发者通常会使用JavaScript来实现这些功能,有时也会结合CSS3和HTML5的新特性,如...

    微信h5游戏平台.rar

    微信H5游戏平台是一个基于HTML5技术开发的互动游戏平台,专为微信用户设计,让用户在微信环境中直接体验游戏,无需下载安装应用。这个压缩包包含的资源可能涉及多个方面,如前端页面、后端服务器逻辑、数据库配置、...

    node.js + H5 微信分享开发

    只进行微信分享,不获取用户信息,直接复制粘贴,然后修改请求域名就可以使用,未经同意,切勿转载,经本人实测可用,

Global site tag (gtag.js) - Google Analytics