<?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. jQuery笔记之animate中的queue

    队列 队列的执行顺序 queue() dequeue() 输出对象里面的内容 依次出队 不过这样写太麻烦了,因为每次都要输出,所以我们看下面的方法 运用到队列输出的 <!DOCTYPE html ...

  2. shiro之SimpleAccountRealm

    我使用的是maven构建的工程,junit测试 Shiro认证过程 创建SecurityManager--->主体提交认证--->SecurityManager认证--->Authe ...

  3. play framework

    Compilation errorThe file {module:docviewer}/app/controllers/PlayDocumentation.java could not be com ...

  4. [POI2007]办公楼biu

    Description FGD开办了一家电话公司.他雇用了N个职员,给了每个职员一部手机.每个职员的手机里都存储有一些同事的电话号码.由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄,FGD决 ...

  5. ACM_查找ACM(加强版)

    查找ACM(加强版) Time Limit: 2000/1000ms (Java/Others) Problem Description: 作为一个acmer,应该具备团队合作能力和分析问题能力.给你 ...

  6. 移动端UI自动化Appium测试——Appium server两种启动方式

    执行自动化测试之前,需要先运行appium server,这样才能形成server与java client的通信,启动server有两种方式,一种是命令,一种是按钮图标,具体使用如下: 1.用命令启动 ...

  7. [转]Windows Azure入门教学系列 (六):使用Table Storage

    本文转自:http://blogs.msdn.com/b/azchina/archive/2010/03/11/windows-azure-table-storage.aspx 本文是Windows ...

  8. Vue.js学习笔记--2.基础v-指令

    整理自官网教程 -- https://cn.vuejs.org/ 1. v-bind绑定Class与Style a. 绑定Class 语法:v-bind:class="{classname: ...

  9. vue项目开发前的es6的知识储备

    let命令 学习笔记 1.let所声明的变量,只在let命令所在的代码块内有效. 2.不存在变量提升:所声明的变量一定要在声明后使用,否则报错. 一定要先声明,再去使用.let x=x;这样就是错误的 ...

  10. Linux下支持mysql支持远程ip访问

    示例代码: use mysql; SELECT `Host`,`User` FROM user; UPDATE user SET `Host` = '%' WHERE `User` = 'use**' ...