基於php的微信token驗證(php api token)

本文目錄一覽:

php token 是什麼東西,有什麼作用,具體要怎麼實現? 希望配合代碼解釋

token可以用來作登陸驗證的。比如做微信公眾號開發,一般他們會在用戶使用微信登陸的時候,生成一個唯一的token,來標記這個用戶登陸的狀態。這個token是生成的唯一標識,所以裏面不攜帶用戶的信息。這樣就降低用戶用戶名密碼的被竊取的風險性。實現你可以根據用戶的id以及固定的字符串加上時間戳來生成,像存用戶名密碼一樣存起來,你也可以給這個token設置一個過期時間,到期重新生成一個token。

微信平台 php 示例 token驗證失敗

你的服務器沒有正確響應Token驗證,請閱讀消息接口使用指南這樣回頭檢查一下各項配置是否正確。如果確定配置沒有問題,請按下面的方法檢查2.請求URL超時你的服務器在國外,或者服務器網速不給力,一般多試幾次就可以了。如果經常這樣,就需要考慮更換服務器3.提交成功恭喜你,配置成功了。這是一種方法 詳細圖文教程和其他幾種方法你可以訪問這個鏈接希望可以幫到你

微信 在php中 如何獲取access_token

access_token是公眾號的全局唯一票據,公眾號調用各接口時都需使用access_token。開發者需要進行妥善保存。

access_token的存儲至少要保留512個字符空間。access_token的有效期目前為2個小時,需定時刷新,重複獲取將導致上次獲取的

access_token失效。

access_token的獲取:

?php

 

define(“APPID”, “您的appid”);

define(“APPSECRET”, “您的appsecret “);

 

$token_access_url = “;appid=” . APPID . “secret=” . APPSECRET;

$res = file_get_contents($token_access_url); //獲取文件內容或獲取網絡請求的內容

//echo $res;

$result = json_decode($res, true); //接受一個 JSON 格式的字符串並且把它轉換為 PHP 變量

$access_token = $result[‘access_token’];

echo $access_token;

 

php

Thinkphp3.2.3接入公眾號響應微信發送的Token驗證總是失敗

用得着判斷那個TOKEN?是不是多此一舉,用我這個,包你滿意

?php

namespace Home\Controller;

use Think\Controller;

class IndexController extends WechatController {

