ThinkPHP微信公众号自定义分享

阅读: 评论:0

ThinkPHP微信公众号自定义分享

ThinkPHP微信公众号自定义分享

步骤:

1、申请Appid、appSecret

2、获取access_token

3、通过access_token获取jsapi_ticket

4、生成签名

5、拼接JS所需参数

6、控制器调用

7、引入JS文件并调用JS

微信分享类

<?php
class WxShare
{private $appId;private $appSecret;/*** 构造函数* @param $appid string 小程序的appid* @param $appSecret string 用户在小程序登录后获取的会话密钥*/public function __construct(){$this->appid = 'xxx';$this->appSecret = 'xxx';}/* *    获取分享JSSDKACCESS_TOKEN*    @author 董强*/public function getAccessToken(){//我们将access_token全局缓存,每次获取的时候,先判断是否过期,如果过期重新获取再全局缓存//获取缓存的access_token$access_token = cache('share_access_token');//判断缓存的access_token是否存在和过期,如果不存在和过期则重新获取.if($access_token !== null && $access_token){return $access_token;}else{//重新获取access_token,并全局缓存$curl = curl_init();curl_setopt($curl,CURLOPT_URL,'=client_credential&appid='.$this->appid.'&secret='.$this->appSecret);curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);//获取access_token$data = json_decode(curl_exec($curl),true);if($data != null && $data['access_token']){//设置access_token的过期时间,有效期是7200scache('share_access_token',$data['access_token'],7200);//返回access_tokenreturn $data['access_token'];}else{exit('微信获取access_token失败');}}}/* *    获取jsapi_ticket*    @author 董强*/public function getJsApiTicket(){//我们将jsapi_ticket全局缓存,每次获取的时候,先判断是否过期,如果过期重新获取再全局缓存//获取缓存的jsapi_ticket$jsapi_ticket = cache('share_jsapi_ticket');//判断缓存的access_token是否存在和过期,如果不存在和过期则重新获取.if($jsapi_ticket !== null && $jsapi_ticket){return $jsapi_ticket;}else{//获取access_token$access_token = $this->getAccessToken();//重新获取jsapi_ticket,并全局缓存$curl = curl_init();curl_setopt($curl,CURLOPT_URL,'='.$access_token.'&type=jsapi');curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);//获取jsapi_ticket$data = json_decode(curl_exec($curl),true);if($data != null && $data['ticket']){//设置jsapi_ticket的过期时间,有效期是7200scache('share_jsapi_ticket',$data['ticket'],7200);//返回jsapi_ticketreturn $data['ticket'];}else{exit('微信获取access_token失败');}}}/* *    生成签名*    @author 董强*/public function getSign(){//获取当前网址路径$url = ''.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];//当前时间戳$timestamp = strval(time());//随机字符串$noncestr = $this->createNoncestr();$sign = 'jsapi_ticket='.$this->getJsApiTicket().'&noncestr='.$noncestr.'&timestamp='.$timestamp.'&url='.$url;//随机时间戳与随机字符串需与签名一致$data = array('nonceStr' => $noncestr,'timestamp' => $timestamp,'sign' => sha1($sign),);return $data;}/* *    拼接Config所需参数*    @author 董强*/public function getConfig(){//获取签名$signature = $this->getSign();$data = array('debug' => '','appId' => $this->appid,'timestamp' => $signature['timestamp'],'nonceStr' => $signature['nonceStr'],'signature' => $signature['sign'],'jsApiList' => 'updateAppMessageShareData',);return $data;}/* *    生成随机字符串*    @author DongQiang*/private function createNoncestr($length = 32) {$chars = "abcdefghijklmnopqrstuvwxyz0123456789";$str = "";for ($i = 0; $i < $length; $i++) {$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);}return $str;}
}调用://微信分享import('WxShare.WxShare');$wxshare = new WxShare();$this->assign('share_config',$wxshare->getConfig());
前端:<!-- 分享所需参数 -->
<input type="hidden" id="debug" value="{$share_config.debug}">
<input type="hidden" id="appid" value="{$share_config.appId}">
<input type="hidden" id="timestamp" value="{$share_config.timestamp}">
<input type="hidden" id="nonceStr" value="{$Str}">
<input type="hidden" id="signature" value="{$share_config.signature}">
<input type="hidden" id="jsApiList" value="{$share_config.jsApiList}">
<input type="hidden" id="title" value="{$info.title}">
<input type="hidden" id="describe" value="{$info.describe}">
<input type="hidden" id="img_url" value="{$info.img_url}">
<input type="hidden" id="url" value="{$url}">
<script>
$(function(){wx.config({debug: $('#debug').val(),appId: $('#appid').val(), // 必填,公众号的唯一标识timestamp: $('#timestamp').val(), // 必填,生成签名的时间戳nonceStr: $('#nonceStr').val(), // 必填,生成签名的随机串signature: $('#signature').val(),// 必填,签名jsApiList: ['updateAppMessageShareDatam','onMenuShareAppMessage'], // 必填,需要使用的JS接口列表success:function(){console.log("success");}});wx.ready(function(){   //需在用户可能点击分享按钮前就先调用wx.error(function(res){// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。console.log(res);});//新接口有BUG,暂不使用/*wx.updateAppMessageShareData({ title: 'dsada', // 分享标题desc: 'asdsad', // 分享描述link: '', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl: '/public/uploads/video/79/thumb/d1fe173d08e959397adf34b1d77e88d7.jpg', // 分享图标}, function(res) { //这里是回调函数 }); */wx.onMenuShareAppMessage({title: $('#title').val(), // 分享标题desc: $('#describe').val(), // 分享描述link: ''+$('#url').val(), // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl: '/'+$('#img_url').val(), // 分享图标type: '', // 分享类型,music、video或link,不填默认为linkdataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空success: function () {// 用户点击了分享后执行的回调函数//alert('分享成功');},cancel: function () {// 用户取消分享后执行的回调函数//alert('分享取消');}});});
});</script>

--------------------- 
作者:叫我董坤坤 
来源:CSDN 
原文: 
版权声明:本文为博主原创文章,转载请附上博文链接!

本文发布于:2024-01-28 03:13:43,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063828274375.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:自定义   公众   ThinkPHP
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23