當前位置:首頁 » 編程語言 » appphptoken

appphptoken

發布時間: 2022-04-22 22:29:28

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

下載官方哪個開發包來試試,我用哪個包的Function都可以

② PHP如何通過Post請求發送Json數據

首先要把數據轉換成json格式,再通過curl方法調用介面並傳參數

代碼如下:

$keyword=urlencode($_POST['keyword']);
$parameters=json_encode(array('keyWord'=>$keyword,'areaCode'=>'*'));
$post_data['appToken']="323ds7674354fds32fdsda60173";//隨便寫的
$post_data['parameters']=$parameters;
$url='http://serde.com/compadddvd/index';//隨便寫的
$ch=curl_init();
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);//用post方法傳送參數
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$response=curl_exec($ch);
curl_close($ch);

之後就返回數據即可。

③ 用thinkphp寫一個app登錄的介面 麻煩哪位大神給個事例

1、可以使用 REST模式 來開發 App 介面,首先建立一個公共控制器,再建其他控制器繼承它即可。
2、確定好返回的數據內容格式及信息碼;

<?php

// App介面公共控制器 AppController

namespace Api\Controller;

use Think\Controller\RestController;

class AppController extends RestController {

// 自動載入的東西

function _initialize() { }

// 驗證 客戶端 token

protected function checkAppToken($apptoken){

// 引入 function.php 中定義的檢測 apptoken 的函數

if(checkingAppToken($apptoken)){

return true;

}else{

$data['code'] = '404';

$data['msg'] = 'apptoken無效';

$data['data'] = null;

$this -> response($data, 'json');

exit();

}

}

// 驗證 用戶 token

protected function checkUserToken($usertoken){

}

// 各種驗證 ……

}

?>
復制代碼

其他介面控制器繼承 AppController

<?php

// 內容控制器 ContentsController

namespace Api\Controller;

class ContentsController extends AppController {

// 自動載入驗證

function _initialize() {

parent::_initialize();

// 驗證 客戶端 token

$apptoken = I('post.apptoken');

parent::checkAppToken($apptoken);

// 驗證 用戶 token

$usertoken = I('post.usertoken');

parent::checkUserToken($usertoken);

// 各種需要驗證的驗證 ……

}

// 各種業務方法

public function index(){

// 返回數據

$this -> response($data, 'json');

exit();

}

}

?>

④ php 開發介面 怎麼設計token比較合適

每登錄一次返回給介面一個token,這個token會存儲在單獨的表裡,每次APP關繫到用戶的操作都必須要攜帶token,根據token來解碼出是哪個用戶。這種方法也可以做其他設備登錄踢出。一般都是這么個做法。token的生成類似cookie的密碼加密,我是這么做的,當然有很多種方法,只要你能加密能解密就行。下面是phpcms裡面的一個經典的方法,我一般拿來做cookie加密,製作token來使用。

<?php
/**
*字元串加密、解密函數
*
*@paramstring$txt字元串
*@paramstring$operationENCODE為加密,DECODE為解密,可選參數,默認為ENCODE,
*@paramstring$key密鑰:數字、字母、下劃線
*@paramstring$expiry過期時間
*@returnstring
*/
functionsys_auth($string,$operation='ENCODE',$key='',$expiry=0){
$ckey_length=4;
$key=md5($key!=''?$key:C('COOKIE_AUTH_KEY'));
$keya=md5(substr($key,0,16));
$keyb=md5(substr($key,16,16));
$keyc=$ckey_length?($operation=='DECODE'?substr($string,0,$ckey_length):substr(md5(microtime()),-$ckey_length)):'';

$cryptkey=$keya.md5($keya.$keyc);
$key_length=strlen($cryptkey);

$string=$operation=='DECODE'?base64_decode(strtr(substr($string,$ckey_length),'-_','+/')):sprintf('%010d',$expiry?$expiry+time():0).substr(md5($string.$keyb),0,16).$string;
$string_length=strlen($string);

$result='';
$box=range(0,255);

$rndkey=array();
for($i=0;$i<=255;$i++){
$rndkey[$i]=ord($cryptkey[$i%$key_length]);
}

for($j=$i=0;$i<256;$i++){
$j=($j+$box[$i]+$rndkey[$i])%256;
$tmp=$box[$i];
$box[$i]=$box[$j];
$box[$j]=$tmp;
}

for($a=$j=$i=0;$i<$string_length;$i++){
$a=($a+1)%256;
$j=($j+$box[$a])%256;
$tmp=$box[$a];
$box[$a]=$box[$j];
$box[$j]=$tmp;
$result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256]));
}

if($operation=='DECODE'){
if((substr($result,0,10)==0||substr($result,0,10)-time()>0)&&substr($result,10,16)==substr(md5(substr($result,26).$keyb),0,16)){
returnsubstr($result,26);
}else{
return'';
}
}else{
return$keyc.rtrim(strtr(base64_encode($result),'+/','-_'),'=');
}
}
?>

⑤ php如何把下面數組里的access_token賦值給其他變數

