微信封装的调用微信签名包的类库
发布:smiling 来源: PHP粉丝网 添加日期:2018-09-28 11:15:57 浏览: 评论:0
废话不多说了,直接给大家贴代码了,具体代码如下所示:
- <?php
- namespaceHome\Model;
- useThink\Model;
- classWechatModelextendsModel {
- private$_token=''//令牌
- private$appid;
- private$appsecret;
- publicfunction__construct()
- {
- $this->appid = C('APPID');//公众号的appid
- $this->appsecret = C('APPSECRET');//公众号的秘钥
- }
- //调用js-sdk的签名包
- publicfunctiongetSignPackage() {
- $jsapiTicket=$this->getJsApiTicket();
- // 注意 URL 一定要动态获取,不能 hardcode.(获取当前网页的url)
- $protocol= (!emptyempty($_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;
- }
- //使用会员卡领取的签名包
- publicfunctiongetHuiYuanSignPackage() {
- $apiTicket=$this->getApiTicket();
- // 注意 URL 一定要动态获取,不能 hardcode.(获取当前网页的url)
- $protocol= (!emptyempty($_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
- publicfunctiongetApiTicket(){
- $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;
- }
- //获取随机字符串
- privatefunctioncreateNonceStr($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
- publicfunctiongetAccessToken(){
- //将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接口的临时票据)
- privatefunctiongetJsApiTicket() {
- // 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
- publicfunctionopenId(){
- $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
- publicfunctiongetOpenId($openid,$access_token)
- {
- $userInfo=$this->getUserInfo($openid,$access_token);
- return$userInfo;
- }
- publicfunctionsnsapi_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;
- }
- publicfunctionopenidAccess_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";
- returnjson_decode($this->httpGet($url),true);
- }
- //获取用户信息
- publicfunctiongetUserInfo($openid,$access_token){
- $url="https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN ";
- returnjson_decode($this->httpGet($url),true);
- //请求
- }
- privatefunctionhttpGet($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;
- }
- }
Tags: 微信封装 微信签名 类库
相关文章
- ·php实现生成PDF文件的方法示例【基于FPDF类库】(2021-10-19)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)