微信封装的调用微信签名包的类库


Posted in PHP onJune 08, 2017

废话不多说了,直接给大家贴代码了,具体代码如下所示:

<?php
namespace Home\Model;
use Think\Model;
class WechatModel extends Model {
private $_token = ''; //令牌
    private $appid;
    private $appsecret;
  public function __construct()
  {
    $this->appid = C('APPID');//公众号的appid
    $this->appsecret = C('APPSECRET');//公众号的秘钥
  }
  //调用js-sdk的签名包
  public function getSignPackage() {
  $jsapiTicket = $this->getJsApiTicket();
  // 注意 URL 一定要动态获取,不能 hardcode.(获取当前网页的url)
  $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×tamp=$timestamp&url=$url";
  //生成字符串是用来签名用的
  $signature = sha1($string);
  $signPackage = array(
   "appId"   => $this->appid,
   "nonceStr" => $nonceStr,
   "timestamp" => $timestamp,
   "url"    => $url,
   "signature" => $signature,
   "rawString" => $string
  );
  return $signPackage; 
 }
 //使用会员卡领取的签名包
 public function getHuiYuanSignPackage() {
  $apiTicket = $this->getApiTicket();
  // 注意 URL 一定要动态获取,不能 hardcode.(获取当前网页的url)
  $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 = $timestamp.$apiTicket."car_id";//card_id为自己创建的会员卡的id
  //生成字符串是用来签名用的
  $signature = sha1($string);
  $signPackage = array(
   "timestamp" => $timestamp,
   "signature" => $signature,
  );
  return $signPackage; 
 }
 //获取会员卡的api_ticket
 public function getApiTicket(){
 $data = json_decode(file_get_contents("api_ticket.json"));
  if ($data->expire_time < time()) {
   $accessToken = $this->getAccessToken();
   $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=wx_card&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("api_ticket.json", "w");
    fwrite($fp, json_encode($data));
    fclose($fp);
   }
  } else {
   $ticket = $data->jsapi_ticket;
  }
  return $ticket;
 }
 //获取随机字符串
 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;
 }
  //获取Access Token
  public function getAccessToken(){
  //将json字符串转换为json对象(json_encode是将数组转换为json字符串,json_decode("",true) 如果加true是将json字符串转化为php数组,不加true转换为PHP对象)
  $data = json_decode(file_get_contents("access_token.json"));
  if ($data->expire_time < time()) {
   // 如果是企业号用以下URL获取access_token
   $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;
  }
 //获取jsapi_ticket(jsapi_ticket是公众号用于调用微信JS接口的临时票据)
  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;
 }
  //获取用户的openid
  public function openId(){
  $url = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 
    if (!isset($_GET['code'])) {
     //获取组装的url
      $openidUrl = $this->snsapi_base($url);
      redirect($openidUrl);
    }else{
      $openidAccess_token = $this->openidAccess_token($_GET['code']);
      return $openidAccess_token;
    }
  }
   //获取微信用户的opnid
  public function getOpenId($openid,$access_token)
  {
    $userInfo = $this->getUserInfo($openid,$access_token);
    return $userInfo;
  }
   public function snsapi_base($redirect_uri, $scope = "snsapi_userinfo", $state = 0)
  {
    $appId = $this->appid;
    $url = "https://open.weixin.qq.com/connect/oauth2/authorize";
    $url .= "?appid=$appId";
    $url .= "&redirect_uri=http://$redirect_uri";
    $url .= "&response_type=code";
    $url .= "&scope=$scope";
    $url .= "&state=$state#wechat_redirect";
    return $url;
  }
public function openidAccess_token($code){
    $appId = $this->appid;
    $appSecret= $this->appsecret;
    $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appId&secret=$appSecret&code=$code&grant_type=authorization_code";
    return json_decode($this->httpGet($url),true);
  }
  //获取用户信息
  public function getUserInfo($openid, $access_token){
  $url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN ";
    return json_decode($this->httpGet($url),true);
   //请求
  }
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;
 }
}

以上所述是小编给大家介绍的微信封装的调用微信签名包的类库,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
php xml-rpc远程调用
Dec 19 PHP
PHP 显示客户端IP与服务器IP的代码
Oct 12 PHP
九个你必须知道而且又很好用的php函数和特点
Aug 08 PHP
php object转数组示例
Jan 15 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
Jul 25 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
Aug 21 PHP
PHP实现获取域名的方法小结
Nov 05 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
Mar 18 PHP
Smarty模板变量调节器用法分析
May 23 PHP
yii2 commands模式以及配置crontab定时任务的方法
Aug 19 PHP
PHP实现微信小程序用户授权的工具类示例
Mar 05 PHP
PHP实现基于状态的责任链审批模式详解
May 31 PHP
微信公众号实现会员卡领取功能
Jun 08 #PHP
php图像验证码生成代码
Jun 08 #PHP
php面向对象的用户登录身份验证
Jun 08 #PHP
php实现用户注册密码的crypt加密
Jun 08 #PHP
php封装一个异常的处理类
Jun 08 #PHP
php简单构造json多维数组的方法示例
Jun 08 #PHP
php显示页码分页类的封装
Jun 08 #PHP
You might like
PHP sprintf()函数用例解析
2011/05/18 PHP
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
2015/10/10 PHP
PHP编写的图片验证码类文件分享
2016/06/06 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
js DOM 元素ID就是全局变量
2012/09/20 Javascript
jQuery cdn使用介绍
2013/05/08 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
Bootstrap每天必学之模态框(Modal)插件
2016/04/26 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
js实现随机数字字母验证码
2017/06/19 Javascript
vue中mint-ui的使用方法
2018/04/04 Javascript
webpack4+react多页面架构的实现
2018/10/25 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
基于循环神经网络(RNN)的古诗生成器
2018/03/26 Python
对python调用RPC接口的实例详解
2019/01/03 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
2019/07/31 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
2019/10/23 Python
Python之指数与E记法的区别详解
2019/11/21 Python
Python实现大数据收集至excel的思路详解
2020/01/03 Python
Python如何通过Flask-Mail发送电子邮件
2020/01/29 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
2020/02/25 Python
Python关键字及可变参数*args,**kw原理解析
2020/04/04 Python
python模块如何查看
2020/06/16 Python
施华洛世奇德国官网:SWAROVSKI德国
2017/02/01 全球购物
乌克兰巴士票购买网站:inBus
2021/03/12 全球购物
乐观大学生的自我评价
2014/01/10 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
音乐课《小猫钓鱼》教学反思
2016/02/18 职场文书
90条交通安全宣传标语
2019/10/12 职场文书
Golang 获取文件md5校验的方法以及效率对比
2021/05/08 Golang