當前位置:首頁 » 編程語言 » 公眾號php代碼

公眾號php代碼

發布時間: 2022-08-24 12:59:45

『壹』 php寫微信公眾平台的代碼,添加鏈接回復給我的內容是text

這段就是回復text給你的

『貳』 關於微信公眾平台訂閱號 自定義菜單 php 代碼的問題

demo中有這個簡單的案例,只需要執行一次就可以創建了,
參考這里:http://mp.weixin.qq.com/wiki/index.php?title=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E5%88%9B%E5%BB%BA%E6%8E%A5%E5%8F%A3

『叄』 微信公眾平台如何通過php代碼給會員發送被動響應消息

明確在哪接收消息

從微信公眾平台介面消息指南中可以了解到,當用戶向公眾帳號發消息時,微信伺服器會將消息通過POST方式提交給我們在介面配置信息中填寫的URL,而我們就需要在URL所指向的請求處理類CoreServlet的doPost方法中接收消息、處理消息和響應消息。

接收、處理、響應消息

下面先來看我已經寫好的CoreServlet的完整代碼:

package org.liufeng.course.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.liufeng.course.service.CoreService;
import org.liufeng.course.util.SignUtil;

/**
* 核心請求處理類
*
* @author liufeng
* @date 2013-05-18
*/
public class CoreServlet extends HttpServlet {
private static final long serialVersionUID = 4440739483644821986L;

/**
* 確認請求來自微信伺服器
*/
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 微信加密簽名
String signature = request.getParameter("signature");
// 時間戳
String timestamp = request.getParameter("timestamp");
// 隨機數
String nonce = request.getParameter("nonce");
// 隨機字元串
String echostr = request.getParameter("echostr");

PrintWriter out = response.getWriter();
// 通過檢驗signature對請求進行校驗,若校驗成功則原樣返回echostr,表示接入成功,否則接入失敗
if (SignUtil.checkSignature(signature, timestamp, nonce)) {
out.print(echostr);
}
out.close();
out = null;
}

/**
* 處理微信伺服器發來的消息
*/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 將請求、響應的編碼均設置為UTF-8(防止中文亂碼)
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

// 調用核心業務類接收消息、處理消息
String respMessage = CoreService.processRequest(request);

// 響應消息
PrintWriter out = response.getWriter();
out.print(respMessage);
out.close();
}

}

代碼說明:

1)第51行代碼:微信伺服器POST消息時用的是UTF-8編碼,在接收時也要用同樣的編碼,否則中文會亂碼;

2)第52行代碼:在響應消息(回復消息給用戶)時,也將編碼方式設置為UTF-8,原理同上;

3)第54行代碼:調用CoreService類的processRequest方法接收、處理消息,並得到處理結果;

4)第57~59行:調用response.getWriter().write()方法將消息的處理結果返回給用戶

從doPost方法的實現可以看到,它是通過調用CoreService類的processRequest方法接收、處理消息的,這樣做的目的是為了解耦,即業務相關的操作都不在Servlet里處理,而是完全交由業務核心類CoreService去做。下面來看CoreService類的代碼實現:

package org.liufeng.course.service;

import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.liufeng.course.message.resp.TextMessage;
import org.liufeng.course.util.MessageUtil;

/**
* 核心服務類
*
* @author liufeng
* @date 2013-05-20
*/
public class CoreService {
/**
* 處理微信發來的請求
*
* @param request
* @return
*/
public static String processRequest(HttpServletRequest request) {
String respMessage = null;
try {
// 默認返回的文本消息內容
String respContent = "請求處理異常,請稍候嘗試!";

// xml請求解析
Map<String, String> requestMap = MessageUtil.parseXml(request);

// 發送方帳號(open_id)
String fromUserName = requestMap.get("FromUserName");
// 公眾帳號
String toUserName = requestMap.get("ToUserName");
// 消息類型
String msgType = requestMap.get("MsgType");

// 回復文本消息
TextMessage textMessage = new TextMessage();
textMessage.setToUserName(fromUserName);
textMessage.setFromUserName(toUserName);
textMessage.setCreateTime(new Date().getTime());
textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
textMessage.setFuncFlag(0);

// 文本消息
if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
respContent = "您發送的是文本消息!";
}
// 圖片消息
else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) {
respContent = "您發送的是圖片消息!";
}
// 地理位置消息
else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) {
respContent = "您發送的是地理位置消息!";
}
// 鏈接消息
else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) {
respContent = "您發送的是鏈接消息!";
}
// 音頻消息
else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) {
respContent = "您發送的是音頻消息!";
}
// 事件推送
else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {
// 事件類型
String eventType = requestMap.get("Event");
// 訂閱
if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {
respContent = "謝謝您的關注!";
}
// 取消訂閱
else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {
// TODO 取消訂閱後用戶再收不到公眾號發送的消息,因此不需要回復消息
}
// 自定義菜單點擊事件
else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) {
// TODO 自定義菜單權沒有開放,暫不處理該類消息
}
}

