ホームページ  >  記事  >  バックエンド開発  >  PHP バージョンの WeChat パブリック プラットフォーム アカウントのカスタム メニュー class_PHP チュートリアル

PHP バージョンの WeChat パブリック プラットフォーム アカウントのカスタム メニュー class_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:43:44688ブラウズ

WeChat パブリック プラットフォーム サービス アカウントはカスタム メニューを申請できますが、現時点では他のアカウントはカスタム メニューをサポートしていません。これは API を使用して操作できるだけでなく、メニューやパラメータをバックグラウンドで直接定義することもできます。

カスタムメニューを申し込む

サービス アカウントはカスタム メニューに適用でき、QQ を使用してログインする公開アカウントは電子メール ログインにアップグレードでき、電子メールを使用してログイン グループ メッセージを Tencent Weibo に同期できます。

PHP バージョンの WeChat パブリック プラットフォーム アカウントのカスタム メニュー class_PHP チュートリアル

WeChatパブリックプラットフォームアカウントAPIプログラム

コードは次のとおりです コードをコピー

// トークンを定義します
define("TOKEN", "chenxiang");//独自のTOKENに変更
define('APP_ID', '');//独自のAPPIDに変更します
define('APP_SECRET', '');//独自のAPPSECRETに変更します


$wechatObj = 新しい wechatCallbackapiTest(APP_ID,APP_SECRET);
$wechatObj->Run();


クラスwechatCallbackapiTest
{
プライベート $fromユーザー名;
プライベート $toユーザー名;
プライベート $times;
プライベート $キーワード;
プライベート $app_id;
プライベート $app_secret;


パブリック関数 __construct($appid,$appsecret)
{
# コード...
$this->app_id = $appid;
$this->app_secret = $appsecret;
}

パブリック関数 valid()
{
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
echo $echoStr;
終了します;
}
}

/**
* プログラムを実行します
* @param string $value [説明]
​​*/
パブリック関数 Run()
{
$this->responseMsg();
$arr[]= "こんにちは、これは自動返信です。私は今ここにいません。何かありましたらメッセージを残してください。できるだけ早く返信します^_^";
echo $this->make_xml("text",$arr);
}

パブリック関数responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//返信データを返す
if (!empty($postStr)){
$access_token = $this->get_access_token();// access_token を取得します
$ This-& gt; createmenu ($ acces_token) // メニューを作成します
//$this->delmenu($access_token);//メニューを削除
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$this->fromUsername = $postObj->FromUserName;//送信者 ID
$this->toUsername = $postObj->ToUserName;//受信者 ID $this->keyword = trim($postObj->Content);//ユーザーから送信されたメッセージ
$ This-> 回 = 時間 () // 送信時間
; $MsgType = $postObj->MsgType;//メッセージタイプ
If($MsgType=='イベント'){
$MsgEvent = $postObj->Event;// イベント タイプを取得します
If ($MsgEvent=='subscribe') {//イベントを購読します
​​​​​​​​​ echo $this->make_xml("text",$arr);
終了します;
}elseif ($MsgEvent=='CLICK') {//クリックイベント
$ EventKey = $POSTOBJ-& GT; // メニューのカスタマイズされたキー値は、この値に従ってユーザーがクリックする内容を決定し、さまざまな情報をプッシュします
$arr[] = $EventKey;
echo $this->make_xml("text",$arr);
終了します;
}
}
}else {
echo "これは weixin API 用のファイルです!";
終了します;
}
}

/**

* access_token を取得します

​​*/

プライベート関数 get_access_token()
    {
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->app_id."&secret=".$this->app_secret;
        $data = json_decode(file_get_contents($url),true);
        if($data['access_token']){
            return $data['access_token'];
        }その他{

return "获取access_token错误";
        }
    }