直接用foreach ($appshipping as $key => $value) {
每一次循環都在這裡面寫:
$Key分別是:type,accessToken,refreshToken,macKey,macAlgorithm.
取$value[$Key]即可

}循環即可。

⑥ 未認證訂閱號怎麼用PHP開發自定義菜單已經有伺服器,伺服器配置token也驗證成功,也有appI

現在普通訂閱號也可以製作自定義菜單


主要方式有2種

第一種,首先關閉開發者模式,再在賬號管理裡面有一個「自定義菜單」用他的界面來製作菜單


第二種,打開開發者模式,在自己的php代碼里組裝一個json請求,json的內容是菜單組成,再把這個json post到微信的自定義菜單的公網地址,這個介面需要accesstoken,但是accesstoken只要有appid和appsecret就可以換到,不需要認證


無需認證

⑦ php怎麼獲取釘釘員工授權信息

做過一個E應用,使用lumen框架,和你的思路是一樣的,新用戶點進去就自動授權注冊應用,數據存到我們自己的資料庫中,不依賴釘釘,我們還同步了部門信息,如果粘貼復制和下面的那個同學一樣,看上去你也會覺得懵,方法都是封裝好了的。

建議你這樣試試看:

  1. 獲取AccessToken:

    後端通過corpid,corpsecret請求介面gettoken?corpid=id&corpsecret=secrect獲取AccessToken

  2. 獲取釘釘用戶userid:

    前端需要相應的處理,攜帶authCode請求,加上AccessToken這兩個參數請求介面/user/getuserinfo?access_token=access_token&code=authCode這個

  3. 獲取釘釘用戶詳情:

    使用access_token和上一步的釘釘userid 請求介面 /user/get?access_token=ACCESS_TOKEN&userid=

  4. 插入釘釘用戶的數據到你的 資料庫中

我們這樣做的:

/**

* 釘釘免登陸獲獲取用信息

* @param $authCode

* @param $url

* @return array

*/

static function outhLogin($authCode, $url)

