php一个文件搞定微信jssdk配置


Posted in PHP onDecember 12, 2016

php一个文件搞定微信jssdk配置:

包括缓存,包括https通讯,获取微信access_token,签名什么的都有。但是防范性编程做得比较少,商业用的话,需要完善下代码。

使用姿势

^ajax(Common.ServerUrl + "GetWX.php", {
 data: {
  Type: "config",
  url: location.href.split('#')[0]
 },
 dataType: 'json',
 type: 'get',
 timeout: 5000,
 success: function(data) {
  wx.config({
   debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
   appId: '……', // 必填,公众号的唯一标识
   timestamp: data.timestamp, // 必填,生成签名的时间戳
   nonceStr: data.nonceStr, // 必填,生成签名的随机串
   signature: data.signature, // 必填,签名,见附录1
   jsApiList: ["getLocation"] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
  });
 }
})
wx.ready(function() {
 wx.getLocation({
  type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
  success: function(res) {
   var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
   var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
   plus2.storage.setItem("latitude", latitude);
   plus2.storage.setItem("longitude", longitude);
  }
 });
});

服务端

GetWX.php

<?php
 include "lib/Cache.php";
 define($APPID, "……");
 define($SECRET, "……")
 if($_GET['Type'] == "access_token"){
//  echo getAccess_token();
 }
 else if($_GET['Type'] == "jsapi_ticket"){
//  echo getJsapi_ticket();
 }
 else if($_GET['Type'] == "config"){
  $jsapi_ticket = getJsapi_ticket();
  $nonceStr = "x".rand(10000,100000)."x"; //随机字符串
  $timestamp = time(); //时间戳
  $url = $_GET['url'];
  $signature = getSignature($jsapi_ticket,$nonceStr, $timestamp, $url);

  $result = array("jsapi_ticket"=>$jsapi_ticket, "nonceStr"=>$nonceStr,"timestamp"=>$timestamp,"url"=>$url,"signature"=>$signature);
  echo json_encode($result);
 }

 function getSignature($jsapi_ticket,$noncestr, $timestamp, $url){
  $string1 = "jsapi_ticket=".$jsapi_ticket."&noncestr=".$noncestr."×tamp=".$timestamp."&url=".$url;
  $sha1 = sha1($string1);
  return $sha1;
 }

 function getJsapi_ticket(){
  $cache = new Cache();
  $cache = new Cache(7000, 'cache/'); //需要创建cache文件夹存储缓存文件。
  //从缓存从读取键值 $key 的数据
  $jsapi_ticket = $cache -> get("jsapi_ticket");
  $access_token = getAccess_token();
  //如果没有缓存数据
  if ($jsapi_ticket == false) {
   $access_token = getAccess_token();
   $url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket'; 
   $data = array('type'=>'jsapi','access_token'=>$access_token); 
   $header = array(); 
   $response = json_decode(curl_https($url, $data, $header, 5)); 
   $jsapi_ticket = $response->ticket;
   //写入键值 $key 的数据
   $cache -> put("jsapi_ticket", $jsapi_ticket);
  }
  return $jsapi_ticket;
 }

 function getAccess_token(){
  $cache = new Cache();
  $cache = new Cache(7000, 'cache/');
  //从缓存从读取键值 $key 的数据
  $access_token = $cache -> get("access_token");

  //如果没有缓存数据
  if ($access_token == false) {
   $url = 'https://api.weixin.qq.com/cgi-bin/token'; 
   $data = array('grant_type'=>'client_credential','appid'=>$APPID,'secret'=>$SECRET); 
   $header = array();

   $response = json_decode(curl_https($url, $data, $header, 5)); 
   $access_token = $response->access_token;
   //写入键值 $key 的数据
   $cache -> put("access_token", $access_token);
  }
  return $access_token;
 }

 /** curl 获取 https 请求 
 * @param String $url 请求的url 
 * @param Array $data 要?送的?? 
 * @param Array $header 请求时发送的header 
 * @param int $timeout 超时时间,默认30s 
 */ 
 function curl_https($url, $data=array(), $header=array(), $timeout=30){ 
  $ch = curl_init(); 
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 
  curl_setopt($ch, CURLOPT_URL, $url); 
  curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
  curl_setopt($ch, CURLOPT_POST, true); 
  curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
  curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);

  $response = curl_exec($ch);

  if($error=curl_error($ch)){ 
  die($error); 
  }

  curl_close($ch);

  return $response;

 } 