    public function index(){

     $v = $_GET[“echostr”];

     if(!isset($v)){//根據隨機字符串判斷是否之前已經驗證過,避免重複驗證

$this-receive();

}else{

$this-checkSignature();

}

    }

//未驗證執行驗證

public function checkSignature(){

        $signature = I(“signature”);//加密簽名

        $timestamp = I(“timestamp”);//時間戳

        $nonce = I(“nonce”);//隨機數

        $token = TOKEN;//token

$tmpArr = array($token,$timestamp, $nonce);//組成新數組

sort($tmpArr,SORT_STRING);//重新排序

$tmpStr = implode($tmpArr);//轉換成字符串

$tmpStr = sha1($tmpStr);//再將字符串進行加密

if( $tmpStr == $signature )

{

echo $_GET[“echostr”];

exit;

//return true;

}else{

return false;

}

}

//已經驗證過執行這裡

public function receive(){

$postStr = $GLOBALS[“HTTP_RAW_POST_DATA”];//獲取用戶發送的消息,格式為xml

//$postStr = file_get_contents(“php://input”);

libxml_disable_entity_loader(true);

$postObj = simplexml_load_string($postStr, “SimpleXMLElement”, LIBXML_NOCDATA);

$this-logger($postStr);

//並且回複信息給用戶

if(!empty($postObj)){

switch($postObj-MsgType){

case “text”:

$result = $this-receiveText($postObj);

//避免錯誤信息報出

if(empty($result)){

$xml = “xml

ToUserName![CDATA[%s]]/ToUserName

FromUserName![CDATA[%s]]/FromUserName

CreateTime%s/CreateTime

MsgType![CDATA[%s]]/MsgType

Content![CDATA[%s]]/Content

/xml”;

$result = sprintf($xml,$postObj-FromUserName,$postObj-ToUserName,time(),$postObj-MsgType,”多圖文信息沒有獲取到”);

}

echo $result;

break;

case “image”:

$result = $this-receiveImage($postObj);

if(empty($result)){

$xml =”xml

ToUserName![CDATA[%s]]/ToUserName

FromUserName![CDATA[%s]]/FromUserName

CreateTime%s/CreateTime

MsgType![CDATA[%s]]/MsgType

ArticleCount1/ArticleCount

Articles

item

Title![CDATA[%s]]/Title 

Description![CDATA[%s]]/Description

PicUrl![CDATA[%s]]/PicUrl

Url![CDATA[%s]]/Url

/item

/Articles

/xml”;

$result = sprintf($xml,$postObj-FromUserName,$postObj-ToUserName,time(),”news”,”跟老李一起來做微信開發”,”微信開發即微信公眾平台開發,將企業信息、服務、活動等內容通過微信網頁的方式進行表現,用戶通過簡單的設置,就能生成微信3G網站。通過微信公眾平台將企業品牌展示給微信用戶,減少宣傳成本,建立企業與消費者、客戶的一對一互動和溝通,將消費者接入企業CRM系統,進行促銷、推廣、宣傳、售後等。形成了一種主流的線上線下微信互動營銷方式。”,””,””);

}

echo $result;

break;

case “event”:

$result = $this-receiveEvent($postObj);

if(empty($result)){

$xml = “xml

ToUserName![CDATA[%s]]/ToUserName

FromUserName![CDATA[%s]]/FromUserName

CreateTime%s/CreateTime

MsgType![CDATA[%s]]/MsgType

Content![CDATA[%s]]/Content

/xml”;

$result = sprintf($xml,$postObj-FromUserName,$postObj-ToUserName,time(),”text”,”感謝您關注微信接口測試服務號,我是李先生!”);

}

echo $result;

break;

default :

$result = “你發送的數據類型暫時不做處理: ” . $postObj-MsgType;

echo $result;

break;

}

}

}

//log

private function logger($content){

$logSize=100000;

$log = “./log.txt”;

if(file_exists($log)  filesize($log)  $logSize){

unlink($log);

}

file_put_contents($log, date(“Y-m-d H:i:s”).” “.$content.”\n”,FILE_APPEND);

}

//關注自動回複信息

private function receiveEvent($postObj){

$xml = “xml

ToUserName![CDATA[%s]]/ToUserName

FromUserName![CDATA[%s]]/FromUserName

CreateTime%s/CreateTime

MsgType![CDATA[%s]]/MsgType

Content![CDATA[%s]]/Content

/xml”;

if($postObj-Event==”subscribe”){

$result = sprintf($xml,$postObj-FromUserName,$postObj-ToUserName,time(),”text”,”感謝您關注微信接口測試服務號,我是李先生!”);

}else if($postObj-Event==”CLICK”){

if($postObj-EventKey==”getSalary”){

$result = sprintf($xml,$postObj-FromUserName,$postObj-ToUserName,time(),”text”,”您點擊了【查詢-工資】按鈕”);

}else if($postObj-EventKey==”getAttendance”){

$result = sprintf($xml,$postObj-FromUserName,$postObj-ToUserName,time(),”text”,”您點擊了【查詢-考勤記錄】按鈕”);

}else if($postObj-EventKey==”getBonus”){

$result = sprintf($xml,$postObj-FromUserName,$postObj-ToUserName,time(),”text”,”您點擊了【查詢-獎金明細】按鈕”);

}else if($postObj-EventKey==”getAbout”){

$result = sprintf($xml,$postObj-FromUserName,$postObj-ToUserName,time(),”text”,”您點擊了【關於我們-聯繫】按鈕”);

}else if($postObj-EventKey==”getJoin”){

$result = sprintf($xml,$postObj-FromUserName,$postObj-ToUserName,time(),”text”,”您點擊了【關於我們-加入我們】按鈕”);

}else if($postObj-EventKey==”getCustomer”){

$result = sprintf($xml,$postObj-FromUserName,$postObj-ToUserName,time(),”text”,”您點擊了【關於我們-客服】按鈕”);

}else if($postObj-EventKey==”getInternational”){

$result = sprintf($xml,$postObj-FromUserName,$postObj-ToUserName,time(),”text”,”您點擊了【新聞-國際】按鈕”);

}else if($postObj-EventKey==”getIndustry”){

$result = sprintf($xml,$postObj-FromUserName,$postObj-ToUserName,time(),”text”,”您點擊了【新聞-行業】按鈕”);

}

}else if($postObj-Event==”scancode_waitmsg”){

//掃碼帶提示的事件

$result = sprintf($xml,$postObj-FromUserName,$postObj-ToUserName,time(),”text”,”您使用了掃碼帶提示事件,事件KEY:{$postObj-EventKey}”);

}else if($postObj-Event==”scancode_push”){

//掃碼推事件

$result = sprintf($xml,$postObj-FromUserName,$postObj-ToUserName,time(),”text”,”您使用了掃碼推事件,事件KEY:{$postObj-EventKey}”);

}else{

$result = sprintf($xml,$postObj-FromUserName,$postObj-ToUserName,time(),”text”,”您的操作有點奇葩”);

}

return $result;

}

//處理接收的文本信息並且回復給用戶

private function receiveText($postObj){

$content = trim($postObj-Content);

//if(strstr($content,”你好”)){

if(preg_match(“/^\d*$/”,$content)){

//回復多圖文信息

$result = $this-receiveNews($postObj);

return $result;  

}else if($content==”圖片”){

//回復圖片信息

$xml = “xml

ToUserName![CDATA[%s]]/ToUserName

FromUserName![CDATA[%s]]/FromUserName

CreateTime%s/CreateTime

MsgType![CDATA[%s]]/MsgType

Image

MediaId![CDATA[%s]]/MediaId

/Image

/xml”;

$result = sprintf($xml,$postObj-FromUserName,$postObj-ToUserName,time(),”image”,”t8ASWVXMl1vyPfFmDzNEzLq2Z2B6WiM4JI4pBc23quMuc91t9NM1GWFGajCDuMv-“);

return $result;

}else{

//回復文本信息

$xml = “xml

ToUserName![CDATA[%s]]/ToUserName

FromUserName![CDATA[%s]]/FromUserName

CreateTime%s/CreateTime

MsgType![CDATA[%s]]/MsgType

Content![CDATA[%s]]/Content

/xml”;

$result = sprintf($xml,$postObj-FromUserName,$postObj-ToUserName,time(),$postObj-MsgType,$content);

return $result;

}

}

//處理接收的文本信息並且回復給用戶為單圖文信息

private function receiveImage($postObj){

$xml =”xml

ToUserName![CDATA[%s]]/ToUserName

FromUserName![CDATA[%s]]/FromUserName

CreateTime%s/CreateTime

MsgType![CDATA[%s]]/MsgType

ArticleCount1/ArticleCount

Articles

item

Title![CDATA[%s]]/Title 

Description![CDATA[%s]]/Description

PicUrl![CDATA[%s]]/PicUrl

Url![CDATA[%s]]/Url

/item

/Articles

/xml”;

$result = sprintf($xml,$postObj-FromUserName,$postObj-ToUserName,time(),”news”,”跟老李一起來做微信開發”,”微信開發即微信公眾平台開發,將企業信息、服務、活動等內容通過微信網頁的方式進行表現,用戶通過簡單的設置,就能生成微信3G網站。通過微信公眾平台將企業品牌展示給微信用戶,減少宣傳成本,建立企業與消費者、客戶的一對一互動和溝通,將消費者接入企業CRM系統,進行促銷、推廣、宣傳、售後等。形成了一種主流的線上線下微信互動營銷方式。”,””,””);

return $result;

}

//處理接收的文本信息並且回復給用戶為多圖文信息

private function receiveNews($postObj){

$con = array(

array(“Title”=”觀前街”,”Description”=”hjhhj”,”PicUrl”=””,”Url”=””),

array(“Title”=”平江路”,”Description”=”mkbkbjj”,”PicUrl”=””,”Url”=””),

array(“Title”=”觀前街”,”Description”=”hjhhj”,”PicUrl”=””,”Url”=””),

array(“Title”=”平江路”,”Description”=”mkbkbjj”,”PicUrl”=””,”Url”=””),

array(“Title”=”觀前街”,”Description”=”hjhhj”,”PicUrl”=””,”Url”=””),

array(“Title”=”平江路”,”Description”=”mkbkbjj”,”PicUrl”=”;fm=214gp=0.jpg”,”Url”=”;fm=214gp=0.jpg”),

array(“Title”=”觀前街”,”Description”=”hjhhj”,”PicUrl”=””,”Url”=””),

array(“Title”=”平江路”,”Description”=”mkbkbjj”,”PicUrl”=””,”Url”=””)

);

$bodys=”item

Title![CDATA[%s]]/Title

Description![CDATA[%s]]/Description

PicUrl![CDATA[%s]]/PicUrl

Url![CDATA[%s]]/Url

/item”;

$tpl2 =””;

foreach($con as $key=$newArray) {

$tpl2 .= sprintf($bodys,$newArray[“Title”],$newArray[“Description”],$newArray[“PicUrl”],$newArray[“Url”]);

}

$fromUsername = $postObj-FromUserName;

$toUsername = $postObj-ToUserName;

$tpl1=”xml

ToUserName![CDATA[%s]]/ToUserName

FromUserName![CDATA[%s]]/FromUserName

CreateTime%s/CreateTime

MsgType![CDATA[%s]]/MsgType

ArticleCount%s/ArticleCount

Articles”;

$tpl3=”/Articles

/xml”;

$tpl1=sprintf($tpl1,$fromUsername,$toUsername,time(),”news”,count($con));

$result = $tpl1.$tpl2.$tpl3;

return $result;

}

}

