微信分享接口,微信分享接口开发
浏览量:949
时间:
来源:剑火6
先说句题外话:微信已经不支持自定义按钮调用微信分享了,只能自定义分享内容,然后使用官方的按钮来进行分享操作,。。。微信分享接口开发核心使用的是微信的js-sdk,下面是官网文档上的使用步骤1.1JSSDK使用步骤1.1.1步骤一:绑定域名1.1.2步骤二:引入JS文件1.1.3步骤三:通过config接口注入权限验证配置1.1.4步骤四:通过ready接口处理成功验证1.1.5步骤五:通过error接口处理失败验证其中绑定域名和引入js文件都没什么好说的,安装官方文档来即可。关键的是第三步:通过config接口注入权限验证配置。官网上对于这一步骤讲述的十分简单,我在这里详细阐述一番。wx.config({debug:true,//开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。appId:'',//必填,公众号的唯一标识timestamp:,//必填,生成签名的时间戳nonceStr:'',//必填,生成签名的随机串signature:'',//必填,签名,见附录1jsApiList:[]//必填,需要使用的JS接口列表,所有JS接口列表见附录2});对于上述参数,appId我就不用讲了,从微信公众号后台上可以拿到。timestamp和nonceStr是我们自己生成的,也很简单。唯一麻烦得是signature签名的生成。生成signature需要两个步骤,下面是这两个步骤1、我们需要从微信获取jsapi_ticketjsapi_ticket是公众号用于调用微信JS接口的临时票据,需要通过access_token来获取。注:jsapi_ticket和access_token有效时间都为7200秒,即两个小时。。需要服务器存储且定时刷新的。。如有不懂,可参看我的这篇博客。2、对于生成的jsapi_ticket,我们需要和timestamp、nonceStr和当前页面的url通过签名算法生成signature现在我们来一一讲述上面的两个步骤,首先,第一步获取jsapi_ticket代码如下://此处的token指的是access_tokenpublicstaticStringgetJsApiTicket(Stringtoken)throwsException{if(token==null||token==""){return"";}Stringurl="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+token+"&type=jsapi";Stringresult=HttpsRequestUtil.doGet(url);ObjectMappermapper=newObjectMapper();JsonNodenode=mapper.readTree(result);returnnode.get("ticket").textValue();}什么??不知道access_token怎么获取???好吧,我顺便讲一下。publicstaticStringinitToken()throwsException{StringtokenUrl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+APPID+"&secret="+SECRET;Stringresult=HttpsRequestUtil.doGet(tokenUrl);ObjectMappermapper=newObjectMapper();returnmapper.readTree(result).get("access_token").textValue();}顺便给一下核心类HttpsRequestUtil和依赖类MyX509TrustManager。。这两个类的核心代码是从网上百度来的,,感谢贡献的大神!!代码见下:packagecom.wx.jlyc.wx.util;importjavax.net.ssl.X509TrustManager;importjava.security.cert.CertificateException;importjava.security.cert.X509Certificate;/@Author:Yun@Description:证书信任管理器,为了能够发送https请求@Date:Createdin2017-11-2914:51/publicclassMyX509TrustManagerimplementsX509TrustManager{//检查客户端证书publicvoidcheckClientTrusted(X509Certificate[]chain,StringauthType)throwsCertificateException{}//检查服务器端证书publicvoidcheckServerTrusted(X509Certificate[]chain,StringauthType)throwsCertificateException{}//返回受信任的X509证书数组publicX509Certificate[]getAcceptedIssuers(){returnnull;}}packagecom.wx.jlyc.wx.util;importjavax.net.ssl.HttpsURLConnection;importjavax.net.ssl.SSLContext;importjavax.net.ssl.SSLSocketFactory;importjavax.net.ssl.TrustManager;importjava.io.;importjava.net.URL;/@Author:Yun@Description:HTTPS请求工具@Date:Createdin2017-12-2616:03/publicclassHttpsRequestUtil{/发送get请求@paramhref请求的url@return/publicstaticStringdoGet(Stringhref){//建立连接URLurl;HttpsURLConnectionhttpUrlConn=null;InputStreaminputStream=null;BufferedReaderbufferedReader=null;InputStreamReaderinputStreamReader=null;try{url=newURL(href);httpUrlConn=(HttpsURLConnection)url.openConnection();//创建SSLContext对象,并使用我们指定的信任管理器初始化TrustManager[]tm={newMyX509TrustManager()};SSLContextsslContext=SSLContext.getInstance("SSL","SunJSSE");sslContext.init(null,tm,newjava.security.SecureRandom());//从上述SSLContext对象中得到SSLSocketFactory对象SSLSocketFactoryssf=sslContext.getSocketFactory();httpUrlConn.setSSLSocketFactory(ssf);httpUrlConn.setDoOutput(true);httpUrlConn.setDoInput(true);//设置请求方式(GET/POST)httpUrlConn.setRequestMethod("GET");//取得输入流inputStream=httpUrlConn.getInputStream();inputStreamReader=newInputStreamReader(inputStream,"utf-8");bufferedReader=newBufferedReader(inputStreamReader);//读取响应内容StringBufferbuffer=newStringBuffer();Stringstr;while((str=bufferedReader.readLine())!=null){buffer.append(str);}returnbuffer.toString();}catch(Exceptione){e.printStackTrace();}finally{try{bufferedReader.close();}catch(IOExceptione){e.printStackTrace();}try{inputStreamReader.close();}catch(IOExceptione){e.printStackTrace();}//释放资源try{inputStream.close();}catch(IOExceptione){e.printStackTrace();}httpUrlConn.disconnect();}returnnull;}/发送post请求@paramhref请求的url@paramjson请求的参数(json格式)@return/publicstaticStringdoPost(Stringhref,Stringjson){URLurl;HttpsURLConnectionhttpUrlConn=null;InputStreaminputStream=null;BufferedReaderbufferedReader=null;InputStreamReaderinputStreamReader=null;try{url=newURL(href);httpUrlConn=(HttpsURLConnection)url.openConnection();//创建SSLContext对象,并使用我们指定的信任管理器初始化TrustManager[]tm={newMyX509TrustManager()};SSLContextsslContext=SSLContext.getInstance("SSL","SunJSSE");sslContext.init(null,tm,newjava.security.SecureRandom());//从上述SSLContext对象中得到SSLSocketFactory对象SSLSocketFactoryssf=sslContext.getSocketFactory();httpUrlConn.setSSLSocketFactory(ssf);httpUrlConn.setDoOutput(true);httpUrlConn.setDoInput(true);httpUrlConn.setUseCaches(false);//设置请求方式(GET/POST)httpUrlConn.setRequestMethod("POST");//将menu数据作为请求参数OutputStreamoutputStream=httpUrlConn.getOutputStream();//注意编码格式,防止中文乱码outputStream.write(json.getBytes("UTF-8"));outputStream.close();//取得输入流inputStream=httpUrlConn.getInputStream();inputStreamReader=newInputStreamReader(inputStream,"utf-8");bufferedReader=newBufferedReader(inputStreamReader);//读取响应内容StringBufferbuffer=newStringBuffer();Stringstr;while((str=bufferedReader.readLine())!=null){buffer.append(str);}returnbuffer.toString();}catch(Exceptione){e.printStackTrace();}finally{try{bufferedReader.close();}catch(IOExceptione){e.printStackTrace();}try{inputStreamReader.close();}catch(IOExceptione){e.printStackTrace();}//释放资源try{inputStream.close();}catch(IOExceptione){e.printStackTrace();}httpUrlConn.disconnect();}returnnull;}}这样一来,微信的jsapi_ticket我们已经获取到了。。接下来就是将各个参数通过签名算法生成signature签名了。代码见下:/获取微信的jsconfig接口需要的参数@paramurl页面的url@return@throwsException/@PostMapping("/config")@ResponseBodypublicMsggetWxJsConfig(Stringurl)throwsException{WxTokenwx_token=tokenService.getToken();//生成随机串StringnonceStr=UUID.randomUUID().toString().replace("-","").substring(0,16);//生成时间戳Stringtimestamp=String.valueOf(System.currentTimeMillis()/1000);//使用url键值对的方式拼接字符串Stringstr="jsapi_ticket="+wx_token.getJsapiTicket()+"&noncestr="+nonceStr+"×tamp="+timestamp+"&url="+url;//对字符串进行SHA-1方式加密MessageDigestmd=MessageDigest.getInstance("SHA-1");byte[]digest=md.digest(str.getBytes());Stringsignature=byteToStr(digest);returnMsg.success().add("appId",TokenUtils.APPID).add("timestamp",timestamp).add("nonceStr",nonceStr).add("signature",signature);}privatestaticStringbyteToStr(byte[]byteArray){StringstrDigest="";for(inti=0;ibyteArray.length;i++){strDigest+=byteToHexStr(byteArray[i]);}returnstrDigest;}privatestaticStringbyteToHexStr(bytemByte){char[]Digit={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};char[]tempArr=newchar[2];tempArr[0]=Digit[(mByte4)&0X0F];tempArr[1]=Digit[mByte&0X0F];Strings=newString(tempArr);returns;}安装上述做法,我们就可以获取到config接口的需要的所有参数了。。。一般来说,我们可以通过ajax请求后台,将appId、timestamp、nonceStr、signature获取到。。然后在回调函数中进行微信分享内容的设置了,,,js代码见下。。。$.ajax({url:ip+'/wx/config',type:'post',data:{url:location.href},success:function(res){console.log(res);if(res.code==200){wx.config({debug:false,//开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。appId:res.extend.appId,//必填,公众号的唯一标识timestamp:res.extend.timestamp,//必填,生成签名的时间戳nonceStr:res.extend.nonceStr,//必填,生成签名的随机串signature:res.extend.signature,//必填,签名,见附录1jsApiList:['onMenuShareTimeline','onMenuShareAppMessage']//必填,需要使用的JS接口列表,所有JS接口列表见附录2});wx.ready(function(){wx.onMenuShareAppMessage({title:$("#showName").text(),//分享标题link:location.href,//分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl:$("#video").attr("poster"),//分享图标success:function(){alert("分享到朋友成功");},cancel:function(){alert("取消分享");}});wx.onMenuShareTimeline({title:$("#showName").text(),//分享标题link:location.href,//分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl:$("#video").attr("poster"),//分享图标success:function(){alert("分享到朋友圈成功");},cancel:function(){alert("取消分享");}});});}}});
版权声明
即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。
最新资讯
-

小程序制作平台选型踩坑记录:2026年五大主流方案横向对比
2026 年微信小程序月活达 10.7 亿、覆盖 108 个行业,本次横向对比即速应用、乔拓云、凡科、有赞、微盟五大主流平台,分三阶段给出选型结论,核心聚焦成本、扩展性、运营能力三大维度。 -

即速应用,赋能企业玩转微信小程序智慧经营
作为国内领军的智慧商业经营服务商,即速应用始终秉承“让每个企业都拥有自己的智慧店铺”的愿景,持续赋能更多企业玩转智慧经营。即速应用旗下拥有“小程序搭建工具-即速应用”、“私域流量专家-即客云”等产品,帮助商家打通互联网全生态营销闭环。 -

即客云2.0重磅更新,让微信小程序运营更简单!
即客云作为一款基于企业微信的第三方工具,现从多维度提供超过30种功能,自上线以来,已服务多家企业,受到一致好评。近期,我们根据客户反馈和市场调研正式推出升级版 即客云2.0!更新了私域运营SOP,群日历功能,批量拓客,客户雷达,消息推送,个人欢迎语,帮助企业更好运用企业微信;同时提升了社群运营工作标准化,提升运营效率,帮助企业实现客户增长,玩转私域流量。