textMessage.setContent(respContent);
respMessage = MessageUtil.textMessageToXml(textMessage);
} catch (Exception e) {
e.printStackTrace();
}

return respMessage;
}
}

代碼說明:

1)第29行:調用消息工具類MessageUtil解析微信發來的xml格式的消息,解析的結果放在HashMap里;

2)32~36行:從HashMap中取出消息中的欄位;

3)39-44、84行:組裝要返回的文本消息對象;

4)47~82行:演示了如何接收微信發送的各類型的消息,根據MsgType判斷屬於哪種類型的消息;

5)85行:調用消息工具類MessageUtil將要返回的文本消息對象TextMessage轉化成xml格式的字元串;

關於事件推送(關注、取消關注、菜單點擊)

對於消息類型的判斷,像文本消息、圖片消息、地理位置消息、鏈接消息和語音消息都比較好理解,有很多剛接觸的朋友搞不懂事件推送消息有什麼用,或者不清楚該如何判斷用戶關注的消息。那我們就專門來看下事件推送,下圖是官方消息介面文檔中關於事件推送的說明:

『肆』 php寫的微信公眾平台代碼如何進行斷點調試

首先需要說明的是,php程序調試需要手動編寫部分代碼,目的是斷截程序線程的執行,輸出指定環節的結果,就是所謂的斷點調試。所以,實際上需要討論的問題是採用什麼斷點代碼更合適。
die()和exit()
die()和exit()函數都有終止線程的作用,是php斷點調試需要使用的最主要的函數,它們也是php程序員使用非常頻繁的函數。然而兩者又有什麼區別呢?在程序調試時需要注意什麼問題呢?
die()函數一般與「or」一並使用,寫作「or die()」,經常看到這樣的語句:
$file = fopen($filename, 'r') or die("抱歉,無法打開: $filename")
or在這里是這樣理解的,因為在PHP中並不區分數據類型,所以$file既可以是int也可以bool,所以這樣的語句不會報錯。但其處理過程可能有些朋友不大明白。其實在大多數的語言中, bool or bool這樣的語句中,如果前一個值為真後一個值就不會再判斷了。這里也是的,所以如果fopen函數執行正確的話,會返回一個大於0的int值(這其實就是"真"),後面的語句就不會執行了。如果fopen函數執行失敗,就會返回false,那麼就會判斷後面的表達式是否為真了。結果執行了die()之後,不管返回什麼,程序都已經停止執行了,並且顯示指定的出錯信息,也就達到了調試的目的。就這樣。
實際上,die和exit是等價的,都是用來終止當前腳本
php手冊對兩者的解釋如是說:
exit() 函數輸出一條消息,並退出當前腳本。該函數是 die() 函數的別名。
die() 函數輸出一條消息,並退出當前腳本。該函數是 exit() 函數的別名。
實例:
<?php $site = "http://www.w3school.com.cn/"; fopen($site,"r") or exit("Unable to connect to $site"); ?>
<?php $site = "http://www.w3school.com.cn/"; fopen($site,"r") or die("Unable to connect to $site"); ?>
var_mp()和print_r()
var_mp -- 列印變數的相關信息
void var_mp ( mixed expression [, mixed expression [, ...]] )
此函數顯示關於一個或多個表達式的結構信息,包括表達式的類型與值。數組將遞歸展開值,通過縮進顯示其結構。

提示: 為了防止程序直接將結果輸出到瀏覽器,可以使用輸出控制函數(output-control functions)來捕獲此函數的輸出,並把它們保存到一個例如 string 類型的變數中。
<?php
$a = array (1, 2, array ("a", "b", "c"));
var_mp ($a);
$b = 3.1;
$c = TRUE;
var_mp($b,$c);
?>
var_mp()可以輸出多個變數,如:var_mp($b,$c)
print_r -- 列印關於變數的易於理解的信息
bool print_r ( mixed expression [, bool return] )
注: 參數 return 是在 PHP 4.3.0 的時候加上的
print_r() 顯示關於一個變數的易於理解的信息。如果給出的是 string、integer 或 float,將列印變數值本身。如果給出的是 array,將會按照一定格式顯示鍵和元素。object 與數組類似。
記住,print_r() 將把數組的指針移到最後邊。使用reset() 可讓指針回到開始處。
<pre>
<?php
$a = array ('a' => 'apple',
'b' => 'banana',
'c' => array ('x','y','z'));
print_r ($a);
?>
</pre>
上邊的代碼將輸出:
<pre> Array ( [a] => apple [b] => banana [c] => Array ( [0] => x [1] => y [2] => z ) ) </pre>
如果想捕捉 print_r() 的輸出,可使用 return 參數。若此參數設為 TRUE,print_r() 將不列印結果(此為默認動作),而是返回其輸出。
例子:return 參數示例
<?php
$b = array ('m' => 'monkey',
'foo' => 'bar',
'x' => array ('x', 'y', 'z'));
$results = print_r ($b, true); //$results 包含了 print_r 的輸出結果
?>
注: 如果想在 PHP 4.3.0 之前的版本中捕捉 print_r() 的輸出,可使用輸出控制函數。
注: 在 PHP 4.0.4 之前的版本中,如果給出的 array 或 object 包含了直接或間接指向自身的引用,print_r() 將永遠繼續下去。print_r($GLOBALS) 就是一個例子,因為 $GLOBALS 自身即是全局變數,其包含了指向自身的引用。
Zend Debugger
php斷點調試,有人提到用Zend Debugger,簡單方便,適合菜鳥使用。不過本人因沒有用過,在此不作討論。