php 獲取微信獲取openid需要token嗎

如果是公眾號自動回復的功能,是不需要token就能獲取用戶openid,如果是網頁授權獲取,那麼就需要token了。微信默認token有效期2小時,所以你獲取到token後可以自行服務器緩存2小時(稍微小於2小時最好),沒刷新一次就會重新獲取token,每天token的用量有限制。文檔有介紹

微信公眾平台裏面token驗證失敗

需要在你的接口服務端配置好這個token值,並且保證服務端運行正常就可以驗證通過了。

1、在計算機身份認證中是令牌(臨時)的意思,在詞法分析中是標記的意思。詞法分析是計算機科學中將字符序列轉換為標記(token)序列的過程。從輸入字符流中生成標記的過程叫作標記化(tokenization),在這個過程中,詞法分析器還會對標記進行分類。

2、token其實說的更通俗點可以叫暗號,在一些數據傳輸之前,要先進行暗號的核對,不同的暗號被授權不同的數據操作。例如在USB1.1協議中定義了4類數據包:token包、data包、handshake包和special包。

延展回答:

使用Notepad++或類似編輯工具打開設置的響應Token驗證的Url網頁文件,比如「index.php」

點擊菜單欄上的「編碼」—”轉為 UTF – 8 無 BOM 編碼格式”,然後保存。

