微信公众号自定义分享

直接先上代码,原生分装的php文件可直接调用,根目录需创建一个文件夹cache,在文件夹中放三个文件,后两个文件用在jssdk.php代码之中用于存储值使用,第一个文件内容为deny from all(安全性设置)
存储access_token,不能经常请求拿
第一个文件不会建的百度一下吧比较简单,里面写这个就行

order    allow,deny
deny  from all
<?php
class JSSDK {
  private $appId;
  private $appSecret;
 
  public function __construct($appId, $appSecret) {
    $this->appId = $appId;
    $this->appSecret = $appSecret;
  }
 
  public function getSignPackage($signUrl = null) {
    $jsapiTicket = $this->getJsApiTicket();
 
    if ($signUrl) {
      $url = $signUrl;
    } else {
      $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
      $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    }
    $timestamp = time();
    $nonceStr = $this->createNonceStr();
 
    // 这里参数的顺序要按照 key 值 ASCII 码升序排序
    $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
 
    $signature = sha1($string);
 
    $signPackage = array(
      "appId"     => $this->appId,
      "nonceStr"  => $nonceStr,
      "timestamp" => $timestamp,
      "url"       => $url,
      "signature" => $signature,
      "rawString" => $string
    );
    return $signPackage;
  }
 
  private function createNonceStr($length = 16) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $str = "";
    for ($i = 0; $i < $length; $i++) {
      $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
  }
 
  private function getJsApiTicket() {
    // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
    $data = json_decode(file_get_contents("./cache/jsapi_ticket.json"));
    if ($data->expire_time < time()) {
      $accessToken = $this->getAccessToken()$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
      $res = json_decode($this->httpGet($url));
      $ticket = $res->ticket;
      if ($ticket) {
        $data->expire_time = time() + 7000;
        $data->jsapi_ticket = $ticket;
        $fp = fopen("./cache/jsapi_ticket.json", "w");
        fwrite($fp, json_encode($data));
        fclose($fp);
      }
    } else {
      $ticket = $data->jsapi_ticket;
    }
 
    return $ticket;
  }
 
  private function getAccessToken() {
    // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
    $data = json_decode(file_get_contents("./cache/access_token.json"));
    if ($data->expire_time < time()) {
      $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
      $res = json_decode($this->httpGet($url));
      $access_token = $res->access_token;
      if ($access_token) {
        $data->expire_time = time() + 7000;
        $data->access_token = $access_token;
        $fp = fopen("./cache/access_token.json", "w");
        fwrite($fp, json_encode($data));
        fclose($fp);
      }
    } else {
      $access_token = $data->access_token;
    }
    return $access_token;
  }
 
  private function httpGet($url) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 500);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_URL, $url);
 
    $res = curl_exec($curl);
    curl_close($curl);
 
    return $res;
 
  }
}

?>

通过一个php文件来调起上面的getSignPackage方法;url即从前台分享的地址

<?php
 
require_once './jssdk.php';
$signUrl=$_GET['url'];
$jssdk = new JSSDK('你的appId', '你的appsecret');
//上面是专用的,根据自己的微信公众平台的具体情况进行填写
$wxconfig = $jssdk->getSignPackage($signUrl);
$data = [
    'code'=>200,
    'data'=>$wxconfig
];
echo json_encode($data);
?>

前台的代码
html代码里只要加载这个js文件,使用iniShare方法就行了

//t1表示分享到朋友圈的标题,t表示分享到朋友的标题
function iniShare(t,t1,ds,l,o){
	$.get("/share.php",{'url':l},function(d){
		wx.config({
			debug: false,
			appId: d.data.appId,
			timestamp: d.data.timestamp,
			nonceStr: d.data.nonceStr,
			signature: d.data.signature,
			jsApiList: [
				// 所有要调用的 API 都要加到这个列表中
				'checkJsApi',
				'onMenuShareTimeline',
				'onMenuShareAppMessage'
			]
		});
		wx.ready(function () {
			iniWeixinShare({title: t,title1:t1, desc:ds,link:l,'logo':o})
		});

		wx.error(function (res) {
		   //alert(res.errMsg);
		});
	},"json")
}

function iniWeixinShare(data){
	var _this=this
	var shareData = {
	title: data.title,
	desc: data.desc,
	link: data.link,
	imgUrl: data.logo,
	trigger: function (res) { },
	success: function (res) { },
	cancel: function (res) { },
	fail: function (res) { }
	};

	//好友
	wx.onMenuShareAppMessage(shareData);

	//朋友圈
	shareData = {
		title: data.title1,
		desc: data.desc,
		link: data.link,
		imgUrl: data.logo,
		trigger: function (res) {  },
		success: function (res) { },
		cancel: function (res) { },
		fail: function (res) { }
	};
	wx.onMenuShareTimeline(shareData);
}

当然以上都是建立在js安全域名和ip白名单添加完成的情况下才能成功,这里我就不写配置了,appid和appsecret两个参数也都是微信公众平台里面,配置了就可以自定义分享功能咯,祝大家成功!!!

Vue 是一种流行的前端框架,可以用于构建用户界面。为了实现仿写微信公众号自定义菜单,我们可以按照以下步骤进行: 1. 安装 Vue:首先,我们需要在项目中安装 Vue。可以使用 npm 或者 yarn 进行安装,运行命令 `npm install vue` 或者 `yarn add vue` 完成安装。 2. 创建 Vue 组件:通过 Vue 的组件化特性,我们可以创建一个专门用于自定义菜单的组件。可以在组件中定义菜单的结构和样式,并提供相应的交互逻辑。 3. 使用 Vue Router:Vue Router 是 Vue 官方的路由管理器,可以用于实现页面间的跳转。通过配置路由,在不同的路径下展示不同的页面内容,使用户可以在不同菜单之间进行切换。 4. 获取菜单数据:在组件中,我们可以通过调用后端的接口获取微信公众号自定义菜单数据。可以使用 Vue 的生命周期钩子函数,在组件挂载之前获取数据,并将数据保存在组件的 data 中。 5. 渲染数据:将获取到的菜单数据渲染到页面中。可以使用 v-for 指令遍历菜单项,并使用 v-bind 将数据绑定到相应的元素上。这样就可以根据菜单数据动态渲染出自定义菜单。 6. 实现菜单交互功能:通过为菜单元素添加点击事件,可以实现菜单的交互功能。例如,当用户点击菜单项时,可以触发相应的事件,如跳转到对应的页面或展开子菜单。 7. 样式设计:通过调整样式,使菜单界面与微信公众号的样式一致。可以使用 CSS 进行样式设计,并使用 Vue 的样式绑定功能将样式应用到菜单组件上。 通过以上步骤,我们可以使用 Vue 实现仿写微信公众号自定义菜单。这样用户就可以在仿真的菜单界面上进行操作,实现类似微信公众号自定义菜单功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值