{"id":233043,"date":"2023-02-03T19:12:00","date_gmt":"2023-02-03T16:12:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233043"},"modified":"2023-02-03T19:24:19","modified_gmt":"2023-02-03T16:24:19","slug":"jak-buforowac-token-wechat-przez-php","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/jak-buforowac-token-wechat-przez-php\/","title":{"rendered":"Jak buforowa\u0107 token WeChat przez PHP?"},"content":{"rendered":"<p>Interfejsy API WeChat wymagaj\u0105 wprowadzenia tokena, do kt\u00f3rego dost\u0119p uzyskuje si\u0119 za po\u015brednictwem nast\u0119puj\u0105cego <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/jak-kompresowac-obrazy-za-pomoca-interfejsu-api-imagerecycle-skrypt-php\/\" title=\"interfejsu API\">interfejsu API<\/a> :<\/p>\n<pre><code>https:\/\/api.weixin.qq.com\/cgi-bin\/token?grant_type=client_credential&amp;appid=APPID&amp;secret=APPSECRET<\/code><\/pre>\n<p>Po pomy\u015blnym zako\u0144czeniu zwraca ci\u0105g tokena i wyga\u015bni\u0119cie w sekundach. Istnieje limit szybko\u015bci wywo\u0142ywania tego interfejsu API, wi\u0119c musimy buforowa\u0107 ci\u0105g tokena lokalnie, aby unikn\u0105\u0107 zbyt cz\u0119stego wywo\u0142ywania interfejsu API. Je\u015bli token jeszcze nie wygas\u0142, wywo\u0142anie API po prostu zwr\u00f3ci ten sam token.<\/p>\n<p>Wywo\u0142anie API ma op\u00f3\u017anienie sieci i powinni\u015bmy ponownie u\u017cy\u0107 tokena, kiedy tylko mo\u017cemy. Najlepszym sposobem jest buforowanie go lokalnie za po\u015brednictwem <a href=\"https:\/\/helloacm.com\/forums\/forum\/shell-scripting-database\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">bazy danych<\/a> lub pliku. Poni\u017cszy <a href=\"https:\/\/wordpress.mediadoma.com\/pl\/skrypt-php-do-zabezpieczenia-folderow-wordpress-poprzez-ustawienie-odpowiednich-uprawnien-do-plikow\/\" title=\"skrypt PHP\">skrypt PHP<\/a> sprawdzi, czy przechowywane w pami\u0119ci podr\u0119cznej tokeny i ich wa\u017cno\u015b\u0107.<\/p>\n<pre><code>define('APPID', 'APPID');\ndefine('APPSECRET', 'APPSECRET');\ndefine('TOKENFILE', 'token.txt'); \ndefine('EXPIRY', 'expiry.txt');\n\u00a0\ndate_default_timezone_set('UTC');\n\u00a0\nfunction getToken() {\n\u00a0 $tokenfile = TOKENFILE;\n\u00a0 $expiryfile = EXPIRY;\n\u00a0 if (is_file($tokenfile)) {\n\u00a0 \u00a0 $token = trim(file_get_contents($tokenfile));\n\u00a0 }\n\u00a0 if ($token &amp;&amp; is_file($expiryfile)) {\n\u00a0 \u00a0 $x = (integer)trim(file_get_contents($expiryfile));\n\u00a0 \u00a0 if ($x &gt; 0) {\n\u00a0 \u00a0 \u00a0 if (time() &lt; $x) { \/\/ token still valid\n\u00a0 \u00a0 \u00a0 \u00a0 return $token;\n\u00a0 \u00a0 \u00a0 } \n\u00a0 \u00a0 } \u00a0\n\u00a0 } \n\u00a0 \/\/ invoke wechat API if token is not found or has expired\n\u00a0 $url = \"&lt;a class=\"vglnk\" target=\"_blank\" href=\"https:\/\/api.weixin.qq.com\/cgi-bin\/token?grant_type=client_credential&amp;appid=\".APPID.\"&amp;secret=\" rel=\"nofollow\"&gt;&lt;span&gt;https&lt;\/span&gt;&lt;span&gt;:\/\/&lt;\/span&gt;&lt;span&gt;api&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;weixin&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;qq&lt;\/span&gt;&lt;span&gt;.&lt;\/span&gt;&lt;span&gt;com&lt;\/span&gt;&lt;span&gt;\/&lt;\/span&gt;&lt;span&gt;cgi&lt;\/span&gt;&lt;span&gt;-&lt;\/span&gt;&lt;span&gt;bin&lt;\/span&gt;&lt;span&gt;\/&lt;\/span&gt;&lt;span&gt;token&lt;\/span&gt;&lt;span&gt;?&lt;\/span&gt;&lt;span&gt;grant&lt;\/span&gt;&lt;span&gt;_&lt;\/span&gt;&lt;span&gt;type&lt;\/span&gt;&lt;span&gt;=&lt;\/span&gt;&lt;span&gt;client&lt;\/span&gt;&lt;span&gt;_&lt;\/span&gt;&lt;span&gt;credential&lt;\/span&gt;&lt;span&gt;&amp;&lt;\/span&gt;&lt;span&gt;appid&lt;\/span&gt;&lt;span&gt;=\".&lt;\/span&gt;&lt;span&gt;APPID&lt;\/span&gt;&lt;span&gt;.\"&amp;&lt;\/span&gt;&lt;span&gt;secret&lt;\/span&gt;&lt;span&gt;=&lt;\/span&gt;&lt;\/a&gt;\". APPSECRET;\n\u00a0 $data = trim(file_get_contents($url)); \n\u00a0 if ($data) {\n\u00a0 \u00a0 $data = json_decode($data, true);\n\u00a0 \u00a0 if ($data) {\n\u00a0 \u00a0 \u00a0 $token = $data['access_token'];\n\u00a0 \u00a0 \u00a0 $expiry = time() + (integer)$data['expires_in'];\n\u00a0 \u00a0 \u00a0 \/\/ save for cache until expiry\n\u00a0 \u00a0 \u00a0 file_put_contents($tokenfile, $token, LOCK_EX);\n\u00a0 \u00a0 \u00a0 file_put_contents($expiryfile, $expiry, LOCK_EX);\n\u00a0 \u00a0 \u00a0 return $token;\n\u00a0 \u00a0 }\n\u00a0 }\n\u00a0 \/\/ can't get valid token\n\u00a0 return \"\"; \n}<\/code><\/pre>\n<p><a href=\"https:\/\/github.com\/DoctorLai\/WeChat-Example-Developer\/blob\/master\/getToken.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">getToken.php na Github<\/a><\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/helloacm.com\" class=\"external external_icon\">helloacm.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jak buforowa\u0107 token WeChat przez PHP?<\/p>\n","protected":false},"author":1,"featured_media":224790,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[721,919,897,805,845],"tags":[1169],"class_list":["post-233043","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deweloper","category-inny","category-kod","category-php-7","category-samouczki","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=233043"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/233043\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/224790"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=233043"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=233043"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=233043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}