<?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. P4949 最短距离(树链剖分+树状数组+基环树)

    传送门 一个中午啊-- 本来打算用仙人掌搞的,后来发现直接基环树就可以了,把多出来的那条边单独记录为\((dx,dy,dw)\),剩下的树剖 然后最短路径要么直接树上跑,要么经过多出来的边,分别讨论就 ...

  2. VS2019 字符串对指针char*赋值编译器报错原因及解决方法

    2019-05-26   21:55:08 前几天在敲代码时,将字符串“Hellow world!”赋值给指针char*类型指针时编译器报错的问题 网上搜索后发现 char*是历史遗留问题,如果程序修 ...

  3. Luogu P1122最大子树和 【水树形Dp】By cellur925

    题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题.于是当日课后,小明 ...

  4. Go 连接PostgreSQL数据库

    先在PostgreSQL数据库中建一个表,可以使用PostgreSQL官方的pgAdmin来完成: CREATE TABLE userinfo ( uid serial NOT NULL, usern ...

  5. layer 确认或取消后跳转

    layer.open({ content: "下单成功" , btn: ['确定','取消'], style: 'width:80%', yes: function(index, ...

  6. maven学习-搭建环境

    1.Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. 2.下载: maven.apache.org 3.bin目录包含mvn的运行脚本: ...

  7. TSP+Floyd BestCoder Round #52 (div.2) 1002 Victor and Machine

    题目传送门 题意:有中文版的 分析:(出题人的解题报告)我们首先需要预处理出任意两个国家之间的最短距离,因为数据范围很小,所以直接用Floyd就行了.之后,我们用f[S][i]表示访问国家的情况为S, ...

  8. multiset || 线段树 HDOJ 4302 Holedox Eating

    题目传送门 题意:一个长度L的管子,起点在0.n次操作,0 p表示在p的位置放上蛋糕,1表示去吃掉最近的蛋糕(如果左右都有蛋糕且距离相同,那么吃同方向的蛋糕),问最终走了多少路程 分析:用multis ...

  9. android:fillViewport="true"让ScrollView内的view强行match_parent

    当你想让一个高度值不足scrollview的子控件fillparent的时候,单独的定义android:layout_height="fill_parent"是不起作用的,必须加上 ...

  10. scala学习笔记4:函数和闭包

    以下主要记录的是看完scala in programming这本书functions and closures(第八章)后的要点总结. 1,函数可以存在的地方:函数方法,嵌套函数. 2,关于funct ...