『伍』 php微信公眾號開發常用函數

把xml數據解析成對象的函數是 simplexml_load_string( )
將字元串轉換為數組的函數是_ explode___,
將數組轉化為字元串的函數是implode__.
編碼 URL 字元串的字元串是__urlencode____.

『陸』 求微信公眾號介面 給客戶發送信息的 PHP代碼

你好,可以用客服消息介面或模板消息介面實現。但是需要認證公眾號才能有許可權。


認證服務號可以發送客服介面消息[需要對應openid24小時內有互動]和模板消息,訂閱號則沒有模板消息許可權。


發送文字消息示例:

$postdata='{"touser":"o5BkRs_vRwfPqAb1ceXHfJDzmQ5o","msgtype":"text","text":{"content":"HelloWorld"}}';
$opts=array(
'http'=>array(
'method'=>'POST',
'Content-Length'=>strlen($postdata),
'Host'=>'api.weixin.qq.com',
'Content-Type'=>'application/json',
'content'=>$postdata
)
);
$context=stream_context_create($opts);
$result=file_get_contents('https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=你的access_token',true,$context);
echo$result;

『柒』 php如何編寫一個微信公眾平台的消息推送

給你個代碼樣例不可以直接復制使用

/**
*發送模板消息
*@param$tmpId模板ID
*@param$openId用戶openID
*@param$param模板參數
*@param$url
*@returnmixed
*@authorfjlhuman
*/
publicfunctionsendTmpMessage($tmpId,$openId,$param,$url){

$postUrl="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$this->accessToken;

$arrData['touser']=$openId;
$arrData['template_id']=$tmpId;//'6OT8DDNF-CbiadTsbEKKSCZVHe_9hnhxOBT7EvURNcE';
$arrData['url']=$url;
$arrData['data']=$param;

$json=json_encode($arrData);
$result=Curl::post($postUrl,$json);

$result=json_decode($result,true);

$rData['isTure']=false;
$rData['msg']="";

if($result['errcode']==0){
$rData['isTure']=true;
$rData['msg']="發送成功";
}else{
$rData['msg']=$result['errcode'];
}
return$rData;

}

詳情請參考微信公眾平台技術文檔->模板消息介面

『捌』 請問微信開發平台,有沒有php代碼(或者介面)可以獲取公眾號本身的昵稱與頭像

現在大概是三種方法:

  • 發給用戶信息,讓用戶自己填寫名字和頭像。

  • 利用oauth2.0獲得

  • 利用curl函數模擬公眾號 登陸獲得

『玖』 關於微信公眾平台訂閱號 自定義菜單 php 代碼的問題。

公眾號可以使用AppID和AppSecret調用本介面來獲取access_token,代碼如下:

	public$appid="填寫你的id";
public$appsecret="填寫你的secret";

//獲得憑證介面
//返回數組,access_token和time有效期
publicfunctionaccess_token(){
$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->appid}&secret={$this->appsecret}";
$cont=file_get_contents($url);
returnjson_decode($cont,1);
}


獲得access_token後,在創建菜單時要POST提交數據。

熱點內容
阿里雲獨享伺服器 發布:2024-05-19 02:23:54 瀏覽:252
織夢源碼ga 發布:2024-05-19 02:23:20 瀏覽:570
java文件名後綴 發布:2024-05-19 02:14:39 瀏覽:955
快手點榜腳本 發布:2024-05-19 02:08:44 瀏覽:162
pythonforinkeys 發布:2024-05-19 01:55:44 瀏覽:792
電腦如何區域網共享文件夾 發布:2024-05-19 01:25:01 瀏覽:68
手機存儲越大性能越好嗎 發布:2024-05-19 01:14:28 瀏覽:176
我的世界hyp伺服器怎麼玩 發布:2024-05-19 00:51:25 瀏覽:801
手機如何解壓百度雲文件 發布:2024-05-19 00:32:24 瀏覽:905
centos使用python 發布:2024-05-18 23:39:48 瀏覽:869