ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
1.在微信公众平台后台配置JS接口安全源码 ![](https://box.kancloud.cn/ae2af32b0851847aee1c9b52f5ceca69_805x179.png) 2.下载官方demo, 下载地址https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 附录6 ![](https://box.kancloud.cn/51ca68d6fb82a7aee6eac32d39e180e5_829x500.png) 下载内容展示 ![](https://box.kancloud.cn/1078277bfa299f1ae02eeafa1c08c1d3_842x230.png) 3.在根目录下的/Application/Home/Controller文件夹中的SdkController.class.php文件,书写index方法 ~~~ <?php namespace Home\Controller; use Think\Controller; use Com\Wechat; use Com\WechatAuth; class SdkController extends Controller { private $appid="wx165112bf167af76c"; private $appSecret="c65b22bfcf03fdd98504eac299701b03"; private $WechatAuth="";//初始化WechatAuth类 private $access_token="";//缓存token public function __construct(){ parent::__construct();//可能内部已经有这个构造方法了,因此加上这个 if(!session('token')){ $this->WechatAuth=new WechatAuth($this->appid,$this->appSecret);//初始化WechatAuth类 $WechatAuth=$this->WechatAuth; $token=$WechatAuth->getAccessToken(); session(array('expire'=>$token['expires_in']));//设置过期时间 session('token',$token['access_token']);//缓存token $this->access_token=$token; }else{ $token=session('token'); $this->WechatAuth=new WechatAuth($this->appid,$this->appSecret,$token);//初始化WechatAuth类 $this->access_token=$token;//缓存token } } // public function index() { $this->display(); } } ~~~ 4.在根目录下的/Application/Home文件夹中创建View文件夹,并在View文件夹中创建Sdk文件夹,并在Sdk文件夹中创建index.html文件,并将官方demo中的sample中的代码copy到index.html文件中 ~~~ <?php require_once "jssdk.php"; $jssdk = new JSSDK("yourAppID", "yourAppSecret"); $signPackage = $jssdk->GetSignPackage(); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> </body> <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> <script> /* * 注意: * 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 * 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。 * 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html * * 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈: * 邮箱地址:weixin-open@qq.com * 邮件主题:【微信JS-SDK反馈】具体问题 * 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。 */ wx.config({ debug: true, appId: '<?php echo $signPackage["appId"];?>', timestamp: <?php echo $signPackage["timestamp"];?>, nonceStr: '<?php echo $signPackage["nonceStr"];?>', signature: '<?php echo $signPackage["signature"];?>', jsApiList: [ // 所有要调用的 API 都要加到这个列表中 ] }); wx.ready(function () { // 在这里调用 API }); </script> </html> ~~~ 5.将官方demo中的jssdk中的部分代码copy到SdkController.class.php文件中,并作出适当修改 ~~~ <?php namespace Home\Controller; use Think\Controller; use Com\Wechat; use Com\WechatAuth; class SdkController extends Controller { private $appid="wx165112bf167af76c"; private $appSecret="c65b22bfcf03fdd98504eac299701b03"; private $WechatAuth="";//初始化WechatAuth类 private $access_token="";//缓存token private $jsapi_ticket="";//缓存jsapi_ticket /** * 微信api根路径 * @var string */ private $apiURL = 'https://api.weixin.qq.com/cgi-bin'; public function __construct(){ parent::__construct();//可能内部已经有这个构造方法了,因此加上这个 if(!session('token')){ $this->WechatAuth=new WechatAuth($this->appid,$this->appSecret);//初始化WechatAuth类 $WechatAuth=$this->WechatAuth; $token=$WechatAuth->getAccessToken(); session(array('expire'=>$token['expires_in']));//设置过期时间 session('token',$token['access_token']);//缓存token $this->access_token=$token; }else{ $token=session('token'); $this->WechatAuth=new WechatAuth($this->appid,$this->appSecret,$token);//初始化WechatAuth类 $this->access_token=$token;//缓存token } // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例 if (!session('jsapi_ticket')) { $accessToken=$this->access_token; // 如果是企业号用以下 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)); //$this->jsapi_ticket ="555"; $this->jsapi_ticket = $res->ticket; session(array('expire'=>5));//设置过期时间,实际设置7200秒,现在设为5秒方便测试 session('jsapi_ticket', $this->jsapi_ticket); } else { $this->jsapi_ticket = session('jsapi_ticket'); } } public function test() { /* $accessToken = $this->access_token; $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken"; $res = json_decode($this->httpGet($url));*/ var_dump( $this->jsapi_ticket); } // public function index() { $this->getSignPackage(); /* $data=$this->getSignPackage(); $this->assign('data',$data);*/ $this->display(); } public function getSignPackage(){ echo $this->jsapi_ticket; exit; // 注意 URL 一定要动态获取,不能 hardcode. $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; } 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 httpGet($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 500); // 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。 // 如果在部署过程中代码在此处验证失败,请到 http://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; } } ~~~ 6.在微信web开发工具中测试为: ![](https://box.kancloud.cn/482f47f5db425bdadf1dd26712eebc2e_1008x332.png) 7.本节源码下载(下载密码:13cg) [源码下载](https://pan.baidu.com/s/1aw5IcLGitmqrGY5b6vZuEg)