{"id":22905,"date":"2024-11-21T14:56:51","date_gmt":"2024-11-21T06:56:51","guid":{"rendered":"https:\/\/fwq.ai\/blog\/22905\/"},"modified":"2024-11-21T14:56:51","modified_gmt":"2024-11-21T06:56:51","slug":"thinkphp5%e6%80%8e%e4%b9%88%e9%9b%86%e6%88%90js-sdk%e5%ae%9e%e7%8e%b0%e5%be%ae%e4%bf%a1%e8%87%aa%e5%ae%9a%e4%b9%89%e5%88%86%e4%ba%ab%e5%8a%9f%e8%83%bd","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/22905\/","title":{"rendered":"ThinkPHP5\u600e\u4e48\u96c6\u6210JS-SDK\u5b9e\u73b0\u5fae\u4fe1\u81ea\u5b9a\u4e49\u5206\u4eab\u529f\u80fd"},"content":{"rendered":"<p>jssdk\u7c7b\u5e93<\/p>\n<h4>1\u3001\u6587\u4ef6\u540d\u53ca\u4f4d\u7f6e<\/h4>\n<p>\u540d\u5b57\uff1aJssdk.php<br \/>\u4f4d\u7f6e\uff1aextendutilJssdk.php<\/p>\n<h4>2\u3001\u4ee3\u7801<\/h4>\n<pre>&lt;?php namespace util;\n\nclass Jssdk {\n\n    protected $appid = &#039;xxxx&#039;;\n    protected $secret = &#039;xxxx&#039;;\n\n    \/**\n     * \u83b7\u53d6access_token\u65b9\u6cd5\n     *\/\n    public function getAccessToken(){\n        \/\/\u5b9a\u4e49\u6587\u4ef6\u540d\u79f0\n        $name = &#039;token_&#039; . md5($this-&gt;appid&nbsp;.&nbsp;$this-&amp;gt;secret);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5b9a\u4e49\u5b58\u50a8\u6587\u4ef6\u8def\u5f84\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;$filename&nbsp;=&nbsp;__DIR__&nbsp;.&nbsp;'\/cache\/'&nbsp;.&nbsp;$name&nbsp;.&nbsp;'.php';\n\t\t$filename&nbsp;=&nbsp;'..\/runtime\/temp\/'&nbsp;.&nbsp;$name&nbsp;.&nbsp;'.php';\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5224\u65ad\u6587\u4ef6\u662f\u5426\u5b58\u5728,\u5982\u679c\u5b58\u5728,\u5c31\u53d6\u51fa\u6587\u4ef6\u4e2d\u7684\u6570\u636e\u503c,\u5982\u679c\u4e0d\u5b58\u5728,\u5c31\u5411\u5fae\u4fe1\u7aef\u8bf7\u6c42\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(is_file($filename)&nbsp;&amp;amp;&amp;amp;&nbsp;filemtime($filename)&nbsp;+&nbsp;7100&nbsp;&amp;gt;&nbsp;time()){\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result&nbsp;=&nbsp;include&nbsp;$filename;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5b9a\u4e49\u9700\u8981\u8fd4\u56de\u7684\u5185\u5bb9$data\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data&nbsp;=&nbsp;$result['access_token'];\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;https\u8bf7\u6c42\u65b9\u5f0f:&nbsp;GET\n\t\t\t\/\/&nbsp;https:\/\/api.weixin.qq.com\/cgi-bin\/token?grant_type=client_credential&amp;amp;appid=APPID&amp;amp;secret=APPSECRET\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u8c03\u7528curl\u65b9\u6cd5\u5b8c\u6210\u8bf7\u6c42\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$url&nbsp;=&nbsp;'https:\/\/api.weixin.qq.com\/cgi-bin\/token?grant_type=client_credential&amp;amp;appid='.$this-&amp;gt;appid.'&amp;amp;secret='&nbsp;.&nbsp;$this-&amp;gt;secret;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result&nbsp;=&nbsp;$this-&amp;gt;curl($url);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5c06\u8fd4\u56de\u5f97\u5230\u7684json\u6570\u636e\u8f6c\u6210php\u6570\u7ec4\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result&nbsp;=&nbsp;json_decode($result,true);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5c06\u5185\u5bb9\u5199\u5165\u6587\u4ef6\u4e2d\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file_put_contents($filename,\"&lt;?php \nreturn \" . var_export($result,true) . \";\n?&gt;\");\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5b9a\u4e49\u9700\u8981\u8fd4\u56de\u7684\u5185\u5bb9\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data&nbsp;=&nbsp;$result['access_token'];\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5c06\u5f97\u5230\u7684access_token\u7684\u503c\u8fd4\u56de\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$data;\n\n&nbsp;&nbsp;&nbsp;&nbsp;}\n\n&nbsp;&nbsp;&nbsp;&nbsp;\/**\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u83b7\u53d6\u4e34\u65f6\u7968\u636e\u65b9\u6cd5\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;mixed\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;getJsapiTicket(){\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5b58\u5165\u6587\u4ef6\u4e2d,\u5b9a\u4e49\u6587\u4ef6\u7684\u540d\u79f0\u548c\u8def\u5f84\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$name&nbsp;=&nbsp;'ticket_'&nbsp;.&nbsp;md5($this-&amp;gt;appid&nbsp;.&nbsp;$this-&amp;gt;secret);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5b9a\u4e49\u5b58\u50a8\u6587\u4ef6\u8def\u5f84\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/$filename&nbsp;=&nbsp;__DIR__&nbsp;.&nbsp;'\/cache\/'&nbsp;.&nbsp;$name&nbsp;.&nbsp;'.php';\n\t\t$filename&nbsp;=&nbsp;'..\/runtime\/temp\/'&nbsp;.&nbsp;$name&nbsp;.&nbsp;'.php';\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5224\u65ad\u662f\u5426\u5b58\u5728\u4e34\u65f6\u7968\u636e\u7684\u6587\u4ef6,\u5982\u679c\u5b58\u5728,\u5c31\u76f4\u63a5\u53d6\u503c,\u5982\u679c\u4e0d\u5b58\u5728,\u5c31\u53d1\u9001\u8bf7\u6c42\u83b7\u53d6\u5e76\u4fdd\u5b58\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(is_file($filename)&nbsp;&amp;amp;&amp;amp;&nbsp;filemtime($filename)&nbsp;+&nbsp;7100&nbsp;&amp;gt;&nbsp;time()){\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result&nbsp;=&nbsp;include&nbsp;$filename;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5b9a\u4e49\u8bf7\u6c42\u5730\u5740\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$url&nbsp;=&nbsp;'https:\/\/api.weixin.qq.com\/cgi-bin\/ticket\/getticket?access_token='.$this\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&amp;gt;getAccessToken().'&amp;amp;type=jsapi';\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u4f7f\u7528curl\u65b9\u6cd5\u53d1\u9001\u8bf7\u6c42,\u83b7\u53d6\u4e34\u65f6\u7968\u636e\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result&nbsp;=&nbsp;$this-&amp;gt;curl($url);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u8f6c\u6362\u6210php\u6570\u7ec4\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result&nbsp;=&nbsp;json_decode($result,true);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5c06\u83b7\u53d6\u5230\u7684\u503c\u5b58\u5165\u6587\u4ef6\u4e2d\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file_put_contents($filename,\"&lt;?php \nreturn \" . var_export($result,true) . \";\n?&gt;\");\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5b9a\u4e49\u8fd4\u56de\u7684\u6570\u636e\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data&nbsp;=&nbsp;$result['ticket'];\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5c06\u5f97\u5230\u7684\u4e34\u65f6\u7968\u636e\u7ed3\u679c\u8fd4\u56de\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$data;\n&nbsp;&nbsp;&nbsp;&nbsp;}\n\n&nbsp;&nbsp;&nbsp;&nbsp;\/**\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u83b7\u53d6\u7b7e\u540d\u65b9\u6cd5\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/\n&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;sign(){\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u9700\u8981\u5b9a\u4e494\u4e2a\u53c2\u6570,\u5206\u522b\u5305\u62ec\u968f\u673a\u6570,\u4e34\u65f6\u7968\u636e,\u65f6\u95f4\u6233\u548c\u5f53\u524durl\u5730\u5740\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$nonceStr&nbsp;=&nbsp;$this-&amp;gt;makeStr();\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ticket&nbsp;=&nbsp;$this-&amp;gt;getJsapiTicket();\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$time&nbsp;=&nbsp;time();\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u7ec4\u5408url\n\t\t\/\/$url&nbsp;=&nbsp;$_SERVER['REQUEST_SCHEME']&nbsp;.&nbsp;':\/\/'&nbsp;.&nbsp;$_SERVER['SERVER_NAME']&nbsp;.&nbsp;$_SERVER['REQUEST_URI'];\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$url&nbsp;=&nbsp;'http:\/\/'&nbsp;.&nbsp;$_SERVER['SERVER_NAME']&nbsp;.&nbsp;$_SERVER['REQUEST_URI'];\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5c064\u4e2a\u53c2\u6570\u653e\u5165\u4e00\u4e2a\u6570\u7ec4\u4e2d\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$arr&nbsp;=&nbsp;[\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'noncestr='&nbsp;.&nbsp;$nonceStr,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'jsapi_ticket='&nbsp;.&nbsp;$ticket,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'timestamp='&nbsp;.&nbsp;$time,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url='&nbsp;.&nbsp;$url\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;];\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5bf9\u6570\u7ec4\u8fdb\u884c\u5b57\u6bb5\u5316\u6392\u5e8f\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort($arr,SORT_STRING);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5bf9\u6570\u7ec4\u8fdb\u884c\u7ec4\u5408\u6210\u5b57\u7b26\u4e32\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$string&nbsp;=&nbsp;implode('&amp;amp;',$arr);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5c06\u5b57\u7b26\u4e32\u52a0\u5bc6\u751f\u6210\u7b7e\u540d\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sign&nbsp;=&nbsp;sha1($string);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u7531\u4e8e\u8c03\u7528\u7b7e\u540d\u65b9\u6cd5\u7684\u65f6\u5019\u4e0d\u53ea\u9700\u8981\u7b7e\u540d,\u8fd8\u9700\u8981\u751f\u6210\u7b7e\u540d\u7684\u65f6\u5019\u7684\u968f\u673a\u6570,\u65f6\u95f4\u6233,\u6240\u4ee5\u6211\u4eec\u5e94\u8be5\u8fd4\u56de\u7531\u8fd9\u4e9b\u5185\u5bb9\u7ec4\u6210\u7684\u4e00\u4e2a\u6570\u7ec4\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$reArr&nbsp;=&nbsp;[\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'appId'&nbsp;=&amp;gt;&nbsp;$this-&amp;gt;appid,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'timestamp'&nbsp;=&amp;gt;&nbsp;$time,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'nonceStr'&nbsp;=&amp;gt;&nbsp;$nonceStr,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'signature'&nbsp;=&amp;gt;&nbsp;$sign,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url'&nbsp;=&amp;gt;&nbsp;$url\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;];\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5c06\u6570\u7ec4\u8fd4\u56de\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$reArr;\n&nbsp;&nbsp;&nbsp;&nbsp;}\n\n&nbsp;&nbsp;&nbsp;&nbsp;\/**\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;\u751f\u6210\u968f\u673a\u6570\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/\n&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;makeStr(){\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5b9a\u4e49\u5b57\u7b26\u4e32\u7ec4\u6210\u7684\u79cd\u5b50\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$seed&nbsp;=&nbsp;'www512wayanbao1qasxianrendong5tgblaochaguan8ik9500net';\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u901a\u8fc7\u5faa\u73af\u6765\u7ec4\u6210\u4e00\u4e2a16\u4f4d\u7684\u968f\u673a\u5b57\u7b26\u4e32\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5b9a\u4e49\u4e00\u4e2a\u7a7a\u5b57\u7b26\u4e32&nbsp;\u7528\u6765\u63a5\u6536\u7ec4\u5408\u6210\u7684\u5b57\u7b26\u4e32\u5185\u5bb9\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$str&nbsp;=&nbsp;'';\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;($i&nbsp;=&nbsp;0;$i&nbsp;getAccessToken();\n\/\/echo&nbsp;$data;\n\n\/\/\u6d4b\u8bd5\u83b7\u53d6jsapiticket\u65b9\u6cd5\n\/\/$obj&nbsp;=&nbsp;new&nbsp;Wx();\n\/\/$data&nbsp;=&nbsp;$obj-&amp;gt;getJsapiTicket();\n\/\/echo&nbsp;$data;\n\n\/\/\u6d4b\u8bd5\u751f\u6210\u7b7e\u540d\u65b9\u6cd5\n\/\/$obj&nbsp;=&nbsp;new&nbsp;Wx();\n\/\/$data&nbsp;=&nbsp;$obj-&amp;gt;sign();\n\/\/echo&nbsp;'&lt;pre class=\"brush:php;toolbar:false\"&gt;';\n\/\/print_r($data);\n\n?&gt;<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<h3>\u540e\u53f0\u63a7\u5236\u5668\u5904\u7406<\/h3>\n<pre>&lt;?php namespace appindexcontroller;\nuse thinkController;\nuse thinkDb;\nuse appdminmodelMenu;\nuse utilJssdk;\n\nclass Index extends Controller {\n    public function demo(){\n        $id = input(&#039;id&#039;,0);\/\/ID\n        $catid = input(&#039;catid&#039;,0);\/\/\u5206\u7c7bID\n\n        $modelInfo = getModInfoById($catid);\n\n        $info = Db::name($modelInfo[&#039;tablename&#039;])-&gt;where('id',$id)-&amp;gt;find();\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$catinfo&nbsp;=&nbsp;getCatInfoById($catid);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$p_catname&nbsp;=&nbsp;getCatInfoById($catinfo['parentid'],'catname');\n\n\t\t$obj&nbsp;=&nbsp;new&nbsp;Jssdk();\n\t\t$data&nbsp;=&nbsp;$obj-&amp;gt;sign();\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&amp;gt;assign('infos',$info);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&amp;gt;assign('catids',$catid);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&amp;gt;assign('catnames',$catinfo['catname']);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&amp;gt;assign('p_catnames',$p_catname);\n\t\t$this-&amp;gt;assign('data',$data);\n\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;view('..\/application\/index\/view\/default\/index\/'&nbsp;.&nbsp;$modelInfo['show_template']);\n&nbsp;&nbsp;&nbsp;&nbsp;}\n}\n?&amp;gt;<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<h3>\u5fae\u4fe1\u4e8b\u4ef6\u54cd\u5e94<\/h3>\n<pre>&lt;script&gt;&lt;\/script&gt;&lt;script&gt;\n\t\/\/ \u901a\u8fc7config\u63a5\u53e3\u6ce8\u5165\u6743\u9650\u9a8c\u8bc1\u914d\u7f6e\n\twx.config({\n\t\tdebug: false, \n\t\tappId: &#039;{$data.appId}&#039;,\n\t\ttimestamp: &#039;{$data.timestamp}&#039;,\n\t\tnonceStr: &#039;{$data.nonceStr}&#039;, \n\t\tsignature: &#039;{$data.signature}&#039;,\n\t\tjsApiList: [\n\t\t\t&#039;onMenuShareTimeline&#039;,\n\t\t\t&#039;onMenuShareAppMessage&#039;\n\t\t]\n\t});\n\t\/\/ \u901a\u8fc7ready\u63a5\u53e3\u5904\u7406\u6210\u529f\u9a8c\u8bc1\n\twx.ready(function(){\n\t\t\/\/ \u5206\u4eab\u5230\u670b\u53cb\u5708\n\t\twx.onMenuShareTimeline({\n\t\t\ttitle: &#039;{$info.title}&#039;,\n\t\t\tlink: &#039;{$data.url}&#039;, \n\t\t\timgUrl: &#039;http:\/\/m.psnav.com\/uploads\/image\/{$info.thumb}&#039;, \n\t\t\tsuccess: function () {\n\t\t\t\t\/\/ \u7528\u6237\u70b9\u51fb\u4e86\u5206\u4eab\u540e\u6267\u884c\u7684\u56de\u8c03\u51fd\u6570\n\t\t\t}\n\t\t});\n\t\t\/\/ \u5206\u4eab\u7ed9\u670b\u53cb\n\t\twx.onMenuShareAppMessage({\n\t\t\ttitle: &#039;{$info.title}&#039;, \n\t\t\tdesc: &#039;{$info.description}&#039;, \n\t\t\tlink: &#039;{$data.url}&#039;, \n\t\t\timgUrl: &#039;http:\/\/m.psnav.com\/uploads\/image\/{$info.thumb}&#039;, \n\t\t\ttype: &#039;link&#039;, \/\/ \u5206\u4eab\u7c7b\u578b,music\u3001video\u6216link\uff0c\u4e0d\u586b\u9ed8\u8ba4\u4e3alink\n\t\t\tdataUrl: &#039;&#039;, \/\/ \u5982\u679ctype\u662fmusic\u6216video\uff0c\u5219\u8981\u63d0\u4f9b\u6570\u636e\u94fe\u63a5\uff0c\u9ed8\u8ba4\u4e3a\u7a7a\n\t\t\tsuccess: function () {\n\t\t\t\t\/\/ \u7528\u6237\u70b9\u51fb\u4e86\u5206\u4eab\u540e\u6267\u884c\u7684\u56de\u8c03\u51fd\u6570\n\t\t\t}\n\t\t});\n\t});\n&lt;\/script&gt;<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<h3>&nbsp;\u5168\u90e8\u5206\u4eab\u63a5\u53e3<\/h3>\n<pre>&lt;script&gt;&lt;\/script&gt;&lt;script&gt;\n\t\/\/ \u901a\u8fc7config\u63a5\u53e3\u6ce8\u5165\u6743\u9650\u9a8c\u8bc1\u914d\u7f6e\n\twx.config({\n\t\tdebug: true, \n\t\tappId: &#039;{$data.appId}&#039;,\n\t\ttimestamp: &#039;{$data.timestamp}&#039;,\n\t\tnonceStr: &#039;{$data.nonceStr}&#039;, \n\t\tsignature: &#039;{$data.signature}&#039;,\n\t\tjsApiList: [\n\t\t\t&#039;onMenuShareTimeline&#039;,\n\t\t\t&#039;onMenuShareAppMessage&#039;,\n\t\t\t&#039;onMenuShareQQ&#039;,\n\t\t\t&#039;onMenuShareWeibo&#039;,\n\t\t\t&#039;onMenuShareQZone&#039;\n\t\t]\n\t});\n\t\/\/ \u901a\u8fc7ready\u63a5\u53e3\u5904\u7406\u6210\u529f\u9a8c\u8bc1\n\twx.ready(function(){\n\t\t\/\/ \u5206\u4eab\u5230\u670b\u53cb\u5708\n\t\twx.onMenuShareTimeline({\n\t\t\ttitle: &#039;{$info.title}&#039;,\n\t\t\tlink: &#039;{$data.url}&#039;, \n\t\t\timgUrl: &#039;http:\/\/m.psnav.com\/uploads\/image\/{$info.thumb}&#039;, \n\t\t\tsuccess: function () {\n\t\t\t\t\/\/ \u7528\u6237\u70b9\u51fb\u4e86\u5206\u4eab\u540e\u6267\u884c\u7684\u56de\u8c03\u51fd\u6570\n\t\t\t}\n\t\t});\n\t\t\/\/ \u5206\u4eab\u7ed9\u670b\u53cb\n\t\twx.onMenuShareAppMessage({\n\t\t\ttitle: &#039;{$info.title}&#039;, \n\t\t\tdesc: &#039;{$info.description}&#039;, \n\t\t\tlink: &#039;{$data.url}&#039;, \n\t\t\timgUrl: &#039;http:\/\/m.psnav.com\/uploads\/image\/{$info.thumb}&#039;, \n\t\t\ttype: &#039;link&#039;, \/\/ \u5206\u4eab\u7c7b\u578b,music\u3001video\u6216link\uff0c\u4e0d\u586b\u9ed8\u8ba4\u4e3alink\n\t\t\tdataUrl: &#039;&#039;, \/\/ \u5982\u679ctype\u662fmusic\u6216video\uff0c\u5219\u8981\u63d0\u4f9b\u6570\u636e\u94fe\u63a5\uff0c\u9ed8\u8ba4\u4e3a\u7a7a\n\t\t\tsuccess: function () {\n\t\t\t\t\/\/ \u7528\u6237\u70b9\u51fb\u4e86\u5206\u4eab\u540e\u6267\u884c\u7684\u56de\u8c03\u51fd\u6570\n\t\t\t}\n\t\t});\n\t\t\/\/ \u5206\u4eab\u5230QQ\n\t\twx.onMenuShareQQ({\n\t\t\ttitle: &#039;{$info.title}&#039;, \n\t\t\tdesc: &#039;{$info.description}&#039;, \n\t\t\tlink: &#039;{$data.url}&#039;, \n\t\t\timgUrl: &#039;http:\/\/m.psnav.com\/uploads\/image\/{$info.thumb}&#039;, \n\t\t\tsuccess: function () {\n\t\t\t\t\/\/ \u7528\u6237\u786e\u8ba4\u5206\u4eab\u540e\u6267\u884c\u7684\u56de\u8c03\u51fd\u6570\n\t\t\t},\n\t\t\tcancel: function () {\n\t\t\t\t\/\/ \u7528\u6237\u53d6\u6d88\u5206\u4eab\u540e\u6267\u884c\u7684\u56de\u8c03\u51fd\u6570\n\t\t\t}\n\t\t});\n\t\t\/\/ \u5206\u4eab\u5230\u817e\u8baf\u5fae\u535a\n\t\twx.onMenuShareWeibo({\n\t\t\ttitle: &#039;{$info.title}&#039;,\n\t\t\tdesc: &#039;{$info.description}&#039;, \n\t\t\tlink: &#039;{$data.url}&#039;, \n\t\t\timgUrl: &#039;http:\/\/m.psnav.com\/uploads\/image\/{$info.thumb}&#039;, \n\t\t\tsuccess: function () {\n\t\t\t\t\/\/ \u7528\u6237\u786e\u8ba4\u5206\u4eab\u540e\u6267\u884c\u7684\u56de\u8c03\u51fd\u6570\n\t\t\t},\n\t\t\tcancel: function () {\n\t\t\t\t\/\/ \u7528\u6237\u53d6\u6d88\u5206\u4eab\u540e\u6267\u884c\u7684\u56de\u8c03\u51fd\u6570\n\t\t\t}\n\t\t});\n\t\t\/\/ \u5206\u4eab\u5230QQ\u7a7a\u95f4\n\t\twx.onMenuShareQZone({\n\t\t\ttitle: &#039;{$info.title}&#039;, \n\t\t\tdesc: &#039;{$info.description}&#039;, \n\t\t\tlink: &#039;{$data.url}&#039;, \n\t\t\timgUrl: &#039;http:\/\/m.psnav.com\/uploads\/image\/{$info.thumb}&#039;, \n\t\t\tsuccess: function () {\n\t\t\t\t\/\/ \u7528\u6237\u786e\u8ba4\u5206\u4eab\u540e\u6267\u884c\u7684\u56de\u8c03\u51fd\u6570\n\t\t\t},\n\t\t\tcancel: function () {\n\t\t\t\t\/\/ \u7528\u6237\u53d6\u6d88\u5206\u4eab\u540e\u6267\u884c\u7684\u56de\u8c03\u51fd\u6570\n\t\t\t}\n\t\t});\n\t});\n&lt;\/script&gt;<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p>\u4ee5\u4e0a\u5c31\u662fThinkPHP5\u600e\u4e48\u96c6\u6210JS-SDK\u5b9e\u73b0\u5fae\u4fe1\u81ea\u5b9a\u4e49\u5206\u4eab\u529f\u80fd\u7684\u8be6\u7ec6\u5185\u5bb9\uff0c\u66f4\u591a\u8bf7\u5173\u6ce8\u7c73\u4e91\u5176\u5b83\u76f8\u5173\u6587\u7ae0\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>jssdk\u7c7b\u5e93 1\u3001\u6587\u4ef6\u540d\u53ca\u4f4d\u7f6e \u540d\u5b57\uff1aJssdk.php\u4f4d\u7f6e\uff1aextendutilJssdk.php 2\u3001\u4ee3\u7801 &lt;?php namespace util; class Jssdk { protected $appid = &#039;xxxx&#039;; protected $secret = &#039;xxxx&#039;; \/** * \u83b7\u53d6access_token\u65b9\u6cd5 *\/ public function getAccessToken(){ \/\/\u5b9a\u4e49\u6587\u4ef6\u540d\u79f0 $name = &#039;token_&#039; . md5($this-&gt;appid&nbsp;.&nbsp;$this-&amp;gt;secret); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5b9a\u4e49\u5b58\u50a8\u6587\u4ef6\u8def\u5f84 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;$filename&nbsp;=&nbsp;__DIR__&nbsp;.&nbsp;&#8216;\/cache\/&#8217;&nbsp;.&nbsp;$name&nbsp;.&nbsp;&#8216;.php&#8217;; $filename&nbsp;=&nbsp;&#8216;..\/runtime\/temp\/&#8217;&nbsp;.&nbsp;$name&nbsp;.&nbsp;&#8216;.php&#8217;; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5224\u65ad\u6587\u4ef6\u662f\u5426\u5b58\u5728,\u5982\u679c\u5b58\u5728,\u5c31\u53d6\u51fa\u6587\u4ef6\u4e2d\u7684\u6570\u636e\u503c,\u5982\u679c\u4e0d\u5b58\u5728,\u5c31\u5411\u5fae\u4fe1\u7aef\u8bf7\u6c42 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(is_file($filename)&nbsp;&amp;amp;&amp;amp;&nbsp;filemtime($filename)&nbsp;+&nbsp;7100&nbsp;&amp;gt;&nbsp;time()){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result&nbsp;=&nbsp;include&nbsp;$filename; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5b9a\u4e49\u9700\u8981\u8fd4\u56de\u7684\u5185\u5bb9$data &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data&nbsp;=&nbsp;$result[&#8216;access_token&#8217;]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;https\u8bf7\u6c42\u65b9\u5f0f:&nbsp;GET \/\/&nbsp;https:\/\/api.weixin.qq.com\/cgi-bin\/token?grant_type=client_credential&amp;amp;appid=APPID&amp;amp;secret=APPSECRET &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/&nbsp;\u8c03\u7528curl\u65b9\u6cd5\u5b8c\u6210\u8bf7\u6c42 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$url&nbsp;=&nbsp;&#8216;https:\/\/api.weixin.qq.com\/cgi-bin\/token?grant_type=client_credential&amp;amp;appid=&#8217;.$this-&amp;gt;appid.&#8217;&amp;amp;secret=&#8217;&nbsp;.&nbsp;$this-&amp;gt;secret; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result&nbsp;=&nbsp;$this-&amp;gt;curl($url); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5c06\u8fd4\u56de\u5f97\u5230\u7684json\u6570\u636e\u8f6c\u6210php\u6570\u7ec4 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result&nbsp;=&nbsp;json_decode($result,true); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u5c06\u5185\u5bb9\u5199\u5165\u6587\u4ef6\u4e2d &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file_put_contents($filename,&#8221;&lt;?php return &#8221; . var_export($result,true) . &#8220;; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16],"tags":[],"class_list":["post-22905","post","type-post","status-publish","format-standard","hentry","category-16"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/22905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/comments?post=22905"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/22905\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=22905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=22905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=22905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}