ホームページ バックエンド開発 PHPチュートリアル [php開発] WeChatパブリックアカウントのグラフィックメッセージ返信とaccess_tokenを実装する(コード例)

[php開発] WeChatパブリックアカウントのグラフィックメッセージ返信とaccess_tokenを実装する(コード例)

Apr 25, 2019 pm 03:06 PM
php WeChatの公開アカウント メッセージの返信

この記事では主に、PHP での WeChat パブリック アカウントのグラフィック メッセージ返信と access_token の実装について説明します。これには一定の参考値があり、興味のある友人はそれについて学ぶことができます。

 //代码如下
<?php
class IndexAction extends Action {
public function __construct(){

}
public function index(){
//获得参数 signature nonce token timestamp echostr
$nonce     = $_GET[&#39;nonce&#39;];
$token     = &#39;imooc&#39;;
$timestamp = $_GET[&#39;timestamp&#39;];
$echostr   = $_GET[&#39;echostr&#39;];
$signature = $_GET[&#39;signature&#39;];
//形成数组,然后按字典序排序
$array = array();
$array = array($nonce, $timestamp, $token);
sort($array);
//拼接成字符串,sha1加密 ,然后与signature进行校验
$str = sha1( implode( $array ) );
if( $str  == $signature && $echostr ){
//第一次接入weixin api接口的时候
echo  $echostr;
exit;
}else{
$this->reponseMsg();
}
}
// 接收事件推送并回复
public function reponseMsg(){
//1.获取到微信推送过来post数据(xml格式)
$postArr = $GLOBALS[&#39;HTTP_RAW_POST_DATA&#39;];
//2.处理消息类型,并设置回复类型和内容
/*<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
</xml>*/
$postObj = simplexml_load_string( $postArr );
//$postObj->ToUserName = &#39;&#39;;
//$postObj->FromUserName = &#39;&#39;;
//$postObj->CreateTime = &#39;&#39;;
//$postObj->MsgType = &#39;&#39;;
//$postObj->Event = &#39;&#39;;
// gh_e79a177814ed
//判断该数据包是否是订阅的事件推送
if( strtolower( $postObj->MsgType) == &#39;event&#39;){
//如果是关注 subscribe 事件
if( strtolower($postObj->Event == &#39;subscribe&#39;) ){
//回复用户消息(纯文本格式)	
$toUser   = $postObj->FromUserName;
$fromUser = $postObj->ToUserName;
$time     = time();
$msgType  =  &#39;text&#39;;
$content  = &#39;欢迎关注我们的微信公众账号&#39;.$postObj->FromUserName.&#39;-&#39;.$postObj->ToUserName;
$template = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$info     = sprintf($template, $toUser, $fromUser, $time, $msgType, $content);
echo $info;
/*<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>*/
}
}
//当微信用户发送imooc,公众账号回复‘imooc is very good&#39;
/*<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>*/
/*if(strtolower($postObj->MsgType) == &#39;text&#39;){
switch( trim($postObj->Content) ){
case 1:
$content = &#39;您输入的数字是1&#39;;
break;
case 2:
$content = &#39;您输入的数字是2&#39;;
break;
case 3:
$content = &#39;您输入的数字是3&#39;;
break;
case 4:
$content = "<a href=&#39;http://www.imooc.com&#39;>慕课</a>";
break;
case &#39;英文&#39;:
$content = &#39;imooc is ok&#39;;
break;
}	
$template = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
//注意模板中的中括号 不能少 也不能多
$fromUser = $postObj->ToUserName;
$toUser   = $postObj->FromUserName; 
$time     = time();
// $content  = &#39;18723180099&#39;;
$msgType  = &#39;text&#39;;
echo sprintf($template, $toUser, $fromUser, $time, $msgType, $content);

}
}
*/
//用户发送tuwen1关键字的时候,回复一个单图文
if( strtolower($postObj->MsgType) == &#39;text&#39; && trim($postObj->Content)==&#39;tuwen2&#39; ){
$toUser = $postObj->FromUserName;
$fromUser = $postObj->ToUserName;
$arr = array(
array(
&#39;title&#39;=>&#39;imooc&#39;,
&#39;description&#39;=>"imooc is very cool",
&#39;picUrl&#39;=>&#39;http://www.imooc.com/static/img/common/logo.png&#39;,
&#39;url&#39;=>&#39;http://www.imooc.com&#39;,
),
array(
&#39;title&#39;=>&#39;hao123&#39;,
&#39;description&#39;=>"hao123 is very cool",
&#39;picUrl&#39;=>&#39;https://www.baidu.com/img/bdlogo.png&#39;,
&#39;url&#39;=>&#39;http://www.hao123.com&#39;,
),
array(
&#39;title&#39;=>&#39;qq&#39;,
&#39;description&#39;=>"qq is very cool",
&#39;picUrl&#39;=>&#39;http://www.imooc.com/static/img/common/logo.png&#39;,
&#39;url&#39;=>&#39;http://www.qq.com&#39;,
),
);
$template = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>".count($arr)."</ArticleCount>
<Articles>";
foreach($arr as $k=>$v){
$template .="<item>
<Title><![CDATA[".$v[&#39;title&#39;]."]]></Title> 
<Description><![CDATA[".$v[&#39;description&#39;]."]]></Description>
<PicUrl><![CDATA[".$v[&#39;picUrl&#39;]."]]></PicUrl>
<Url><![CDATA[".$v[&#39;url&#39;]."]]></Url>
</item>";
}

$template .="</Articles>
</xml> ";
echo sprintf($template, $toUser, $fromUser, time(), &#39;news&#39;);
//注意:进行多图文发送时,子图文个数不能超过10个
}else{
switch( trim($postObj->Content) ){
case 1:
$content = &#39;您输入的数字是1&#39;;
break;
case 2:
$content = &#39;您输入的数字是2&#39;;
break;
case 3:
$content = &#39;您输入的数字是3&#39;;
break;
case 4:
$content = "<a href=&#39;http://www.imooc.com&#39;>慕课</a>";
break;
case &#39;英文&#39;:
$content = &#39;imooc is ok&#39;;
break;
}	
$template = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
//注意模板中的中括号 不能少 也不能多
$fromUser = $postObj->ToUserName;
$toUser   = $postObj->FromUserName; 
$time     = time();
// $content  = &#39;18723180099&#39;;
$msgType  = &#39;text&#39;;
echo sprintf($template, $toUser, $fromUser, $time, $msgType, $content);

}//if end
}//reponseMsg end
function http_curl(){
//获取imooc
//1.初始化curl
$ch = curl_init();
$url = &#39;http://www.baidu.com&#39;;
//2.设置curl的参数
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//3.采集
$output = curl_exec($ch);
//4.关闭
curl_close($ch);
var_dump($output);
}
function getWxAccessToken(){
//1.请求url地址
$appid = &#39;wx08d5c2cb632bb5e4&#39;;
$appsecret =  &#39;06d3444fb9abd8d00314eb4a38ad61a8&#39;;
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret;
//2初始化
$ch = curl_init();
//3.设置参数
curl_setopt($ch , CURLOPT_URL, $url);
curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
//4.调用接口 
$res = curl_exec($ch);
//5.关闭curl
curl_close( $ch );
if( curl_errno($ch) ){
var_dump( curl_error($ch) );
}
$arr = json_decode($res, true);
var_dump( $arr );
}
function getWxServerIp(){
$accessToken = "6vOlKOh7r5uWk_ZPCl3DS36NEK93VIH9Q9tacreuxJ5WzcVc235w_9zONy75NoO11gC9P0o4FBVxwvDiEtsdX6ZRFR0Lfs_ymkb8Bf6kRfo";
$url = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=".$accessToken;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$res = curl_exec($ch);
curl_close($ch);
if(curl_errno($ch)){
var_dump(curl_error($ch));
}
$arr = json_decode($res,true);
echo "<pre class="brush:php;toolbar:false">";
var_dump( $arr );
echo "
"; } }//class end
ログイン後にコピー

関連チュートリアル:

PHP ビデオ チュートリアル

WeChat アプレット ビデオ チュートリアル

以上が[php開発] WeChatパブリックアカウントのグラフィックメッセージ返信とaccess_tokenを実装する(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

See all articles