微信分享 php jssdk

https://www.weixinsxy.com/jssdk/ 示例

https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#3  微信官网接口

jssdk类

<?php
namespace fast;

    class Jssdk3
    {
        private $appId;
        private $appSecret;

        // public function __construct($appId, $appSecret) {
        //     $this->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&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 应该全局存储与更新,以下代码以写入到文件中做示例
        //     if(file_get_contents("jsapi_ticket.json")){
        //         $data = json_decode(file_get_contents("jsapi_ticket.json"));
        //     }else{
        //         $data = null;
        //     }

        //     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?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("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("access_token.json"));
        //     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 = 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("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;
        // }

  //       private $appId=‘你的appid‘;

  // private $appSecret=‘你的appSecret‘;

 public function __construct($appId, $appSecret) {

   $this->appId = $appId;

   $this->appSecret = $appSecret;

 }

  public function getSignPackage() {

    $jsapiTicket = $this->getJsApiTicket();

    $url = "http://$_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($this->getCacheTicket(),true);
    // dump($data);
    if ($data[‘expire_time‘] < time()) {

      $accessToken = $this->getAccessToken();

      $url = "http://api.weixin.qq.com/cgi-bin/ticket/getticket?type=1&access_token=$accessToken";

      $res = json_decode($this->httpGet($url));

      $ticket = $res->ticket;

      if ($ticket) {

        $data[‘expire_time‘] = time() + 7000;

        $data[‘jsapi_ticket‘] = $ticket;

        $this->setCacheTicket(json_encode($data));

      }

    } else {

      $ticket = $data[‘jsapi_ticket‘];

    }

    return $ticket;

  }

  private function getAccessToken() {

    // access_token 应该全局存储与更新,以下代码以写入到文件中做示例

    $data = json_decode($this->getCacheToken(),true);

    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;

        $this->setCacheToken(json_encode($data));

      }

    } 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_URL, $url);

    $res = curl_exec($curl);

    curl_close($curl);

    return $res;

  }

  private function getCacheToken()

   {
        return file_get_contents(‘weixin_share_token.json‘);

   }

   private function setCacheToken($token)

   {
        return file_put_contents(‘weixin_share_token.json‘, $token);
      // return MEM::mset("weixin_share_token",$token,7000); 

   }

   private function getCacheTicket()

   {

       return file_get_contents(‘jsapi_ticket.json‘);  //缓存获取,也可自己放入数据库存储

   }

   private function setCacheTicket($ticket)

   {

      return file_put_contents(‘jsapi_ticket.json‘, $ticket);  //设置缓存

   }

//         private function getAccessToken() {

//             $data = json_decode($this->getCacheToken());  

//             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)); //请确保你已经开启CURL

//               $access_token = $res->access_token;

//               if ($access_token) {

//                 $data->expire_time = time() + 7000;

//                 $data->access_token = $access_token;

//                 $this->setCacheToken(json_encode($data));

//               }

//             } else {

//               $access_token = $data->access_token;

//             }

//             return $access_token;

//           }

//           // jsapi_ticket 全局存储与更新

// private function getJsApiTicket() {

//     $data = json_decode($this->getCacheTicket());   //从缓存获取Ticket

//     if ($data->expire_time < time()) {

//       $accessToken = $this->getAccessToken();     //从缓存获取token

//       $url = "http://api.weixin.qq.com/cgi-bin/ticket/getticket?type=1&access_token=$accessToken";

//       $res = json_decode($this->httpGet($url));   //重新获取Ticket

//       $ticket = $res->ticket;

//       if ($ticket) {

//         $data->expire_time = time() + 7000;

//         $data->jsapi_ticket = $ticket;

//         $this->setCacheTicket(json_encode($data));

//       }

//     } else {

//       $ticket = $data->jsapi_ticket;

//     }

//         //获取配置信息

// public function getSignPackage() { 

//     $jsapiTicket = $this->getJsApiTicket();

//     $url = "http://$_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; 

//   }

    }

原文地址:https://www.cnblogs.com/xiaohe520/p/12001914.html

时间: 2024-10-27 01:22:12

微信分享 php jssdk的相关文章

微信分享操作JSSDK

使用jssdk域名要绑定吗? jssdk必须绑定域名才能使用,绑定根域后,子域无需再做绑定即可正常使用jssdk.切记微信公众号绑定的是一级或二级域名.而且要与Config的url域名一致. 使用jssdk如何在本地做测试? 可临时绑定一个域名,比如:a.com,在本地的host文件中设置192.168.0.0. a.com,访问a.com进行开发测试,本地开发完成后再做迁移调整. 使用js widget没有响应? 请检查appkey是否与域名绑定并且是否审核通过. jssdk无法授权? 这种情

