zoukankan      html  css  js  c++  java
  • 微信开发(三)微信分享朋友朋友圈

    这里基于微信的都是需要用到
    1. 参考以下文档获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token):../15/54ce45d8d30b6bf6758f68d2e95bc627.html

    点击打开链接

    微信分享朋友朋友圈这里需要用到这个其实比较简单主要的配置就是

    1服务器绑定域名,

    2.引入js( https://res.wx.qq.com/open/js/jweixin-1.0.0.js


    3.通过config接口注入权限验证配置

    (注意这里签名返回值放在前台ajax是因为二次分享的时候url会改变所以这样不然直接把签名的值放在request值里面会导致二次分享失败)

    function getConfigData(){
    	var url =window.location.href;
    	url = encodeURIComponent(url);
    	var data ="url="+url;
    	$.ajax({
    		type:'post',
    		url:'后台验签url',
    		data:data,
    		asyc:true,
    		success:function(data){
    			if(data){
    				wx.config({
    				    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    				    appId: data.appId, // 必填,公众号的唯一标识
    				    timestamp:data.timestamp, // 必填,生成签名的时间戳
    				    nonceStr: data.nonceStr, // 必填,生成签名的随机串
    				    signature: data.signature,// 必填,签名,见附录1
    				    jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
    				});
    			}
    			wxReady();
    		},
    		error:function(){
    			alert("系统繁忙请稍后再试");
    		}
    	})
    }
    
    wx.ready(function(){
    	wx.onMenuShareTimeline({
    	    title: share_title, // 分享标题
    	    link:share_url, // 分享链接
    	    imgUrl: act_image_url, // 分享图标
    	    success: function () { 
    	    	
    	    },
    	    cancel: function () { 
    	        // 用户取消分享后执行的回调函数
    	    }
    	});
    	wx.onMenuShareAppMessage({
    	    title: share_title, // 分享标题
    	    desc: act_message, // 分享描述
    	    link: share_url, // 分享链接
    	    imgUrl: act_image_url, // 分享图标
    	    type: 'link', // 分享类型,music、video或link,不填默认为link
    	    dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
    	    success: function () { 
    	    	
    	    	
    	    },
    	    cancel: function () { 
    	        // 用户取消分享后执行的回调函数
    	    }
    	});
    });
    后台代码

    生成签名

    @RequestMapping(value="/getConfigData",method = RequestMethod.POST)
    	@ResponseBody
    	public Map<String,String> getConfigData(HttpServletRequest request){
    		String id =request.getParameter("id");
    		String url = request.getParameter("url");
    		String path = request.getContextPath(); 
    		String basePath ="xiangm"
    		String shareUrl =basePath+"/act/toActView/"+id+".html";
    		Map<String,String> map =Snippet.sign(url);
    		map.put("shareUrl", shareUrl);
    		map.put("appId",Snippet.getAppid());
    		return map;
    	}

    
    
    public static Map<String, String> sign(String url) {
            Map<String, String> ret = new HashMap<String, String>();
            String nonce_str = create_nonce_str();
            String timestamp = create_timestamp();
            String jsapi_ticket="";
    		try {
    			jsapi_ticket = getJsapiTicket();
    		} catch (Exception e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}
            String string1;
            String signature = "";
    
            //注意这里参数名必须全部小写,且必须有序
            string1 = "jsapi_ticket=" + jsapi_ticket +
                      "&noncestr=" + nonce_str +
                      "×tamp=" + timestamp +"&url="+url;
           
    
            try
            {
                MessageDigest crypt = MessageDigest.getInstance("SHA-1");
                crypt.reset();
                crypt.update(string1.getBytes("UTF-8"));
                signature = byteToHex(crypt.digest());
            }
            catch (NoSuchAlgorithmException e)
            {
                e.printStackTrace();
            }
            catch (UnsupportedEncodingException e)
            {
                e.printStackTrace();
            }
    
           
            ret.put("jsapi_ticket", jsapi_ticket);
            ret.put("nonceStr", nonce_str);
            ret.put("timestamp", timestamp);
            ret.put("signature", signature);
    
            return ret;
        }

    
    


  • 相关阅读:
    014-More than one file was found with OS independent path 'META-INF/DEPENDENCIES'
    013-一个Activity怎么调用另一个Activity的方法返回数据(转)
    012-关于EditText中的getText()方法的返回值类型以及string的转换问题(转)
    011-frament中不能调用getSystemService()方法
    010-Android开发解决控件超出屏幕,不能正常显示的问题
    009-在Fragment中实现Activity跳转功能
    Oracle分区表
    Oracle构造列
    Oracle集合
    Oracle多对多、维表
  • 原文地址:https://www.cnblogs.com/root429/p/9251384.html
Copyright © 2011-2022 走看看