日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 获取signature,PHP开发微信无法获取到signature,timestamp,nonce

發布時間:2025/4/5 php 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 获取signature,PHP开发微信无法获取到signature,timestamp,nonce 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

namespace HomeController;

use ThinkController;

define("TOKEN","weixin");

/*

*微信的入口文件

*/

class WechatController extends Controller {

protected $User; //微信用戶對象

protected $app_id;

protected $secret;

/*通用入口 構造方法

*aunthor:caodi

*date:2015-09-25

*/

public function _initialize() {

$this->app_id = C("APPID");

$this->secret = C("APPSECRET");

}

/*微信入口

*author:caodi

*date:2015-09-22

*/

public function wechat() {

DLOG("微信入口記錄的時間","run","caodi");

if ($_GET['echostr'] != NULL ) {

echo $_GET['echostr'];

exit;

}

//微信只會在第一次在URL中帶echostr參數,以后就不會帶這個參數了

if ($this->checkSignature()) { //success!

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

//extract post data

if (!empty($postStr)) {

libxml_disable_entity_loader(true);

$postObj = simplexml_load_string($postStr,"SimpleXMLElement",LIBXML_NOCDATA);

$this->$User = $postObj;

//根據消息類型將信息分發

$this->route($postObj);

//exit;

//以下為測試用的

$toUsername = $postObj->ToUserName;

$fromUsername = $postObj->FromUserName;

$keyword = trim($postObj->Content);

$msyType = trim($postObj->MsgType); //消息類型

$event = trim($postObj->Event); //事件類型

$time = time();

$result = json_encode($postObj);

DLOG("消息的參數".$result,"run","caodi");

$textTpl = "

%s

0

";

if ($event == "subscribe") {

$msgType = "text";

$contentStr = date("Y-m-d H:i:s",time());

$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);

echo $resultStr;

}

}

} else {

echo "error";

}

}

/*wechat身份驗證

*author:caodi

*date:2015-09-22

*/

public function checkSignature() {

//you must define TOKEN by yourself

if (!defined("TOKEN")) {

throw new Exception("TOKEN is not defined!");

}

$nonce = $_GET["nonce"];

$token = TOKEN;

$timestamp = $_GET["timestamp"];

$signature = $_GET["signature"];

echo $signature."
";

echo $timestamp."
";

echo $nonce."
";

$tmpArr = array($token,$timestamp,$nonce);

sort($tmpArr,SORT_STRING);

$tmpStr = implode($tmpArr);

$tmpStr = sha1($tmpStr);

if ($tmpStr == $signature) {

return true;

echo "true";

} else {

return false;

echo "false";

}

}

/*根據微信的消息類型來進行的分發

*author:caodi

*date:2015-09-23

*/

public function route($postObj) {

$msgType = trim($postObj->MsgType);

DLOG("mygtype=".$msgType,"run","caodi");

switch ($msgType) {

//(1)接受的為消息推送

case "text":

$this->reponse_text($postObj);

break;

case "image":

$this->reponse_image($postObj);

break;

case "voice":

$this->reponse_voice($postObj);

break;

//(2)接受的為事件推送

case "event":

$event = $postObj->Event;

DLOG("event=".$event,"run","caodi");

switch ($event) {

case "subscribe":

$this->subscribe($postObj);

break;

case "unsubscribe":

$this->unsubscribe($postObj);

break;

//自定義菜單的事件功能

}

}

}

/*微信用戶關注微信號事件(獲取用戶的基本信息存入到用戶表中去)

*author:caodi

*date:2015-09-23

*/

public function subscribe($postObj) {

$open_id = $postObj->FromUserName;

$create_time = $postObj->CreateTime;

$UserDao = M("user");

//(1)根據用戶的open_id去 https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

$access_token = "RQ4fmRD-a2JflW7_9-mmefNkHnK35aoZHHXn9PoB_vqDfxVWdT8XNbtfv5F1v1yK_b81Xar3So4gRLdlX6QxJfa5fGApcOAeLI_Fx3h9hxGjkNhUgADXidNBKIi5EjanHOZjADAVCN";

$url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$open_id."&lang=zh_CN";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //要求保存的結果到字符串還是輸出在屏幕上,非0表示保存到字符串中

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); //對認證來源的檢查,0表示阻止對證書的合法性檢查

$result = curl_exec($ch);

DLOG("result".$result,"run","caodi");

curl_close($ch);

$user_info = json_decode($result,true);

//(2)將得到的用戶信息保存到數據庫中去

$data = array();

$data['user_nick'] = $user_info['nickname'];

$user_info['sex'] = $user_info['sex'] == 0 ? 1 : $user_info['sex']; //將性別為0的轉化為默認的男性

$data['user_sex'] = $user_info['sex'];

$data['user_avatar'] = $user_info['headimgurl'];

$data['user_type'] = 1;//用戶類型 1-普通用戶 2-助理

$open_id = json_decode($open_id,true);

$data['wx_open_id'] = $user_info['openid'];

$data['user_app_version'] = "wechat9.0";

$data['user_platform'] = "wechat"; //當前使用的設備平臺

$data['user_create_time'] = date("Y-m-d H:i:s",time());

$result = $UserDao->add($data);

DLOG("sql= ".$UserDao->getlastsql(),"run","caodi");

if($result === false) {

DLOG("數據庫插入失敗","run","caodi");

exit;

}

}

/*自定義菜單的生成

*author:caodi

*date:2015-09-24

*/

public function create_menu(){

include_once(APP_PATH."Common/Conf/menu_config.php");

$data = $menu_config;

$access_token = "RQ4fmRD-a2JflW7_9-mmefNkHnK35aoZHHXn9PoB_vqDfxVWdT8XNbtfv5F1v1yK_b81Xar3So4gRLdlX6QxJfa5fGApcOAeLI_Fx3h9hxGjkNhUgADXidNBKIi5EjanHOZjADAVCN";

$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS,$data);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);

curl_close($ch);

var_dump($result);

exit;

}

/*通過OAuth2.0的網頁授權(自定義菜單中,獲取用戶的openID同時進入我的任務頁)

*author:caodi

*date:2015-09-24

*/

public function my_task () {

$code = $_GET['code'];

$oprn_id = $this->code_to_openID($code);

var_dump($code);

echo "caodi"."
";

echo "

{$open_id}

";

}

/*由OAuth2.0獲取到的code轉化成用戶的openID

*author:caodi

*date:2015-09-24

*/

public function code_to_openID($code) {

if (empty($code) == true) {

DLOG("獲取的code為空","run","caodi");

exit;

}

$appid = $this->app_id;

$secret = $this->secret;

$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$secret."&code=".$code."&grant_type=authorization_code";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);

DLOG("由OAuth2.0獲取到的code轉化成用戶的openID的結果=".$result,"run","caodi");

curl_close($ch);

$user_info = json_decode($result,true);

$open_id = $user_info['openid'];

return $open_id;

}

}

?>

總結

以上是生活随笔為你收集整理的php 获取signature,PHP开发微信无法获取到signature,timestamp,nonce的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。