重庆小潘seo博客

当前位置:首页 > 重庆网络营销 > 小潘杂谈 >

小潘杂谈

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

时间:2020-09-04 14:00:07 作者:重庆seo小潘 来源:
这篇文章主要介绍了微信封装的调用微信签名包的类库的相关资料,需要的朋友可以参考下 废话不多说了,直接给大家贴代码了,具体代码如下所示: ?phpnamespace HomeModel;use ThinkModel;class WechatModel extends Model {private $_token = ; //令牌private

这篇文章主要介绍了微信封装的调用微信签名包的类库的相关资料,需要的朋友可以参考下

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

<?phpnamespace HomeModel;use ThinkModel;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&timestamp=$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 Tokenpublic 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; }//获取用户的openidpublic 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;}}//获取微信用户的opnidpublic 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; }}以上就是微信封装的调用微信签名包的类库的详细内容,更多请关注小潘博客其它相关文章!