<?php
namespace app\wechat\service;
use think\Config;
class Signature
{
protected $appId ;
protected $appSecret;
protected $path; public function __construct($type='service') { $this->appId = Config::get('wx_'.$type.'.appId');
$this->appSecret = Config::get('wx_'.$type.'.appSecret');
$this->path = Config::get('wx_'.$type.'.fileUrl');
}
public function getSignPackage() { $jsapiTicket = $this->getJsApiTicket();
$url = urldecode($_GET['sign_url']);
$timestamp = time();
$nonceStr = get_rand_str(16, 0, 1, 0);
// 这里参数的顺序要按照 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 getJsApiTicket() { $JsApiTicket = $this->path . "JsApiTicket_pssh.json";//缓存文件名
!is_file($JsApiTicket) && touch($JsApiTicket, '777');
$data = json_decode(file_get_contents($JsApiTicket), true);
if ($data['expire_time'] < time() or !$data['expire_time']) {
$accessToken = $this->access_Token();
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
$res = json_decode(httpRequest($url, 'GET'), true);
$ticket = $res['ticket'];
if ($ticket) {
$data['expire_time'] = time() + 7000;
$data['jsapi_ticket'] = $ticket;
$fp = fopen($JsApiTicket, "w+");
fwrite($fp, json_encode($data));
fclose($fp);
}
} else {
$ticket = $data['jsapi_ticket'];
}
return $ticket;
} public function access_Token() { $tokenFile = $this->path . "accessToken_pssh.json";//缓存文件名
!is_file($tokenFile) && touch($tokenFile, '777');
$data = json_decode(file_get_contents($tokenFile), true);
if ($data['expire_time'] < time() or !$data['expire_time']) {
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appId=".$this->appId."&secret=".$this->appSecret;
$res = httpRequest($url, 'GET');
$res = json_decode($res,true);
$access_token = $res['access_token'];
if($access_token) {
$data['expire_time'] = time() + 7000;
$data['access_token'] = $access_token;
$fp = fopen($tokenFile, "w");
fwrite($fp, json_encode($data));
fclose($fp);
}
} else {
$access_token = $data['access_token'];
}
return $access_token;
} }

使用 (上面的配置文件根据自己的需要写)

public function getSignPackage()
{
$sign = new SignatureService('service');
$result = $sign->getSignPackage();
return json($result);
}

这是基于TP5写的  自己记录用  要是能看懂就拿走

SignatureService()方法里面的参数是区分不同公众号 这样也要有不同的配置文件
function share_disable(){
$.ajax({
type: 'GET',
url: localurl + "/index.php/……/getSignPackage",
data: {sign_url:encodeURIComponent(location.href.split('#')[0])},
dataType: 'JSON',
success: function(data){ wx.config({
// debug :true,
appId: data.appId,
timestamp: data.timestamp,
nonceStr: data.nonceStr,
signature: data.signature,
jsApiList: [
"hideMenuItems"
]
});
wx.ready(function () {
wx.hideMenuItems({
menuList: [
"menuItem:share:qq",
"menuItem:share:timeline",
"menuItem:share:appMessage",
"menuItem:share:QZone",
"menuItem:share:weiboApp",
"menuItem:favorite",
"menuItem:share:facebook",
"menuItem:copyUrl",
"menuItem:openWithQQBrowser",
"menuItem:share:email",
"menuItem:openWithSafari",
"menuItem:originPage"
] // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3
});
});
}
}); }

这是隐藏分享按钮的示例

