帝国论坛帝国网站管理系统交流区模板/标签/插件共享交流[分享]静态文件使用jssdk微信分享的方法 【本版专题贴子】  
 1/4     1 2 3 4 ›› ›|
主题:[分享]静态文件使用jssdk微信分享的方法 [加入收藏夹]   

zenglinbin
用户头衔:书生

精华贴   :0
发贴数   :9
经验值   :156
注册时间:2008-03-25
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 1 楼]
[分享]静态文件使用jssdk微信分享的方法
用帝国有段时间,在论坛里得到很多前辈们发的教程帮助,微信分享在论坛里一直没有找到方法,官方就只有动态的,后面请教了一下论坛的一位前辈,只有用ajax来使用。搞了好久,查找好多的资料,总算实现,现在自己把方法分享一下!
前台代码


<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script>
url=location.href;
  $.ajax({
    type : "get",
    url : "http://xxxxxxxxx/jssdk.php?url="+url,//替换网址
    dataType : "jsonp",
    jsonp: "callback",
    jsonpCallback:"success_jsonpCallback",
    success : function(data){
        wx.config({
appId: data.appId,
timestamp: data.timestamp,
nonceStr: data.nonceStr,
signature: data.signature,
jsApiList: [
       "onMenuShareTimeline", //分享给好友
       "onMenuShareAppMessage", //分享到朋友圈
       "onMenuShareQQ",  //分享到QQ
       "onMenuShareWeibo" //分享到微博
]
});
},
                error:function(data){
                    alert("连接失败!");
                }
});
  wx.ready(function (){
  var shareData = {
  title: '标题',
  desc: '简介',//这里请特别注意是要去除html
  link: '链接',
  imgUrl: '题图'
  };
  wx.onMenuShareAppMessage(shareData);
  wx.onMenuShareTimeline(shareData);
  wx.onMenuShareQQ(shareData);
  wx.onMenuShareWeibo(shareData);
    });
</script>



修改服务端文件jssdk.php


<?php
$url = $_GET['url'];
class JSSDK {
  private $appId;
  private $appSecret;
  private $url;
  public function __construct($appId, $appSecret,$url) {
    $this->appId = $appId;
    $this->appSecret = $appSecret;
$this->url = $url;
  }


  public function getSignPackage() {
    $jsapiTicket = $this->getJsApiTicket();
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
   // $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$url =$this->url;
    $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("jsapi_ticket.json"));
    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;
  }
}

$jssdk = new JSSDK("公众号ID", "公众号密钥",$url);//按照自己的公众号填写
$signPackage = $jssdk->GetSignPackage();
$tmp=json_encode(array ('appId'=>$signPackage["appId"],'timestamp'=>$signPackage["timestamp"],'nonceStr'=>$signPackage["nonceStr"],'signature'=>$signPackage["signature"],'url'=>$signPackage["url"]));
$callback = $_GET['callback'];
echo $callback.'('.$tmp.')';
exit;
?>




其它公众号设置就按官方说明进行就可以了




2016-01-30 13:33:20 已设置保密 顶部 回复 引用 报告 编辑 删除

zhxin
用户头衔:探花

精华贴   :0
发贴数   :3773
经验值   :10388
注册时间:2013-01-09
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 2 楼]

支持




2016-01-30 20:02:03 已设置保密 顶部 回复 引用 报告 编辑 删除

luoto
用户头衔:探花

精华贴   :0
发贴数   :5799
经验值   :17477
注册时间:2008-11-08
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 3 楼]

支持




2016-01-31 08:24:54 已设置保密 顶部 回复 引用 报告 编辑 删除

8877
用户头衔:进士

精华贴   :0
发贴数   :1195
经验值   :4218
注册时间:2006-06-15
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 4 楼]

太好了!谢谢分享!




2016-01-31 17:29:15 已设置保密 顶部 回复 引用 报告 编辑 删除

帝国时代3
用户头衔:探花

精华贴   :0
发贴数   :3462
经验值   :10602
注册时间:2008-03-26
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 5 楼]

支持下




2016-02-01 08:34:09 已设置保密 顶部 回复 引用 报告 编辑 删除

rerere
用户头衔:探花

精华贴   :0
发贴数   :5236
经验值   :16664
注册时间:2009-08-13
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 6 楼]

支持




2016-02-02 08:24:50 已设置保密 顶部 回复 引用 报告 编辑 删除

善良的麦兜
用户头衔:秀才

精华贴   :0
发贴数   :7
经验值   :431
注册时间:2010-08-17
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 7 楼]

其实有一个更为简单的方法
定义一个变量$shareurl
去判断havehtml这个字段的值
$rf=$empire->fetch1("select * from {$dbtbpre}ecms_xx where id=$navinfor[id]");
if($rf[havehtml]==1)
{
$shareurl="静态url";
}
else
{
$shareurl="动态url";
}




2016-02-02 23:19:20 已设置保密 顶部 回复 引用 报告 编辑 删除

jjfjj
用户头衔:探花

精华贴   :0
发贴数   :3167
经验值   :8721
注册时间:2009-02-12
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 8 楼]

支持




2016-02-03 08:14:58 已设置保密 顶部 回复 引用 报告 编辑 删除

花心
用户头衔:探花

精华贴   :0
发贴数   :4374
经验值   :13671
注册时间:2008-11-01
信息 搜索 好友 发送悄悄话 精益求精-帝国网站管理系统7.5正式版开源发布】   [第 9 楼]

谢谢分享




2016-02-06 07:41:05 已设置保密 顶部 回复 引用 报告 编辑 删除

luoto
用户头衔:探花

精华贴   :0
发贴数   :5799
经验值   :17477
注册时间:2008-11-08
信息 搜索 好友 发送悄悄话 免费开源-EBMA系统:更安全的MYSQL管理和备份系统】   [第 10 楼]

顶了




2016-02-07 08:17:15 已设置保密 顶部 回复 引用 报告 编辑 删除
 1/4     1 2 3 4 ›› ›|

快速回复
内容

表情
使用EBB代码 使用smile代码 显示签名 自动分析url 自动分析img
     【进入高级模式】   (按 Ctrl+Enter 直接提交)
    顶部  加入收藏夹
关于帝国 | 广告服务 | 联系我们 | 法律声明 | 隐私条款 | 许可协议
Powered by: EBB Version 2.2.1