{

if (empty($authCode) || empty($url)) {

return self::returnError('1101', self::$errorArray['1101']);

}

$accessToken = ComponentDingtalk::getPcAccessToken();

if ($accessToken['code']) {

self::logError(__CLASS__ . '->' . __FUNCTION__, '獲取access_token失敗');

return self::returnError('1102', self::$errorArray['1102']);

}

$dingUserId = ComponentDingtalk::getDingUserid($accessToken['data'], $authCode);

if ($dingUserId['code']) {

self::logError(__CLASS__ . '->' . __FUNCTION__, '用戶userid獲取失敗(調用釘釘API)');

return self::returnError('1103', self::$errorArray['1103']);

}

$dinguserInfo = ComponentDingtalk::getDingUserInfo($accessToken['data'], $dingUserId['data']);

if ($dinguserInfo['code']) {

self::logError(__CLASS__ . '->' . __FUNCTION__, '用戶信息獲取失敗(調用釘釘API)');

return self::returnError('1104', self::$errorArray['1004']);

}

$userInfo = $dinguserInfo['data'];

return self::transaction(function () use ($accessToken, $userInfo, $url) {

if (count($userInfo['department']) > 1) {

$departIdArr = [];

$departNameArr = [];

for ($i = 0, $iMax = count($userInfo['department']); $i < $iMax; $i++) {

$departInfo[$i] = ServerDepartment::getByDdDepartid($userInfo['department'][$i]);

$departIdArr[] = $departInfo[$i]['id'];

$departNameArr[] = $departInfo[$i]['name'];

}

$depart['id'] = implode(',', $departIdArr);

$depart['name'] = implode(',', $departNameArr);

} else {

$ddDepartmentId = implode(',', $userInfo['department']);

$depart = ServerDepartment::getByDdDepartid($ddDepartmentId);

}

//插入用戶

$user = ServerEmployee::getByDdUserid($userInfo['userid']);

if ($user && $user['status'] == 2) {

return self::returnError('1105', self::$errorArray['1105']);

}

if (empty($user)) {

$roleId = 0;

$departId = $depart['id'];

$name = $userInfo['name'];

$mobile = $userInfo['mobile'];

$departName = $depart['name'];

$position = $userInfo['position'];

$ddUserid = $userInfo['userid'];

$ddStatus = $userInfo['active'] ? 1 : 2;

$ddInfo = json_encode($userInfo, JSON_UNESCAPED_UNICODE);

$tokenOverAt = (int)(time() + $_ENV['PROJECT_apiAppTokenOverTime']);

$token = self::_createToken($userInfo['userid'], $tokenOverAt);

$status = 1;

$userId = ServerEmployee::insert($roleId, $departId, $name, $mobile, $departName, $position, $ddUserid, $ddStatus, $ddInfo, $token, $tokenOverAt, $status);

if (!$userId) {

self::logError(__CLASS__ . '->' . __FUNCTION__, '用戶初始化創建失敗');

return self::returnError('1106', self::$errorArray['1106']);

}

}

$userId = $userId ?? $user['id'];

// 更新Token

$id = $userId;

$roleId = $user['roleId'];

$departId = $depart['id'];

$name = $userInfo['name'];

$mobile = $userInfo['mobile'];

$departName = $depart['name'];

$position = $userInfo['position'];

$ddUserid = $userInfo['userid'];

$ddStatus = $userInfo['active'] ? 1 : 2;

$ddInfo = json_encode($userInfo, JSON_UNESCAPED_UNICODE);

$tokenOverAt = (int)(time() + $_ENV['PROJECT_apiAppTokenOverTime']);

$token = self::_createToken($userInfo['userid'], $tokenOverAt);

$status = 1;

$updateParams = ServerEmployee::update($id, $roleId, $departId, $name, $mobile, $departName, $position, $ddUserid, $ddStatus, $ddInfo, $token, $tokenOverAt, $status);

if (!$updateParams) {

self::logError(__CLASS__ . '->' . __FUNCTION__, '用戶信息更新失敗' . json_encode($updateParams, JSON_UNESCAPED_UNICODE) . '/' . json_encode([$id, $roleId, $departId, $name, $mobile, $depart, $position, $ddUserid, $ddStatus, $ddInfo, $token, $tokenOverAt, $status]));

return self::returnError('1107', self::$errorArray['1107']);

}

// 前端的配置信息

// 獲取jsTicket

$jsTicket = ComponentDingtalk::getPcJsTicket($accessToken['data']);

if ($jsTicket['code']) {

self::logError(__CLASS__ . '->' . __FUNCTION__, '獲取jsTicket失敗(調用釘釘API)');

return self::returnError('1111', self::$errorArray['1111']);

}

// 組裝簽名數據

$curUrl = $url;;

$nonceStr = uniqid('', true);

$agentId = $_ENV['PROJECT_ddInterfaceAgentID'];

$timeStamp = time();

$corpId = $_ENV['PROJECT_ddInterfaceCorpId'];

$signature = ComponentDingtalk::getSign($jsTicket['data'], $nonceStr, $timeStamp, $curUrl);

$config = array(

'url' => urldecode($curUrl),

'nonceStr' => $nonceStr,

'agentId' => $agentId,

'timeStamp' => $timeStamp,

'corpId' => $corpId,

'signature' => $signature

);

// 獲取當前角色的許可權

$roleInfo = ServerRole::getById($roleId);


// 當前用戶的頂級部門(不含根部門)

$departInfo = ServerDepartment::getById($departId);

if ($departInfo['parentid'] == 1) { // 二級部門(總經辦)

$departRootId = $departId;

$departRootName = $departName;

} else {

$sonDepart = ServerDepartment::getById($departInfo['parentid']);//分組

if ($sonDepart['parentid'] == 1) {

$departRootId = $sonDepart['id'];

$departRootName = $sonDepart['name'];

} else {

$grandsonDepart = ServerDepartment::getById($sonDepart['parentid']);//部門

if ($grandsonDepart['parentid'] == 1) {

$departRootId = $grandsonDepart['id'];

$departRootName = $grandsonDepart['name'];

} else {

$grandchildDepart = ServerDepartment::getById($grandsonDepart['parentid']);//分公司

$departRootId = $grandchildDepart['id'];

$departRootName = $grandchildDepart['name'];

}

}

}

$company = ServerDepartment::get(['parentid' => 0, 'dd_departid' => 1]);


return self::returnSuccess(array(

'id' => $userId,

'name' => $name,

'token' => $token,

'tokenOverAt' => $tokenOverAt,

'config' => $config,

'power' => $roleInfo['power'] ?? '',

'departId' => $departId,

'departName' => $departName,

'departRootId' => $departRootId,

'departRootName' => $departRootName,

'company' => $company['name'],


));

}, function (Exception $e) {

echo $e->getMessage();

self::logError(__CLASS__ . '->' . __FUNCTION__, $e->getMessage());

return self::returnError('1108', self::$errorArray['1108']);

});

}

⑧ php給app開發介面的token機制

破解確實是個問題,不過一般情況下,破解是需要時間的,你可以給token加一個過期時間,比如兩個小時,一般情況下,兩個小時是不足以破解一個密碼的。加密演算法的話,可以根據自己的習慣選擇。

熱點內容
數字化儲存與編譯是什麼 發布:2025-05-18 02:56:55 瀏覽:217
個人網站模板源碼 發布:2025-05-18 02:51:17 瀏覽:489
主伺服器ip地址 發布:2025-05-18 02:46:29 瀏覽:856
電腦配置太低玩不了絕地求生怎麼辦 發布:2025-05-18 02:38:39 瀏覽:797
存儲過程怎麼出錯了 發布:2025-05-18 02:37:16 瀏覽:368
32寸演算法 發布:2025-05-18 02:22:14 瀏覽:743
寶塔資料庫備份 發布:2025-05-18 02:14:18 瀏覽:192
安卓商店下載的光遇是什麼服 發布:2025-05-18 02:13:38 瀏覽:31
網頁挖礦源碼 發布:2025-05-18 02:13:34 瀏覽:307
centosftp伺服器設置參數 發布:2025-05-18 02:12:55 瀏覽:216