精华内容
下载资源
问答
  • android微信纯图片分享和网页分享

    千次阅读 2016-12-10 10:57:44
    由于公司要接入微信分享,需求是接入纯图片分享和网页分享。这里给大家分享一下是怎么接入的。 首先在微信开发者平台注册应用 https://open.weixin.qq.com/cgi-bin/frame?t=home/app_tmpl&lang=zh_CN 微信sdk下载 ...

      由于公司要接入微信分享,需求是接入纯图片分享和网页分享。这里给大家分享一下是怎么接入的。
      首先在微信开发者平台注册应用
      https://open.weixin.qq.com/cgi-bin/frame?t=home/app_tmpl&lang=zh_CN
      微信sdk下载
       https://open.weixin.qq.com/cgi-bin/showdocument?         action=dir_list&t=resource/res_list&verify=1&id=open1419319167&token=&lang=zh_CN
      把下载到的压缩包解压,把libs里面的jar复制到项目中
      在manifest配置联网和读取sd卡权限

    <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" >
        </uses-permission>
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    如果需要接收微信分享后的回调需要在项目中建一个以你工程的包名加.wxapi的包,如项目包名是net.sourceforge.simcpux,则需要建立包为net.sourceforge.simcpux.wxapi。在这个包里面新建一个WXEntryActivity
    分享后会回调该方法

             public void onResp(BaseResp resp) {  
           		System.out.println("resp.errCode="+resp.errCode);
            	switch (resp.errCode) {  
            	case BaseResp.ErrCode.ERR_OK:  
                //分享成功  
            	Toast.makeText(this, "分享成功", Toast.LENGTH_SHORT).show();
            	finish();
    		wxApi.registerApp(Constants.APP_ID); 
            	break;
    		case BaseResp.ErrCode.ERR_USER_CANCEL: 
    		//分享取消 Toast.makeText(this, "分享取消", Toast.LENGTH_SHORT).show(); finish(); 
    		break; case BaseResp.ErrCode.ERR_AUTH_DENIED: 
    		//分享拒绝 Toast.makeText(this, "分享拒绝", Toast.LENGTH_SHORT).show(); finish(); 
    		break; 
    		} 
    	}

    首先创建一个wxapi实例

    private IWXAPI wxApi= WXAPIFactory.createWXAPI(context, Constants.APP_ID);
    private static final int THUMB_SIZE = 150;

    //Constants.APP_ID为你在微信官网申请的appid
    注册你的APPid到微信
    wxApi.registerApp(Constants.APP_ID); 
    微信图片分享
       /**
        * 
        * @param 
        * imgurl图片本地路径
        * sendtype(0:分享到微信好友,1:分享到微信朋友圈) 
        */

    	public void imageShare(String imgurl,int sendtype){
    			File file = new File(imgurl);
    			if (!file.exists()) {
    				
    				Toast.makeText(context, "图片不存在", Toast.LENGTH_LONG).show();
    				
    			}
    			WXImageObject imgObj = new WXImageObject();
    			imgObj.setImagePath(imgurl);
    			WXMediaMessage msg = new WXMediaMessage();
    			msg.mediaObject = imgObj;
    			Bitmap bmp = BitmapFactory.decodeFile(imgurl);
    			Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true);
    			msg.setThumbImage(thumbBmp);
    			bmp.recycle();
    			SendMessageToWX.Req req = new SendMessageToWX.Req();
    			req.transaction = String.valueOf(System.currentTimeMillis());
    			req.message = msg;
    			req.scene = sendtype==0?SendMessageToWX.Req.WXSceneSession:SendMessageToWX.Req.WXSceneTimeline; 
    			
    			wxApi.sendReq(req);    	
    	    }

    微信网页分享
       /**
        * 
        * @param 
        * weburl- 网页URL
        * 图片本地路径 -imgurl
        * 网页标题 -title
        * 网页内容摘要 -description
        * sendtype(0:分享到微信好友,1:分享到微信朋友圈) 
        */

    	public void webShare(String weburl,String imgurl,String title,String description,int sendtype){
    			WXWebpageObject webpage = new WXWebpageObject();
    			webpage.webpageUrl = weburl;
    			WXMediaMessage msg = new WXMediaMessage(webpage);
    			msg.title =title;
    			msg.description =description ;
    			Bitmap bmp = BitmapFactory.decodeFile(imgurl);
    			Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true);
    			msg.setThumbImage(thumbBmp);
    			bmp.recycle();
    			SendMessageToWX.Req req = new SendMessageToWX.Req();
    			req.transaction = buildTransaction("webpage");
    			req.message = msg;
    			req.scene = sendtype==0?SendMessageToWX.Req.WXSceneSession:SendMessageToWX.Req.WXSceneTimeline; 
    			wxApi.sendReq(req);
    			
    	    }
    
    		private String buildTransaction(final String type) {
    			return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
    		}

    本篇微信分享到此结束,下篇介绍QQ的图片分享和网页分享。

    展开全文
  • 微信内分享网页自定义标题,图片,描述

    千次阅读 热门讨论 2019-06-22 15:23:17
    公司有个需求,将一个微网站链接,网页,外部网站在微信中打开,然后分享给其他人,但是在分享过程中发现分享完微信中显示的是这样子, 标题有了,但是简介显示网址图片没有,而我想要的是上面另一种样式。...

    背景描述:

    公司有个需求,将一个微网站链接,网页,外部网站在微信中打开,然后分享给其他人,但是在分享过程中发现分享完微信中显示的是这样子,

          

    标题有了,但是简介显示网址,图片没有,而我想要的是上面另一种样式。标题,简介和图片都可自定义的。由此产生了这篇文章。

    必备要求:

    1. 有公众号,公众号必须认证过,如果不确定认证没认证过,就看下图,在微信公众平台https://mp.weixin.qq.com最下面接口权限中看分享接口后面状态是已获得还是未获得,已获得才可以用,未获得说明没有认证过,就不用往下看了。

    2.必须要有已备案的域名和服务器。实现这个功能需要调用后台接口,而且接口的域名和分享网站,网页的域名是一样的。

    这里要注意:在二次分享时候如果分享地址是http的话安卓手机正常,苹果手机不正常,如果是用https的话苹果手机也正常了。

    参考资料:

    1. 简书网页分享到微信https://www.jianshu.com/p/bf743d52c6d3
    2. 微信公众平台https://mp.weixin.qq.com
    3. 微信JS-SDK说明文档

    实现过程:

    上面准备工作做完以后开始实现。

    1. 首先可以先阅读以下微信的JS-SDK的说明文档
      微信JS-SDK说明文档
    2. 绑定域名,登录微信公众平台,进入“公众号设置”的功能设置里面填写js接口安全域名,这个是要填写的是你微信浏览器要打开的域名地址。不能添加IP地址。

      设置时候点击设置里面有说明,如下图

      画红圈的要注意,下载完的那个文件放进去一定要在浏览器能访问才能进行下一步。我是把这个文件放到tomcat下面的ROOT文件夹中,可以直接域名后面加文件名访问。

      网页访问的效果:
    3. 将你服务器的ip地址添加白名单。
      在开发-基本配置里面设置ip白名单,不然调用接口获取不到token.
    4. 在需要调用js接口的页面接入JS文件 http://res.wx.qq.com/open/js/jweixin-1.4.0.js  ,1.4.0是目前最新版本。网上有些地方用的是1.2.0.js,那个已经弃用了。
    5. 通过config接口注入权限并验证配置
      wx.config({
          debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
          appId: '', // 必填,公众号的唯一标识
          timestamp: , // 必填,生成签名的时间戳
          nonceStr: '', // 必填,生成签名的随机串
          signature: '',// 必填,签名
          jsApiList: [] // 必填,需要使用的JS接口列表
      });

       

    6. 这一步算是整个步骤中最关键的一步,必须正确的配置信息才可以进行调用JS-SDK。

    获取配置

     获取签名实际是需要四步

    1. 根据appId和appsecret获取access_token;

    2. 使用access_token获取jsapi_ticket;

    3. 使用时间戳,随机数,jsapi_ticket和要访问的url按照签名算法拼接字符串;

    4. 对第三步的字符串进行SHA1加密,得到签名;
    这步是在服务器后台写的一个工具类里面实现的,测试时候可以先后台获取,前台页面将参数写死,实际用的时候最好动态获取这些数据。如果参数写死的话会二次分享会出问题,在微信中第二次分享,微信会自己加一个参数上去,这样点开在分享的时候签名和url会匹配不上。

    第一步,获取access_token

    appId和appsecret可以在微信公众平台--开发-基本配置中查找

    /**
    	 * 第一步,获取access_token
    	 *	appId和appsecret可以在微信公众平台--开发-基本配置中查找
    	 */
    	public static String getAccess_token(String appId, String appSecret){
    
            String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + appSecret;
            String accessToken = null;
            try
            {
                URL urlGet = new URL(url);
                HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
                http.setRequestMethod("GET"); // 必须是get方式请求
                http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                http.setDoOutput(true);
                http.setDoInput(true);
                System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒
                System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒
                http.connect();
                InputStream is = http.getInputStream();
                int size = is.available();
                byte[] jsonBytes = new byte[size];
                is.read(jsonBytes);
                String message = new String(jsonBytes, "UTF-8");
                JSONObject jsonObj = JSONObject.fromObject(message);
                accessToken = jsonObj.getString("access_token");
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            return accessToken;
        }
    	

    第二步 获取jsapi_ticket

    /**
         * 第二步:获得ACCESS_TICKET
         * 
         * @Title: ACCESS_TICKET
         * @Description: 获得ACCESS_TICKET
         * @param @return 设定文件
         * @return String 返回类型
         * @throws
         */
        public static String getAccess_ticket(String access_token) {  
            String ticket = null;  
            String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+ access_token +"&type=jsapi";//这个url链接和参数不能变  
            try {  
                URL urlGet = new URL(url);  
                HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();  
                http.setRequestMethod("GET"); // 必须是get方式请求  
                http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");  
                http.setDoOutput(true);  
                http.setDoInput(true);  
                System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒  
                System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒  
                http.connect();  
                InputStream is = http.getInputStream();  
                int size = is.available();  
                byte[] jsonBytes = new byte[size];  
                is.read(jsonBytes);  
                String message = new String(jsonBytes, "UTF-8");  
                JSONObject demoJson = JSONObject.fromObject(message);  
                System.out.println("JSON字符串:"+demoJson);  
                ticket = demoJson.getString("ticket");  
                is.close();  
            } catch (Exception e) {  
                    e.printStackTrace();  
            }  
            return ticket;  
        }  

    这里拿到对应的jsapi_ticket之后就可以进行参数排序和拼接字符串并加密

    第三步:SHA1加密

     /**
         * 第三步:SHA1加密
         */
        public static String SHA1(String decript) {  
            try {  
                MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1");  
                digest.update(decript.getBytes());  
                byte messageDigest[] = digest.digest();  
                // Create Hex String  
                StringBuffer hexString = new StringBuffer();  
                // 字节数组转换为 十六进制 数  
                    for (int i = 0; i < messageDigest.length; i++) {  
                        String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);  
                        if (shaHex.length() < 2) {  
                            hexString.append(0);  
                        }  
                        hexString.append(shaHex);  
                    }  
                    return hexString.toString();  
           
                } catch (NoSuchAlgorithmException e) {  
                    e.printStackTrace();  
                }  
                return "";  
        }  

    加密算法转载自:http://www.open-open.com/lib/view/open1392185662160.html

    第四步: 获取签名

    /**
         * 第4步获取签名
         * 公众号
       	 * String appId="wx86b6597*****";
         * String appSecret="aeb428ffb9a8a071fc4******";
         */
        public static void main(String[] args) { 
        	String appId="wx118d752d*****";  //这里写自己的appId
        	String appSecret="947cce9d2808bca0976788d4*****";
            //1、获取AccessToken  
            String accessToken = getAccess_token(appId, appSecret);  
              
            //2、获取Ticket  
            String jsapi_ticket = getAccess_ticket(accessToken);  
              
            //3、时间戳和随机字符串  
            String noncestr = UUID.randomUUID().toString().replace("-", "").substring(0, 16);//随机字符串  
            String timestamp = String.valueOf(System.currentTimeMillis() / 1000);//时间戳  
              
            System.out.println("accessToken:"+accessToken+"\njsapi_ticket:"+jsapi_ticket+"\n时间戳:"+timestamp+"\n随机字符串:"+noncestr);  
              
            //4、获取url  
            String url="http://api.groupusonline.com/txrtWeb/test.html";  
            /*根据JSSDK上面的规则进行计算,这里比较简单,我就手动写啦 
            String[] ArrTmp = {"jsapi_ticket","timestamp","nonce","url"}; 
            Arrays.sort(ArrTmp); 
            StringBuffer sf = new StringBuffer(); 
            for(int i=0;i<ArrTmp.length;i++){ 
                sf.append(ArrTmp[i]); 
            } 
            */  
              
            //5、将参数排序并拼接字符串  
            String str = "jsapi_ticket="+jsapi_ticket+"&noncestr="+noncestr+"&timestamp="+timestamp+"&url="+url;  
             
            //6、将字符串进行sha1加密  
            String signature =SHA1(str);  
            System.out.println("参数:"+str+"\n签名:"+signature);  
        } 

    上面是工具类里面的内容,接下来在控制类里面写调用接口。上面的这些内容就可以算出来签名和一些配置需要的东西,测试时候可以直接算出来在html页面里面将参数写死。

    第五步:调用接口

    /**
     * 微信分享相关
     * Created by yf on 2019/6/20.
     */
    @Controller
    @ResponseBody
    @RequestMapping("wx")
    public class WeChatHander {
    
        private Logger log = LoggerFactory.getLogger(WeChatHander.class);
        //公众号信息
        private static final String appId = "wx118d****12221";
        private static final String appSecret="947cce9***88d4b898db3e";
        //微信自动义分享
        @RequestMapping("share")
        public Object share(HttpSession session,String URL){
            String url="";
            //需要转换解码url
            try {
                url = java.net.URLDecoder.decode(URL,"UTF-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            //获取access_token,这里要从存到session,生成这个参数的wx调用接口有调用次数限制。这部分存session,下面的下载文件里面没有更新,自己添加进去吧,不然接口次数很快就用完了。
            String aeecss_token=(String) session.getAttribute("aeecss_token");
            if(aeecss_token==null){
            	aeecss_token = WeChatUtil.getAccess_token(appId, appSecret);
            	session.setAttribute("aeecss_token", aeecss_token);
            }
            //获取access_ticket
            String aeecss_ticket=(String) session.getAttribute("aeecss_ticket");
            if(aeecss_ticket==null){
            	aeecss_ticket = WeChatUtil.getAccess_ticket(aeecss_token);
            	session.setAttribute("aeecss_ticket", aeecss_ticket);
            }
            //String aeecss_ticket = WeChatUtil.getAccess_ticket(aeecss_token);
             //3、时间戳和随机字符串  
            String nonceStr = UUID.randomUUID().toString().replace("-", "").substring(0, 16);//随机字符串  
            String timestamp = String.valueOf(System.currentTimeMillis() / 1000);//时间戳  
            System.out.println("accessToken:"+aeecss_token+"\njsapi_ticket:"+aeecss_ticket+"\n时间戳:"+timestamp+"\n随机字符串:"+nonceStr);  
            //4、获取url  
            //5、将参数排序并拼接字符串  
            String str = "jsapi_ticket="+aeecss_ticket+"&noncestr="+nonceStr+"&timestamp="+timestamp+"&url="+url;   
            //6、将字符串进行sha1加密  
            String signature =WeChatUtil.SHA1(str);  
            System.out.println("参数:"+str+"\n签名:"+signature);  
            
            
            Map<String,String> map=new HashMap();
            map.put("appId",appId);
            map.put("timestamp",timestamp);
            map.put("accessToken",aeecss_token);
            map.put("ticket",aeecss_ticket);
            map.put("nonceStr",nonceStr);
            map.put("signature",signature);
        	return map;
        }
    }

    这样通过这个接口获取签名后把所有的信息都返回json格式了。概要的都有了,这是就可以配置config了,此时html页面中应该是:这是参数写死的时候测试用。

    
    
    <script type="text/javascript">
    
        wx.config({
        debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: 'wx118d75***212221', // 必填,公众号的唯一标识
        timestamp:'1560929330' , // 必填,生成签名的时间戳
        nonceStr: 'ab1ef978a35f4d4f', // 必填,生成签名的随机串
        signature: '13159896a4f8f461e0f****9df4029818e6e',// 必填,签名
        jsApiList: [// 必填,需要使用的JS接口列表
            'updateAppMessageShareData',
            'updateTimelineShareData'
         
    		], // 需要检测的JS接口列表,所有JS接口列表见附录2,
    	});
        //ready
        wx.ready(function () {   //需在用户可能点击分享按钮前就先调用
        	shareData = {
        	        title: "测试标题",  // 分享标题
        	        desc: "测试描述",            // 分享描述
        	        link: "http://****.com/txrtWeb/test.html",                // 分享链接
        	        imgUrl: "http://****.com/images/logo.png",  // 分享图标
        	        success: function() {
        	          // 设置成功
        	        }
        	    };
        	    // 1.4.0 新接口 (只调用这个接口在安卓下是无效的)
        		wx.updateAppMessageShareData(shareData);
        	    wx.updateTimelineShareData(shareData);
    	});            
    </script>

    参数从接口获取的时候如下:

    <!--  Meta for OpenGraph -->
      <meta name="title" content="测试页面标题从meta获取">
      <meta name="description" content="描述">
      <!-- End -->
      <script src="include/jquery-1.7.1.min.js" language="JavaScript"></script>
      <script src="http://res2.wx.qq.com/open/js/jweixin-1.4.0.js"language="JavaScript"></script>    <!-- 微信js -->
    
    <!--微信分享相关js -->
    	<script type="text/javascript">
    		var title=document.querySelector('meta[name="title"]').getAttribute('content');   //网页标题
    		var desc=document.querySelector('meta[name="description"]').getAttribute('content');   //网页描述
    			 $.ajax({
    	             async : true,   //这里参数true和false在微信中打开会有不同效果,实际用的时候用false,用true时候测试会有提示性内容。
    				 url : 'http://****.com/**/wx/share',
    				 //url : 'http://localhost:8081/txrt_api/wx/share',
    	             type : "POST",
    	             dataType : "json", // 返回的数据类型,设置为JSONP方式	   
    	             data : {
    	                 URL : encodeURIComponent(window.location.href.split("#")[0])   
    	             }, 
    	             success: function(response, status, xhr){
    	                 //console.log('状态为:' + status + ',状态是:' + xhr.statusText);
    	               // alert("进来了");
    					wx.config({
    						debug: false, //调试阶段建议开启,关闭就不弹提示了
    						appId: response.appId,//APPID
    						timestamp: response.timestamp,//上面main方法中拿到的时间戳timestamp
    						nonceStr: response.nonceStr,//上面main方法中拿到的随机数nonceStr
    						signature: response.signature,//上面main方法中拿到的签名signature
    						//需要调用的方法接口
    						jsApiList: [         
                           'updateAppMessageShareData','updateTimelineShareData']
    							});
    					//ready
    						wx.ready(function () {   //需在用户可能点击分享按钮前就先调用
    							shareData = {
    									title: title,  // 分享标题
    									desc: desc,            // 分享描述
    									link: window.location.href, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
    									imgUrl: "http://****.com/txrtWeb/images/zfshlogo.png",  // 分享图标
    									success: function() {
    										//alert("设置成功分享");
    									  // 设置成功
    									}
    								};
    								// 1.4.0 新接口 (只调用这个接口在安卓下是无效的)
    								wx.updateAppMessageShareData(shareData);
    								wx.updateTimelineShareData(shareData);
    						});
    	             }
    	         });
        
    	</script>

    注意

    1. url一定要是完整的url(当前网页的URL,不包含#及其后面部分)最好是使用window.location.href.split("#")获取得到,如果传入固定的好像会报invalid signature错误,所以为了安全起见还是直接传入当前的url
    2. 这个签名的有效时间为7200秒,也就是2个小时,因此当超过两个小时候,再访问也会报invalid signature错误。但是这个我还没有遇见,并不知道这么解决,其他说是需要缓存access_token和access_ticket
    3. 另外还有一个错误:invalid url domain
      这个跟生成签名时用的url有关系,官网的说法是:
      invalid url domain当前页面所在域名与使用的appid没有绑定,请确认正确填写绑定的域名,如果使用了端口号,则配置的绑定域名也要加上端口号(一个appid可以绑定三个有效域名)
      这个url必须是:“公众号设置---功能设置----JS接口安全域名”中绑定的三个域名之一
    4. 如果以上配置都是正确,而且debug也设置为true了,在微信中访问连接会出现config:ok的界面,就说明配置成功了
    5. 有时也可以把ajax请求放在setTimeout中进行请求。

    验证工具:
    微信公众平台接口调试工具
    微信 JS 接口签名校验工具

    参考:
    解决微信JS-SDK扫一扫功能接入以及出现签名无效 invalid signature
    微信JS-SDK获取signature签名以及config配置

    相关代码文件下载:https://download.csdn.net/download/qq_37698433/11253616

     


     

     

    展开全文
  • 微信网页分享,设置标题 摘要 图片

    千次阅读 2018-09-21 21:00:58
    微信网页分享,设置标题 摘要 图片首先需要在公众号进行设置 兄弟看你骨骼惊奇,猜你是卡住了。文档一字值千金、 生涩难懂 理解。 首先需要在公众号进行设置 查看微信公众号技术文档。开发的是网页 所以找到...

    兄弟看你骨骼惊奇,猜你是卡住了。文档一字值千金、 生涩难懂 理解。
    nodejs

    首先需要在公众号进行设置

    查看微信公众号技术文档。开发的是网页 所以找到“微信网页开发”,再看需要使用什么功能。这里使用 微信JS-SDK,查看这个文档:文档连接如下
    https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

    JSSDK使用步骤

    步骤一:绑定域名

    先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
    (实际位置:设置》公众号设置》功能设置》JS接口安全域名 ,添加页面所在的域名)
    在这里插入图片描述

    查看是否有接口权限
    在这里插入图片描述

    没有接口的哈。去添加个插件
    在这里插入图片描述

    然后在 开发设置 》基本设置 中 获取APPID AppSecret 以及白名单设置
    (一定要设置白名单。否则获取不到 access_token ,不然,o( ̄ヘ ̄o#) 都是白费)
    在这里插入图片描述

    设置完成!

    步骤二:引入JS文件

    在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.4.0.js

    备注:支持使用 AMD/CMD 标准模块加载方法加载

    步骤三:通过config接口注入权限验证配置

    所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)。

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

    签名算法见文末的附录1,所有JS接口列表见文末的附录2
    以上是文档内容

    接下来就是签名算法:

    先看前端:

    		<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
       	<script type="text/javascript">
       		var imgUrl = '/image/172981969734345111.jpg';
       		var lineLink = window.location.href;
       		var shareTitle = ' 海谷龍右脑潜能开发'; //分享标题
       		var descContent = ' 海谷龍右脑潜能开发'; //分享描述
       		var appId = '公众号的';
       		var appSecret = '公众号的';
       		//    在后台写个 签名算法。获取过来。
       		$(document).ready(function() {
       			$.post("/util/js_SDK", {
       				url: window.location.href,
       				appId: appId,
       				appSecret: appSecret
       			}, function(response) {			
       				wx.config({
       					debug: false,
       					appId: appId,
       					timestamp: response.timestamp,//时间戳
       					nonceStr: response.noncestr,//隨機數
       					signature: response.signature, //簽名,
       					jsApiList: [
       					//这里课添加其他的分享接口
       						'checkJsApi',
       						'onMenuShareTimeline',
       						'onMenuShareAppMessage'
       					]
       				});
       			}, "JSON")
       			wx.ready(function() {
       				wx.onMenuShareTimeline({ //分享到朋友圈
       					title: shareTitle, // 分享标题
       					link: lineLink, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
       					imgUrl: imgUrl, // 分享图标
       					success: function() {
       						// 用户确认分享后执行的回调函数
       					},
       					cancel: function() {
       						// 用户取消分享后执行的回调函数
       					}
       				});
       				wx.onMenuShareAppMessage({ //分想好友
       					title: shareTitle, // 分享标题
       					desc: descContent, // 分享描述
       					link: lineLink, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
       					imgUrl: imgUrl, // 分享图标
       					type: '', // 分享类型,music、video或link,不填默认为link
       					dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
       					success: function() {
       						// 用户确认分享后执行的回调函数
       					},
       					cancel: function() {
       						// 用户取消分享后执行的回调函数
       					}
       				});
       			})
       		});
       	</script>
    

    后台签名算法:

    
    var https = require('https');
    var cryptoMO = require('crypto'); // MD5算法
    var request = require("request");
    var fs = require("fs");
    
    exports.js_SDK_QM = function(res, cb) {
    
    	//1.获取access_token
    	var access_token = '';
    	var jsapi = "";
    	var url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + res.body.appId + "&secret=" + res.body.appSecret;
    	request(url, function(error, response, body) {
    		if(!error && response.statusCode == 200) {
    			access_token = JSON.parse(response.body).access_token
    			//2.获取 jsapi_ticket是公众号用于调用微信JS接口的临时票据	   
    			var url_jsapi = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + access_token + "&type=jsapi"
    			request(url_jsapi, function(error, response, body) {
    				if(!error && response.statusCode == 200) {
    					jsapi = JSON.parse(response.body).ticket
    					var noncestr = Math.random().toString(36).substr(2, 15) //随机字符串
    					var timestamp = Date.parse(new Date())/1000; //时间戳
    					var url = res.body.url
    					//	3.签名算法
    					var str = "jsapi_ticket=" + jsapi + "&noncestr=" + noncestr + "&timestamp=" + timestamp + "&url=" + url;
    					var signature = cryptoMO.createHash('sha1').update(str).digest('hex')
    					var backs = {
    						noncestr: noncestr,
    						timestamp: timestamp,
    						signature: signature,
    					}
    					cb.send(backs)
    				}else{
    					cb.send("获取jsapi失败")
    				}
    			})
    		}else{
    			cb.send("获取access_token失败")
    		}
    	})
    }
    
    

    出现问题 查看文档。(你觉得看懂了,其实不然)
    在这里插入图片描述

    展开全文
  • 今天开发需要微信分享网页链接自定义图片和文字描述,于是网上各种查找资料和各种看手册,遇到了好多坑,不过啃了半天以后终于把问题解决了,以防以后忘记,今天记录一下; 首先,由于微信已经发布了想要分享链接必须调用...
    今天开发需要微信分享网页链接自定义图片和文字描述,于是网上各种查找资料和各种看手册,遇到了好多坑,不过啃了半天以后终于把问题解决了,以防以后忘记,今天记录一下;
    首先,由于微信已经发布了想要分享链接必须调用认证了的公众号的JSSDK接口,所以,像以前的在html页面中的head中放入图片,我试过已经不管用了,当然不是绝对的,但是我这个方法试了多好次,不能用,所以没有办法只好调接口来做这个功能了;
    废话不多说,
    首先第准备工作:
    需要有一个认证了的公众号;
    
    然后开始了我们的代码操作:
    一: 在html中引入js文件
    
    <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
    

    这里写图片描述

    二: 在控制器中加入以下代码并且引入jssdk.php文件,我放在extend文件夹下面,这个不是强制要求,大家随意,只要文件引入正确即可;(jssdk压缩包在官网就可以找得到,下载下来引入即可)
    
     //获取apptoken
            include EXTEND_PATH . "\jssdk\jssdk.php";
            $jssdk = new \JSSDK('你的appid','你的APPSecret');//这里填写自己的appid 和secret
            $signPackage = $jssdk->GetSignPackage();
    

    这里写图片描述

    三: 回到html中,将发送来的数据放在head中;这个好处就是,数据不需要写死,以防以后出现问题;
    
    <script>
    		wx.config({
                debug: false,
                appId: '{$signPackage["appId"]}',
                timestamp: '{$signPackage["timestamp"]}',
                nonceStr: '{$signPackage["nonceStr"]}',
                signature: '{$signPackage["signature"]}',
                jsApiList: [
    	            //我只调用了两个分享接口,分别是朋友圈和个人,大家有其它需要可以去文档中查找接口
    				'onMenuShareTimeline',
    				'onMenuShareAppMessage'
    			]
    		});
    		wx.ready(function () {
    			var shareData = {
    				title: '标题',	//	标题
    				desc: '描述',	//	描述
    				link: '链接',	//	分享的URL,必须和当前打开的网页的URL是一样的
    				imgUrl: '缩略图完整路径'	//	缩略图地址
    			};
    			wx.onMenuShareAppMessage(shareData);
    			wx.onMenuShareTimeline(shareData);
    		});
    		wx.error(function (res) {
    			//alert(res.errMsg);//错误提示
    		});
    	 </script>
    

    这里写图片描述

    四: 将文件夹放入到你的项目中,也可以和第二步一起进行,在其中测试错误;
    
    
    五:一定要在公众号里设置IP的白名单,否则一直报错,说你没有权限可以拿到token!
    
    
    好了,大概就是这样,按流程走完,就可以分享网页链接的时候带上你自定义的图片和内容描述了
    
    展开全文
  • 提高网页浏览量是提高网站信息影响的前提,提高网页浏览量的方式是多种多样的,其中向特定页面添加网页分享是一个很好的主意,网页分享实现方式很多,这里介绍一下百度分享的应用:
  • 出现这种情况的原因貌似是微信分享会屏蔽分享出去标题和描述的某些字符,就会导致分享人看到的分享内容没有问题,但被分享人看到的分享内容中图片或描述会为按照设置显示,修改一下分享的标题或描述就好。...
  • 自定义微信分享链接是指将一条网页链接通过微信接口生成一张卡片,并且该卡片的标题,内容和图片都可以自己编辑。如下图效果 ● 自定义网页链接示例(标题,内容简介,缩略图) ● 未自定义的网页链接 ...
  • 非微信公众号web网页二次分享链接中图片丢失的问题
  • Web网页自定义分享的标题、内容和图片注:自定义微信分享的话需要调用微信的sdk,如果需要可以查看我的文章。1.引入js <script src="https://hm.baidu.com/hm.jsd69321757dcfbfbe09dbddd4dca87b28"></script>2.配置...
  • 朋友圈分享网址不显示图片问题

    千次阅读 2015-06-15 09:13:46
    公司会有很多活动,做成网页介绍形式推广传播出去,微信分享中只有链接没有图片显示不太好看 在之后增加width="0" height="0"/> 就有图片显示效果了,图片之后的信息描述呢 ,就是你网页的title的内容 红色...
  • 微信里分享一个链接,如下如: 要求标题,描述,缩略图,如下图: 首先。需要了解一下微信JS-SDK说明文档,大概有个了解。看完我们只需知道这四点: 1. 根据appId和appsecret获取access_token; 2. 使用...
  • 网页快照(图片)工具分享

    千次阅读 2017-02-27 11:57:36
    某些系统的需求中,要求提供服务器端的部分网页截图或全部网页截图服务,博主最近也接到这样一个需求。 通过几天的学习推荐以下两个工具:Phantomjs及Slimerjs 1、Phantomjs phantomjs是很多python爬虫及网页自动...
  • 网页分享链接

    千次阅读 2019-05-08 09:24:38
    夏泽网分享链接 http://nianjian.xiaze.com/tags.php?/河南六十年/1/13557278343/ 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细...
  • android 微信分享带有缩略图的网页

    千次阅读 2017-02-24 13:56:05
    需求是分享web页还要图片,并且图片还不是本地的,这就有点坑了, 也就是说图片还要从网络实时获取并且是同步的,如果是异步的还需要等待(用户体验就不要了) 代码如下 /** * 微信分享 好友 */ public ...
  • 如图,图1是其它游戏分享链接的显示效果(前提是在微信中打开并分享出去),图2是我们游戏页面(同样在微信中打开并分享出去)分享链接的显示效果。 要达到图1的自定义文案与图标的效果,经研究与各种尝试,得到的...
  • 微信分享带图片,描述(php版)

    千次阅读 2018-12-26 11:43:37
    最近在为一个php网站添加微信分享带图片,描述的功能,这个功能之前了解过,但并没有彻底实现过,这个功能需要认证的公众号支持。 第一步:在已经认证的公众号配置安全域名(网上很多教程) 第二步:在微信公众平台...
  • 工作中我们有时要将一些批量的网页转换成图片或者PDF文档格式,虽然多数浏览器具有滚动截屏或者打印输出PDF文档功能,但是如果有几十上百张网页需要处理,那也是要人命的。所以我一直想找一款能够批量处理该工作的...
  • 1.导入微信的js type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"> 2.script type="text/javascript">  var imgUrl = 'http://www.baidu.com/images/share.jpg';... 分享后展
  • Twitter https://twitter.com/intent/tweet?text=Work queue with Go and RabbitMQ by @masnun https://link.medium.com/5ayv7VMv04
  • 微信分享到朋友圈,可分享的类型有:文字类型、图片类型、音乐类型、视频类型和网页类型,但是我们在做图片分享的时候发现微信给的API只能分享一张图片,达不到一些APP的需求,而产品汪或者Boss想要分享多张图片,...
  • 网页js实现qq分享 创建一个jsp页面,html页面也行,下面是简单demo代码,直接复制到就能用 html把头 <%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%>去掉即可...
  • 用微信打开一个网页,选择右上角的“发送给朋友”后,收到的消息是这样的:而为了推广效果,我们更希望能自定义标题、描述和图片,效果如下图:下面介绍下怎样来实现这个功能&lt;script type="text/...
  • 以前我仅仅把网页开始的地方放一个不可见的图片,后来发现没有效果。 现在我们开始: 原料:微信公众号:       步骤一:绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口...
  • 在APP中分享出一条链接到朋友圈(有图片缩略图),点进网页,在此分享到朋友圈,这时无图片缩略图,这是什么原因,body里是有符合条件的img图片的啊
  • 我们在qq聊天中有时候给朋友发一个链接,我们看到的是卡片类型,在meta标签里面设置,就可以自定义卡片的文字及图片信息,如下图所示,QQ获取分享信息的规则在QQ开放平台里面里面有具体说明:腾讯移动WEB开发平台,...
  • 如图,图1是其它游戏分享链接的显示效果(前提是在微信中打开并分享出去),图2是我们游戏页面(同样在微信中打开并分享出去)分享链接的显示效果。 要达到图1的自定义文案与图标的效果,经研究与各种尝试,得到的...
  • 网页打开后,微信分享的时候,微信没抓到图片怎么办? 或者我们不想让微信随便抓,想有个默认的图片怎么办? 我们这边采用最简单粗暴的方式来看下: 在与之间加上下面的代码就好了,注意这个图片必须是300px*300px的...
  • //此为微信小程序分享 onShareAppMessage: function(options) { //先写一个数组, var shareimg =[ ...
  • 微信分享文本、图片(本地、二进制、网络图片)、音频、视频、Gif动态图片网页信息--大汇总

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 75,713
精华内容 30,285
关键字:

网页分享网址带图片