回到微信公眾平台進行再次提交驗證,即可解決問題。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/206703.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-08 14:16
下一篇 2024-12-08 14:16

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • 掌握magic-api item.import,為你的項目注入靈魂

    你是否曾經想要導入一個模塊,但卻不知道如何實現?又或者,你是否在使用magic-api時遇到了無法導入的問題?那麼,你來到了正確的地方。在本文中,我們將詳細闡述magic-api的…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • JWT驗證Token的實現

    本文將從以下幾個方面對JWT驗證Token進行詳細的闡述,包括:JWT概述、JWT驗證Token的意義、JWT驗證Token的過程、JWT驗證Token的代碼實現、JWT驗證Tok…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • Vertx網關:高效率的API網關中心

    Vertx是一個基於JVM的響應式編程框架,是最適合創建高擴展和高並發應用程序的框架之一。同時Vertx也提供了API網關解決方案,即Vertx網關。本文將詳細介紹Vertx網關,…

    編程 2025-04-28
  • Elasticsearch API使用用法介紹-get /_cat/allocation

    Elasticsearch是一個分佈式的開源搜索和分析引擎,支持全文檢索和數據分析,並且可伸縮到上百個節點,處理PB級結構化或非結構化數據。get /_cat/allocation…

    編程 2025-04-28
  • 解析Azkaban API Flow執行結果

    本文將從多個方面對Azkaban API Flow執行結果進行詳細闡述 一、Flow執行結果的返回值 在調用Azkaban API的時候,我們一般都會通過HTTP請求獲取Flow執…

    編程 2025-04-27
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • 如何通過knife4j設置全局token

    本文將介紹如何在使用knife4j作為接口文檔管理工具時,通過設置全局token來提高接口文檔的安全性。 一、什麼是knife4j Knife4j是一款基於springfox的開源…

    編程 2025-04-27

發表回復

登錄後才能評論