gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章php一个文件搞定微信jssdk配置由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

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

使用姿势 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
^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 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<?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 . "&timestamp=" . $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 不知道哪位写的源代码~ 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?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一个文件搞定微信jssdk配置的文章就讲到这里了,如果你想了解更多关于php一个文件搞定微信jssdk配置的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com