?>

Cache.php
不知道哪位写的源代码~

<?php
class Cache {
 private $cache_path;
 //path for the cache
 private $cache_expire;
 //seconds that the cache expires

 //cache constructor, optional expiring time and cache path
 public function Cache($exp_time = 3600, $path = "cache/") {
  $this -> cache_expire = $exp_time;
  $this -> cache_path = $path;
 }

 //returns the filename for the cache
 private function fileName($key) {
  return $this -> cache_path . md5($key);
 }

 //creates new cache files with the given data, $key== name of the cache, data the info/values to store
 public function put($key, $data) {
  $values = serialize($data);
  $filename = $this -> fileName($key);
  $file = fopen($filename, 'w');
  if ($file) {//able to create the file
   fwrite($file, $values);
   fclose($file);
  } else
   return false;
 }

 //returns cache for the given key
 public function get($key) {
  $filename = $this -> fileName($key);
  if (!file_exists($filename) || !is_readable($filename)) {//can't read the cache
   return false;
  }
  if (time() < (filemtime($filename) + $this -> cache_expire)) {//cache for the key not expired
   $file = fopen($filename, "r");
   // read data file
   if ($file) {//able to open the file
    $data = fread($file, filesize($filename));
    fclose($file);
    return unserialize($data);
    //return the values
   } else
    return false;
  } else
   return false;
  //was expired you need to create new
 }

}
?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php2html php生成静态页函数
Dec 08 PHP
11个PHP 分页脚本推荐
Aug 15 PHP
php遍历目录与文件夹的多种方法详解
Nov 14 PHP
smarty内置函数config_load用法实例
Jan 22 PHP
PHP 实现的将图片转换为TXT
Oct 21 PHP
ThinkPHP连接Oracle数据库
Apr 22 PHP
示例详解Laravel重置密码代码重构
Aug 10 PHP
Thinkphp5.0自动生成模块及目录的方法详解
Apr 17 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
php关联数组与索引数组及其显示方法
Mar 12 PHP
用PHP做了一个领取优惠券活动的示例代码
Jul 05 PHP
一文搞懂PHP中的抽象类和接口
May 25 PHP
php自定义扩展名获取函数示例
Dec 12 #PHP
DWZ+ThinkPHP开发时遇到的问题分析
Dec 12 #PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
Dec 12 #PHP
简单谈谈PHP中的Reload操作
Dec 12 #PHP
php的laravel框架快速集成微信登录的方法
Dec 12 #PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
Dec 12 #PHP
php+ajax+json 详解及实例代码
Dec 12 #PHP
You might like
几个php应用技巧
2008/03/27 PHP
Fine Uploader文件上传组件应用介绍
2013/01/06 PHP
深入讲解PHP的Yii框架中的属性(Property)
2016/03/18 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
Javascript 的addEventListener()及attachEvent()区别分析
2009/05/21 Javascript
js里取容器大小、定位、距离等属性搜集整理
2013/08/19 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
JS根据年月获得当月天数的实现代码
2014/07/03 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
用js代码和插件实现wordpress雪花飘落效果的四种方法
2014/12/15 Javascript
jQuery动态修改超链接地址的方法
2015/02/13 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
2016/05/21 Javascript
浅谈javascript中的三种弹窗
2016/10/21 Javascript
AngularJS动态加载模块和依赖的方法分析
2016/11/08 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
2019/05/22 Javascript
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
在Pycharm中执行scrapy命令的方法
2019/01/16 Python
python实现批量注册网站用户的示例
2019/02/22 Python
Python安装Flask环境及简单应用示例
2019/05/03 Python
Python语法分析之字符串格式化
2019/06/13 Python
django框架防止XSS注入的方法分析
2019/06/21 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
GLAMGLOW香港官网:明星出镜前的秘密武器
2017/03/16 全球购物
介绍一下XMLHttpRequest对象
2012/02/12 面试题
合伙开公司协议书范本
2014/10/28 职场文书
2015中学教学工作总结
2015/07/22 职场文书
初中语文教师研修日志
2015/11/13 职场文书
导游词之山东红叶谷
2019/10/31 职场文书
python读取pdf格式文档的实现代码
2021/04/01 Python
JS的深浅复制详细
2021/10/16 Javascript
mysql主从复制的实现步骤
2021/10/24 MySQL