微信sdk 签名的更多相关文章

  1. asp.net 获得伪静态网址解决微信sdk签名问题

    手机网站是asp.net c#编写的,前几天因为要使用微信SDK在手机网站页面使用分享功能,但是程序使用了伪静态功能.如果原地址是:http://ww.xx.com/news/show.aspx?id ...

  2. 微信sdk php签名方法整理

    <?php class JSSDK { private $appId; private $appSecret; public function __construct($appId, $appS ...

  3. .NET平台下的微信SDK(Rabbit.WeiXin)开源发布

    在上一篇文章<RabbitHub开源情况及计划>上有提及到了一个新的开源项目——微信SDK,经过几天的努力现在开源发布Beta1版本. 目录 前言 特点 功能 支持的消息类型 请求消息 事 ...

  4. 超级懒汉编写的基于.NET的微信SDK

    一.前言 特别不喜欢麻烦的一个人,最近碰到了微信开发.下载下来了一些其他人写的微信开发“框架”,但是被恶心到了,实现的太臃肿啦. 最不喜欢的就是把微信返回的xml消息在组装成实体类,所以会比较臃肿,现 ...

  5. Android 微信SDK分享功能中的最全过程步骤分析

    在前面有一章已经分析过怎么用官方的demo分享微信信息了,在这里我就不再多说,其中关于在自己应用分享说得很简单,本文作者也是经过一番折腾才弄成功,为了以后让大家都少走弯路,决定在这里从头到尾介绍怎么在 ...

  6. 微信SDK使用总结

    最近做一个分享功能,需要使用微信SDK分享内容给朋友或朋友圈.期间遇到些奇怪的问题,花了点时间去折腾了一番. 首先需要到微信开放平台http://open.weixin.qq.com/?lang=zh ...

  7. Xamarin绑定微信SDK 实现分享功能

    从开始做这一块的工作开始,就开始找各种的资料,最后还是老老实实的去看官方文档. 对于Xamarin.Android的绑定属于纯jar的绑定,这个难度较小,添加Bindings Library,将lib ...

  8. iOS-不用微信SDK唤起微信支付

    作者:TianBai 原文链接:http://www.jianshu.com/p/8930b4496023 要想知道微信SDK是如何调起微信客户端,那么咱们先看看微信SDK到底做了什么 前期准备 接入 ...

  9. 基于.NET的轻量级微信SDK

    一.前言 特别不喜欢麻烦的一个人,最近碰到了微信开发.下载下来了一些其他人写的微信开发“框架”,但是被恶心到了,实现的太臃肿啦. 最不喜欢的就是把微信返回的xml消息在组装成实体类,所以会比较臃肿,现 ...

随机推荐

  1. 51nod 1120 机器人走方格 V3 【卡特兰数+卢卡斯定理+组合数】

    -我并不知道为什么事卡特兰数,反正用dp打的表就是卡特兰数,因为是两个三角所以再乘个2 卡特兰数使用\( h(n)=\frac{C_{2n}^{n}}{n+1} \)因为范围比较大所以组合数部分用卢卡 ...

  2. JS开发备忘笔记-- Javascript中document.execCommand()的用法

    document.execCommand()方法处理Html数据时常用语法格式如下:document.execCommand(sCommand[,交互方式, 动态参数]) 其中:sCommand为指令 ...

  3. 【原创】CentOS 6.5 中安装 Mysql 5.6,并远程连接Mysql

    ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 1.在安装CentOS时,若选择的是Basic Server(可支持J2EE开发),则新安装好的CentOS系统中默认是已经安装了一个mysq ...

  4. [Usaco2006 Open]County Fair Events 参加节日庆祝

    Description Farmer John has returned to the County Fair so he can attend the special events (concert ...

  5. synchronized(4)修饰语句块之:synchronized(this)

    synchronized(this) 此时,线程获得的是对象锁.例如: public class Thread8 extends Thread { public void sync_fun() { s ...

  6. hbase最近的一些实践

    有一段实践没有写东西了,最近组里面来了两个新的小伙伴,并且一起针对目前的hbase集群做了一些运维和优化实践,比较零散,记录下来供以后以及和大家参考. 1,hbase regionserver宕机导致 ...

  7. web+ admin template,spa管理应用后台,easyui后台正式发布

    演示地址:http://admintemplate.webplus.org.cn/ v1.0 (2016/7/27) 扁平化风格 全屏支持 后台管理不使用iframe,全ajax开发 权限管理 商品管 ...

  8. 开源一个Mac漂亮的小工具 PPRows for Mac, 在Mac上优雅的计算你写了多少行代码

    开源一个Mac漂亮的小工具 PPRows for Mac, 在Mac上优雅的计算你写了多少行代码. 开源地址: https://github.com/jkpang/PPRows

  9. js 将XML字符串解析成XML文档 --- attribute construct error--- 空白字符与空格问题

    最近在做xml在线编辑器,遇到一个字符串解析成xml文档的问题,记录一下. 原始xml内容读取自xml文档 <label class="test" id="labe ...

  10. 对gridview绑定数据的操作方法及自定义显示内容

    GridView中Eval和 Bind 的使用 Eval:绑定的是只读数据的显示:Bind:可以绑定只读数据也可以绑定更新数据,Bind方法还把字段和控件的绑定属性联系起来,使得 数据控件(比如Gri ...