微信公众平台开发教程②微信端分享功能图文详解分享!

      类似 “Warning: fopen(access_token.json) [function.fopen]: failed to open stream: Permission denied in jssdk.php “问题,可以参考此文的部分介绍。
     微信公众平台开发教程②微信端分享功能图文详解       值得一提的是该问题大多牵扯操作系统的权限分配,之前我用的是新浪SAE进行测试,后面得知SAE是无法由我们用户进行权限设定的,最后我选择了公司服务器,使用类似 “chmod -R 777 /home/mypackage ” 的命令进行对应文件的操作权限分配。

1.出现问题,多参考别人的解决方法,可见有一个可以带你的前辈是多么重要 

2.自己探索问题的解决方法,然后做好笔记作为自己的经历回顾,虽然解决时间拉长,但成就感绝对比从别人口中听来分量重的多。 

3.在此我粘贴稍作修改后的代码,其实就是其中的大概几行的改动,为了配合上面签名的测试,所以需要参考,其中另外的两个文件没做改动,无需上传,公众号开发文档的最后就有 demo 文件,具体的请参照开发文档。      

  <?php  class JSSDK {   private $appId;   private $appSecret;     public function __construct($appId, $appSecret) {   $this->appId = $appId;   $this->appSecret = $appSecret;   }     public function getSignPackage() {   $jsapiTicket = $this->getJsApiTicket();     // 注意 URL 一定要动态获取,不能 hardcode.   $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "https://";   $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,   "jsapiTicket" => $jsapiTicket,   "nonceStr" => $nonceStr,   "timestamp" => $timestamp,   "url" => $url,   "signature" => $signature,   "rawString" => $string   );   return $signPackage;   }     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;   }     private function getJsApiTicket() {   // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例   $data = json_decode($this->get_php_file("jsapi_ticket.php"));   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;   $this->set_php_file("jsapi_ticket.php", json_encode($data));   }   } else {   $ticket = $data->jsapi_ticket;   }     return $ticket;   }     private function getAccessToken() {   // access_token 应该全局存储与更新,以下代码以写入到文件中做示例   $data = json_decode($this->get_php_file("access_token.php"));   if ($data->expire_time < time()) {   // 如果是企业号用以下URL获取access_token   // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";   $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;   $this->set_php_file("access_token.php", json_encode($data));   }   } else {   $access_token = $data->access_token;   }   return $access_token;   }     private function httpGet($url) {   $curl = curl_init();   curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);   curl_setopt($curl, CURLOPT_TIMEOUT, 500);   // 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。   // 如果在部署过程中代码在此处验证失败,请到 https://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。   curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);   //curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);   curl_setopt($curl, CURLOPT_URL, $url);     $res = curl_exec($curl);   curl_close($curl);     return $res;   }     private function get_php_file($filename) {   return trim(substr(file_get_contents($filename), 15));   }   private function set_php_file($filename, $content) {   $fp = fopen($filename, "w");   fwrite($fp, "<?php exit();?>" . $content);   fclose($fp);   }  }

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/phpttorial/469226.html

(0)
上一篇 2020年10月25日
下一篇 2020年10月25日

精彩推荐