微信JS-SDK实现 自定义微信分享、分享朋友圈等内容

1.准备工作

appId公众号id、申请好分享接口、ip白名单设置、JS接口安全域名 设置(必须是通过备案的)

2.引入js

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

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

wx.config({    
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。    
    appId: '', // 必填,公众号的唯一标识    
    timestamp: , // 必填,生成签名的时间戳    
    nonceStr: '', // 必填,生成签名的随机串    
    signature: '',// 必填,签名,见附录1    
    jsApiList: [   'onMenuShareTimeline',    
                 'onMenuShareAppMessage' ,
                 'onMenuShareQQ'  ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2    
});  

4.通过ready接口处理成功验证

wx.ready(function(){    
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。    
});  

5.通过error接口处理失败验证

wx.error(function(res){    
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。    
});    
页面源码:

 wx.config({    
             debug: false,    
             appId: 'xxxxxxxxxxxxxx',    
             timestamp: timestamp,    
             nonceStr: nonceStr,    
             signature: signature,    
             jsApiList: [    
                 'onMenuShareTimeline',    
                 'onMenuShareAppMessage' ,
                 'onMenuShareQQ'
             ]    
         });    
    	 
    	 wx.ready(function(){
             // wx.hideOptionMenu();
             wx.onMenuShareTimeline({
                 title: '',
                 link: '',
                 imgUrl: '',
                 success: function () { 
                     // 用户确认分享后执行的回调函数
                      //alert('分享到朋友圈成功');
                 },
                 cancel: function () { 
                     // 用户取消分享后执行的回调函数
                      //alert('你没有分享到朋友圈');
                 }
             });
             wx.onMenuShareAppMessage({
                   title: '',
                   desc: '',
                   link: '',
                   imgUrl: '',
                   trigger: function (res) {
                     // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
                   },
                   success: function (res) {
                       //alert('分享给朋友成功');
                   },
                   cancel: function (res) {
                     //alert('你没有分享给朋友');
                   },
                   fail: function (res) {
                     alert(JSON.stringify(res));
                   }
               });
             wx.onMenuShareQQ({
            	  title: '',
                  desc: '',
                  link: '',
                  imgUrl: '',
            	 success: function () {
            	 // 用户确认分享后执行的回调函数
            	 },
            	 cancel: function () {
            	 // 用户取消分享后执行的回调函数
            	 }
            	 });
         });

java 代码 获取微信的签名、时间戳、签名随机串
url 是你当前的地址,微信通过当前地址生成token
@RequestMapping("/doGetWxToken")
	public RespBean<Map<String,Object>> doEditAccractMemberStatus(String url) throws Exception{
		RespBean<Map<String,Object>>  resp = new RespBean<Map<String,Object>> ();
		Map<String,Object> map  = new HashMap<String,Object>();
		String str = SendGET("https://api.weixin.qq.com/cgi-bin/token", "grant_type=client_credential&appid=XX&secret=XXXX");
		String a = str.substring(str.indexOf("{"), str.indexOf("}")+1);
		JSONObject jo = JSON.parseObject(a);
		String token = jo.getString("access_token");//获取token
		String info = SendGET("https://api.weixin.qq.com/cgi-bin/ticket/getticket", "access_token="+token+"&type=jsapi");
		JSONObject ticketO = JSON.parseObject(info);
		String ticket = ticketO.getString("ticket");//获取ticket
		 Map<String, String> ret = WxSign.sign(ticket, url);
         for (Map.Entry entry : ret.entrySet()) {
                System.out.println(entry.getKey() + "=" + entry.getValue());
                map.put(entry.getKey().toString(), entry.getValue());
            }
		resp.setBody(map);
		return resp;
	}
	//直接java访问拿对应的数据
	public static String SendGET(String url,String param){
		   String result="";//访问返回结果
		   BufferedReader read=null;//读取访问结果
		    
		   try {
		    //创建url
		    URL realurl=new URL(url+"?"+param);
		    //打开连接
		    URLConnection connection=realurl.openConnection();
		     // 设置通用的请求属性
		             connection.setRequestProperty("accept", "*/*");
		             connection.setRequestProperty("connection", "Keep-Alive");
		             connection.setRequestProperty("user-agent",
		                     "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
		             //建立连接
		             connection.connect();
		          // 获取所有响应头字段
		             Map<String, List<String>> map = connection.getHeaderFields();
		             // 遍历所有的响应头字段,获取到cookies等
		             for (String key : map.keySet()) {
		                 System.out.println(key + "--->" + map.get(key));
		             }
		             // 定义 BufferedReader输入流来读取URL的响应
		             read = new BufferedReader(new InputStreamReader(
		                     connection.getInputStream(),"UTF-8"));
		             String line;//循环读取
		             while ((line = read.readLine()) != null) {
		                 result += line;
		             }
		   } catch (IOException e) {
		    e.printStackTrace();
		   }finally{
		    if(read!=null){//关闭流
		     try {
		      read.close();
		     } catch (IOException e) {
		      e.printStackTrace();
		     }
		    }
		   }
		     
		   return result; 
		 }
	





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,关于微信分享的问题,我可以给你一些指导。首先,你需要在你的 HTML5 页面中引入微信 JS-SDK,然后在页面加载完成后初始化 JS-SDK。接着,你需要通过 JS-SDK 提供的接口来配置分享内容和参数,最后调用分享接口即可完成分享。 具体步骤如下: 1. 引入微信 JS-SDK 在 HTML 页面中引入微信 JS-SDK,如下所示: ```html <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> ``` 2. 初始化 JS-SDK 在页面加载完成后,初始化 JS-SDK。你需要先通过微信公众平台获取到你的 AppID 和 AppSecret,然后使用这些信息初始化 JS-SDK。示例代码如下: ```javascript wx.config({ debug: false, appId: 'your app id', timestamp: 'your timestamp', nonceStr: 'your nonceStr', signature: 'your signature', jsApiList: [ 'onMenuShareAppMessage', 'onMenuShareTimeline', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone' ] }); ``` 其中,`appId`、`timestamp`、`nonceStr` 和 `signature` 分别是通过微信公众平台生成的,用于验证你的身份和权限的参数。`jsApiList` 是你需要使用的 JS-SDK 接口列表。 3. 配置分享内容和参数 在初始化 JS-SDK 后,你需要通过 JS-SDK 提供的接口来配置分享内容和参数。示例代码如下: ```javascript wx.ready(function() { wx.onMenuShareAppMessage({ title: '分享标题', desc: '分享描述', link: '分享链接', imgUrl: '分享缩略图', trigger: function(res) {}, success: function(res) {}, cancel: function(res) {}, fail: function(res) {} }); wx.onMenuShareTimeline({ title: '分享标题', link: '分享链接', imgUrl: '分享缩略图', trigger: function(res) {}, success: function(res) {}, cancel: function(res) {}, fail: function(res) {} }); }); ``` 其中,`onMenuShareAppMessage` 和 `onMenuShareTimeline` 分别是分享给好友和分享朋友圈的接口。你需要提供分享的标题、描述、链接和缩略图等参数。 4. 调用分享接口 最后,在页面中调用分享接口即可完成分享。示例代码如下: ```javascript wx.ready(function() { wx.onMenuShareAppMessage({ title: '分享标题', desc: '分享描述', link: '分享链接', imgUrl: '分享缩略图', trigger: function(res) {}, success: function(res) {}, cancel: function(res) {}, fail: function(res) {} }); wx.onMenuShareTimeline({ title: '分享标题', link: '分享链接', imgUrl: '分享缩略图', trigger: function(res) {}, success: function(res) {}, cancel: function(res) {}, fail: function(res) {} }); // 在需要分享的地方调用 shareAppMessage 和 shareTimeline 接口 // 示例代码如下 document.querySelector('#share-btn').addEventListener('click', function() { wx.shareAppMessage({ title: '分享标题', desc: '分享描述', link: '分享链接', imgUrl: '分享缩略图', trigger: function(res) {}, success: function(res) {}, cancel: function(res) {}, fail: function(res) {} }); }); document.querySelector('#share-timeline-btn').addEventListener('click', function() { wx.shareTimeline({ title: '分享标题', link: '分享链接', imgUrl: '分享缩略图', trigger: function(res) {}, success: function(res) {}, cancel: function(res) {}, fail: function(res) {} }); }); }); ``` 这样就完成了微信分享功能的实现。需要注意的是,由于微信的安全机制,分享的链接必须是在微信公众平台中配置过的域名,否则可能无法正常分享
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值