使用微信JSSDK自定义微信分享标题、描述、和图标

最近做一个项目的时候用到微信的分享 ,实现定义分享标题,图片,了解到微信在发布JSSDK后,把包括自定义分享在内的众多网页服务接口进行了统一.如果要想自定义分享自己的网页信息给好友或朋友圈,就最好使用这个统一的网页服务接口. 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微信分享.扫一扫.卡券.支付等微信特有的能力,为微信用户提供更优质的网页体验. 步

使用JSSDK集成微信分享遇到的一些坑

h5项目中需要集成微信分享,以实现自定义标题.描述.图片等功能.结果遇到了很多坑. 准备工作 务必详细阅读微信JS-SDK说明文档 需要后端支持 强烈建议下载使用微信web开发者工具 按文档配置好公众号 JSSDK使用步骤 步骤一:绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. 备注:登录后可在“开发者中心”查看对应的接口权限. 这里注意:JS接口安全域名一定要填写正确,区分子域名,且主域名需要通过备案!没有满足这一步,无法继续测试. 步骤二:引入JS文

Angularjs+ThinkPHP3.2.3集成微信分享JS-SDK实践

先来看看微信分享效果: 在没有集成微信分享js-sdk前是这样的:没有摘要,缩略图任意抓取正文图片 在集成微信分享js-sdk后是这样的:标题,摘要,缩略图自定义 一.下载微信SDK开发包 下载地址:http://demo.open.weixin.qq.com/jssdk/sample.zip 二.设置安全域名 所有的微信JS接口都只能在公众号绑定的域名下调用.登录微信公众平台,点击左边的“公众号设置”,切换到“功能设置”,在“JS接口安全域名”一栏设置安全域名,下载验证文件到网站根目录,再回到

微信分享 JSSDK的使用

我现在做过的在微信中运行的项目,基本上都有微信分享功能,所以,会使用JSSDK分享页面是非常重要的.分享功能的代码一般会放在beforeCreate或mounted钩子中,代码如下: 1 this.$http.get("group/identity") 2 .then(({data:{code, content, jssdk, msg}}) => { 3 if (code == 0) { 4 this.group_id = content.group_id; 5 if(this.

微信分享配置(js-sdk)

现在的微信分享给朋友-分享到朋友圈 链接带有自定义的title.描述.图片,需要配置js-sdk(地址:mp.weixin.qq.com)微信文档 需要后台配置config的参数,返回给前台 1)debug 设置为true的时候,可以在调试的时候使用,页面有的问题,都会console出来,但是必须在pc的浏览器中才可以 2)appID,timestamo,nonceStr,signature 这四个参数是后台返回的,(后台需要在微信那边获取,是动态的值) 3)需要请求ajax,成功以后做分享(我

ThinkPHP3.2.3集成微信分享JS-SDK实践

先来看看微信分享效果: 在没有集成微信分享js-sdk前是这样的:没有摘要,缩略图任意抓取正文图片 在集成微信分享js-sdk后是这样的:标题,摘要,缩略图自定义 一.下载微信SDK开发包 下载地址:http://demo.open.weixin.qq.com/jssdk/sample.zip 二.设置安全域名 所有的微信JS接口都只能在公众号绑定的域名下调用.登录微信公众平台,点击左边的"公众号设置",切换到"功能设置",在"JS接口安全域名"

微信JS-SDK——微信分享给朋友

参考: 微信JS-SDK文档 其中包含有分享朋友圈.发送给朋友的js接口方法.(似乎不知道什么时候就会废弃) 文档中有完整的步骤,麻烦的是第三步:通过config接口注入权限验证配置.其中需要获取 signature(签名) ,必须通过服务器端才行. 本文主要是关于通过服务器获取签名的方法 授权需要获取access_token,然后通过access_token取到jsapi_ticket再进行加密签名. 微信公众号获取的access_token有两种:网页授权access_token.普通acc

asp实现微信jssdk分享,静态页html实现jssdk微信分享

最近一个客户的需求找到我,他的网站是html静态页,想做微信jssdk分享,他不会实现,asp的他会,他的程序是asp的,让我帮忙写一段能在html静态页中实现jssdk微信分享,经过30分钟的努力,代码搞定,原理很简单,用js把标题,简介,图片传给jssdk.asp文件中,让他去执行,代码如下: 微信jssdk分享页 <script type="text/javascript" src="jssdk.asp?title=这就是为了测试给你看的&desc=这里可