<?php // 签名公司效验地址 https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign // 方法1 get_access_token() 获取 access_token // 方法2 get_jsapi_ticket() 获取 jsapi_ticket // 方法3 fen_xaing_config($url) 获取js分享配置文件,需要传入分享的地址(#号以前的) class WeiXingInit{ public $APPID = 'XXXX'; public $SECRET = 'XXXXXXX'; // access_token 存储文件 频繁刷新access_token会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存access_token public $fileName_access = 'access_token'; // jsapi_ticket 存储文件 频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket public $fileName_jsapi_ticket = 'jsapi_ticket'; public $debug = false; // 获取 access_token public function get_access_token(){ $data = []; if(is_file($this->fileName_access)){ // 验证是否过期 $time = time(); $data = json_decode(file_get_contents($this->fileName_access),true); if(($time-$data['time']) > ($data['expires_in']-100)){ $data = $this->access_token_get_save(); } }else{ $data = $this->access_token_get_save(); } return $data; } // access_token 获取保存 function access_token_get_save(){ $url = "https://api.weixin.qq.com/cgi-bin/token"; $post_string = "grant_type=client_credential&appid=".$this->APPID."&secret=".$this->SECRET; $data = json_decode($this->curl($url, $post_string), true); $data['time'] = time(); file_put_contents($this->fileName_access, json_encode($data)); return $data; } // 获取 jsapi_ticket public function get_jsapi_ticket(){ $data = []; if(is_file($this->fileName_jsapi_ticket)){ // 验证是否过期 $time = time(); $data = json_decode(file_get_contents($this->fileName_jsapi_ticket),true); if(($time-$data['time']) > ($data['expires_in']-100)){ $data = $this->jsapi_ticket_get_save(); } }else{ $data = $this->jsapi_ticket_get_save(); } return $data; } // jsapi_ticket 获取保存 function jsapi_ticket_get_save(){ $data = []; $data_access = $this->get_access_token(); if(!empty($data_access['access_token'])){ $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket"; $post_string = "access_token=".$data_access['access_token']."&type=jsapi"; $data = json_decode($this->curl($url, $post_string), true); $data['time'] = time(); file_put_contents($this->fileName_jsapi_ticket, json_encode($data)); } return $data; } // 生成随机字符串 function generate_password( $length = 8 ) { // 密码字符集,可任意添加你需要的字符 $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $password = ""; for ( $i = 0; $i < $length; $i++ ) { // 这里提供两种字符获取方式 // 第一种是使用 substr 截取$chars中的任意一位字符; // 第二种是取字符数组 $chars 的任意元素 // $password .= substr($chars, mt_rand(0, strlen($chars) – 1), 1); $password .= $chars[ mt_rand(0, strlen($chars) - 1) ]; } return $password; } // 微信分享config public function fen_xaing_config($url){ $noncestr = $this->generate_password(15); $time = time(); return [ 'debug' => $this->debug, 'appId' => $this->APPID, // 必填,公众号的唯一标识 'timestamp' => $time, // 必填,生成签名的时间戳 'nonceStr' => $noncestr, // 必填,生成签名的随机串 'signature' => $this->get_qian_ming($url, $time, $noncestr),// 必填,签名 'jsApiList' => ['onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone'] // 必填,需要使用的JS接口列表 ]; } // 生成签名 function get_qian_ming($url, $time, $noncestr){ $data_jsapi = $this->get_jsapi_ticket(); $str = ""; if(!empty($data_jsapi['ticket'])){ $jsapi_ticket = $data_jsapi['ticket']; $timestamp = $time; $str = "jsapi_ticket=$jsapi_ticket&noncestr=$noncestr×tamp=$timestamp&url=$url"; $str = sha1($str); } return $str; } function curl($remote_server, $post_string) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $remote_server); curl_setopt($ch, CURLOPT_POSTFIELDS,$post_string); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // curl_setopt($ch, CURLOPT_USERAGENT, "qianyunlai.com's CURL Example beta"); $data = curl_exec($ch); curl_close($ch); return $data; } } ?>
微信js接口签名生成-后端
猜你喜欢
转载自blog.csdn.net/qq_29755359/article/details/79667391
今日推荐
周排行