PHP微信分享功能开发(附代码)

有时候当一个项目或工程需要微信端分享之后做一系列事件那么我们就需要获取到微信分享这个动作,也就是说我们已经知道了当前这个东西已经被分享了 ,那么走微信默认的分享显然是不行的我们需要自己动手来配置微信分享,当用户分享时走的是我们预定好的程序那么我们就可以轻松实现分享之后所做的事情。

在页面端主要是一个js如下:


 

当wx.config配置好后程序才会接着走下面的分享,此处调试可将false改成true若配置好那么正常弹出ok等信息 若未配置好 那么此处改成true也不会有任何弹出效果
wx.config需要控制器传来四个参数即appId、timestamp、nonceStr、signature;控制器代码如下:

<?php
 
$jssdk = new \Home\Util\JSSDK(C('APPID'), C('SECRET'));//此处C里面的东西为你所使用的公众号的appid和secret,这俩个东西可在微信公众平台获取到 不详细解释 找不到追加评论(讲解) JSSDK文件代码在下
$signPackage = $jssdk->GetSignPackage();
 
$this->assign('appid',$signPackage["appId"]);
$this->assign('timestamp',$signPackage["timestamp"]);
$this->assign('nonceStr',$signPackage["nonceStr"]);
 $this->assign('signature',$signPackage["signature"]);

在这里就配置好了wx.config,还可以接着穿title等信息 在这里举个例子
$this->assign('title',$title);
JSSDK文件代码:

appId = $appId;
  $this->appSecret = $appSecret;
 }
 public function getSignPackage() {
  $jsapiTicket = $this->getJsApiTicket();
  // 注意 URL 一定要动态获取,不能 hardcode.
  $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×tamp=$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;
 }
 public function getJsApiTicket() {
  // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
  $data = json_decode($this->get_php_file("jsapi_ticket.php"));
  if ($data->expire_time < time()) {
   $accessToken = $this->getAccessToken();  
   // 如果是企业号用以下 URL 获取 ticket
   // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";
   $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=$accessToken&type=jsapi";
   $res = json_decode($this->httpGet($url));
   $ticket = $res->ticket;
   // var_dump($url);
   if ($ticket) {
    $data->expire_time = time() + 7000;
    $data->jsapi_ticket = $ticket;
    $this->set_php_file("jsapi_ticket.php", json_encode($data));
   }
  } else {
   $ticket = $data->jsapi_ticket;
  }
  return $ticket;
 }
 public function getAccessToken() {
  // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
  $data = json_decode($this->get_php_file("access_token.php")); 
  if ($data->expire_time < time()) {
   // 如果是企业号用以下URL获取access_token
   // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";
   $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
   $res = $this->getJson($url);
   $access_token = $res['access_token'];
   // var_dump($res);
   if ($access_token) {
    $data->expire_time = time() + 7000;
    $data->access_token = $access_token;
    $this->set_php_file("access_token.php", json_encode($data));
   }
  } else {
   $access_token = $data->access_token;
  }
  return $access_token;
  // $aa = $access_token;
  // var_dump($aa);
 }
 //获取access_token
 public function getJson($url){
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   $output = curl_exec($ch);
   curl_close($ch);
   // var_dump(json_decode($output, true));
   return json_decode($output, true);
 }
 //获取ticket
 private function httpGet($url) {
  $curl = curl_init();
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  // curl_setopt($curl, CURLOPT_TIMEOUT, 500);
  // 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
  // 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
  $res = curl_exec($curl);
  // var_dump($res);
  curl_close($curl);  
  return $res;
 }
 private function get_php_file($filename) {
  return trim(substr(file_get_contents($filename), 15));
  // echo trim(substr(file_get_contents($filename), 15));die;
  // $aa = trim(substr(file_get_contents($filename), 15));
 }
 private function set_php_file($filename, $content) {
  $fp = fopen($filename, "w");
  fwrite($fp, "" . $content);
  fclose($fp);
 }
}

如果我们想动态传递参数怎么办?你可以参考这篇文章:https://www.cwhello.com/4589.html

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/4585.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
重蔚的头像重蔚管理团队
上一篇 2018年3月9日 16:39
下一篇 2018年3月10日 16:33

相关推荐

  • 我来教你php服务器怎么管理,如何启动php服务器程序。

    在计算机领域,PHP是一种广泛使用的服务器端脚本语言,它被用于创建动态网页和Web应用程序,要管理并启动PHP服务器,您需要遵循以下步骤: 1. 安装Web服务器:您需要在您的计算机上安装一个Web服务器软件,常见的We…

    2024年6月28日
    00
  • 探索PHP 生命周期

    学习 PHP 生命周期 PHP的生命周期是一个很复杂的过程,其生命周期应该被热衷于使用它的人所掌握。主要内容如下: PHP 启动。如果运行的是 CLI 或者 FPM,它将运行 C main()。如果作为模块运行到网络服务器,像使用 a…

    2022年6月12日 PHP自学教程
    0135
  • PHP基础案例四:展示学生列表

    一、需求分析 我们在设计学生信息管理系统时,能实现学生信息的查询。管理员在进入学生信息界面后,为了能方便的对学生的信息进行添加和删除操作,我们将学生数据信息能够在信息界面的表格中被看到。 二、设计思路 …

    2022年6月25日
    0143
  • 关于PHP打印格式化显示利器

    当我们调试php代码的时候,会使用var_dump、print_r 输出结果,输出的时候需要格式化。 格式化后的结果 echo "<pre>";$arr=[3,1,5,8]; print_r($arr); 不格式化后的结果 $arr=[3,1,5,8]; print_r($…

    2022年6月27日
    0167
  • 如何在PHP中进行Cookie操作。

    在Web开发中,Cookie经常被用来记录用户的状态和跟踪用户的行为。Cookie是存储在用户浏览器上的一些数据,可以方便地在浏览器和服务器之间传递。在PHP中,操作Cookie非常简单,本文将通过以下几个方面介绍如何在PHP…

    2023年5月23日
    01
  • PHP8函数:str_contains()的新用途。

    PHP 8是一款功能更强大的编程语言,它引入了许多新的函数和特性,其中之一就是str_contains()函数。str_contains()函数主要用于检查字符串中是否包含指定的子字符串,它可以用于各种不同的应用程序中,例如搜索引擎…

    2023年5月21日
    04
  • PHP微信开发:如何实现群发消息发送记录

    随着微信成为了人们生活中越来越重要的一个通讯工具,其敏捷的消息传递功能迅速受到广大企业和个人的青睐。对于企业而言,将微信发展为一个营销平台已经成为趋势,而微信开发的重要性也逐渐凸显。在其中,群发功能…

    2023年5月18日
    00
  • 关于php去掉数组中的空值。

    在PHP中,我们可以使用`array_keys()`函数获取数组的所有键,然后使用`array_diff()`函数移除指定的键,以下是一个简单的例子: <?php $array = array("a" => "apple", "b" =&…

    2024年6月19日
    00

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息