/**
*メニューを作成します
* @param $access_token ACCESS_TOKENを取得しました
​​*/
パブリック関数 createmenu($access_token)
{
$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token;
$arr = array(
「ボタン」 =>array(
配列(
'name'=>urlencode("ライフクエリ"),
「sub_button」=>array(
配列(
‘name’=>urlencode("天気クエリ"),
'タイプ'=>'クリック',
'key'=>'VCX_WEATHER'
)、
配列(
‘name’=>urlencode("IDカードクエリ"),
'タイプ'=>'クリック',
「キー」=>「VCX_IDENT」
)
)
)、
配列(
「作られていることになっている」 「sub_button」=>array(
配列(
'名前' = & gt; urlencode (「音楽のスクレイピング」)、
'タイプ'=>'クリック',
'key'=>'VCX_GUAHAPPY'
)、
配列(
‘name’=>urlencode("ラッキーホイール"),
'タイプ'=>'クリック',
'キー'=>'VCX_LUCKPAN'
)
)
)、
配列(
に 「sub_button」=>array(
配列(
'name'=>urlencode("私について"),
'タイプ'=>'クリック',
「キー」=>「VCX_ABOUTME」
)、
配列(
‘name’=>urlencode("求人情報"),
'タイプ'=>'クリック',
'key'=>'VCX_JOBINFORMATION'
)
)
)
)
);
$jsondata = urldecode(json_encode($arr));
$ch =curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$jsondata);
curl_exec($ch);
curl_close($ch);

}

/**

*クエリメニュー
* @param $access_token ACCESS_TOKENを取得しました
​​*/

プライベート関数 getmenu($access_token)
{
# コード...
$url = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=".$access_token;
$data = file_get_contents($url);
$data を返す;
}

/**
* メニューを削除
* @param $access_token ACCESS_TOKENを取得しました
​​*/
   
    プライベート関数 delmenu($access_token)
    {
        # コード...
        $url = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$access_token;
        $data = json_decode(file_get_contents($url),true);
        if ($data['errcode']==0) {
            # コード...
            true を返します;
        }その他{
            false を返します;
        }

}
       
    /**
*@param型:テキストテキスト型、ニュースグラフィック型
*@param value_arr 配列(コンテンツ),配列(ID)
*@param o_arr array(配列(タイトル、紹介文、画像、ハイパーリンク),...10項目未満),配列(項目数, ID)
​​*/
   
    プライベート関数 make_xml($type,$value_arr,$o_arr=array(0)){
        //=================xml ヘッダー============
        $con="
                    fromUsername}]]>
                    toUsername}]]>
                    {$this->回}
                    ";
                   
          //=================コンテンツの種類============
        スイッチ($type){
         
            ケース「テキスト」:
                $con.="コンテンツ>
                    {$o_arr}";
            休憩;
           
            ケース「ニュース」:
                $con.="{$o_arr[0]}
                     ";
                foreach($value_arr as $id=>$v){
                    if($id>=$o_arr[0]) ブレーク;それ以外の場合は null; // 判断数組数不超过设置数
                    $con.="
                         タイトル>
                         説明>
                        
                        
                         アイテム>";
                }
                $con.="記事>
                     {$o_arr[1]}";
            休憩;
           
        } //終了スイッチ
         
         //=================エンドリターン============
        $con.="
";
        
        $con を返します;
    }

プライベート関数 checkSignature()
    {
        $signature = $_GET["署名"];
        $タイムスタンプ = $_GET["タイムスタンプ"];
        $nonce = $_GET["nonce"];   
               
        $token = トークン;
        $tmpArr = array($token, $timestamp, $nonce);
        並べ替え($tmpArr);
        $tmpStr = implode( $tmpArr );
        $tmpStr = sha1( $tmpStr );
       
        if( $tmpStr == $signature ){
            true を返します;
        }その他{
            false を返します;
        }
    }
}

?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/633154.html技術記事微信公众平台サービス务号は自定菜单了を申請できますが、他の番号は自定菜单了をサポートしていませんが、これは API を使用して操作できます。また、後台定义菜单を直接行うこともできます...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。