網(wǎng)站性能檢測(cè)評(píng)分
注:本網(wǎng)站頁面html檢測(cè)工具掃描網(wǎng)站中存在的基本問題,僅供參考。
微信平臺(tái)網(wǎng)站開發(fā)
微信公眾號(hào)三方平臺(tái)開發(fā)【全網(wǎng)發(fā)布及全網(wǎng)發(fā)布接入檢測(cè)】 公司視頻課程
于千萬人之中遇見了你
愿與你留下恒久的記憶
關(guān)注袁威,見證奇跡
今天開始之前,糾正下上期粗心犯的一個(gè)錯(cuò),在完整代碼部分把if(strtolower($postObj -> MsgType) == 'event')寫了兩次,由于推送的內(nèi)容修改無法生效, 大伙自行刪除多余的判斷句即可,也可以看今天最后面的完整代碼。
好了,進(jìn)入今天的內(nèi)容,經(jīng)過之前系列內(nèi)容過后,接下來的代微信公眾號(hào)實(shí)現(xiàn)業(yè)務(wù)部分跟微信公眾號(hào)開發(fā)業(yè)務(wù)邏輯一樣,所以公眾號(hào)其他業(yè)務(wù)功能部分后面我會(huì)單獨(dú)整理一套相關(guān)內(nèi)容,今天,咱們就來說說微信第三方平臺(tái)開發(fā)的最后一步——全網(wǎng)發(fā)布,因?yàn)橹挥羞M(jìn)行全網(wǎng)發(fā)布后,我們的第三方平臺(tái)才可以接收所有的微信公眾號(hào)的授權(quán),否則就只能接收測(cè)試公眾號(hào)的授權(quán)。
在正式進(jìn)行全網(wǎng)發(fā)布之前,必須先通過全網(wǎng)發(fā)布接入檢測(cè),意思就是此時(shí)微信服務(wù)器會(huì)通過自動(dòng)化測(cè)試的方式,來檢測(cè)我們開發(fā)的第三方平臺(tái)的基礎(chǔ)邏輯是否正??捎茫挥性诖_定基礎(chǔ)可用的情況下,才會(huì)允許第三方平臺(tái)提交全網(wǎng)發(fā)布。
當(dāng)然,在前往開放平臺(tái)進(jìn)行全網(wǎng)發(fā)布之前,我們首先要根據(jù)測(cè)試步驟,用代碼實(shí)現(xiàn)相關(guān)邏輯,才能順利通過全網(wǎng)發(fā)布,在這一步一般會(huì)出現(xiàn)以下三個(gè)問題:返回Api文本信息,返回普通文本信息,發(fā)送事件信息。
首先,在開發(fā)文檔里,我們可以看到,官方提供了專用測(cè)試公眾號(hào)信息,其中appid為 wx570bc396a51b8ff8,Username為gh_3c884a361561。
1) 發(fā)送事件信息
模擬粉絲觸發(fā)專用測(cè)試公眾號(hào)的事件,并推送事件消息到專用測(cè)試公眾號(hào),第三方平臺(tái)需要提取推送過來的XML信息中event的值,并且第三方平臺(tái)需要在5秒內(nèi)立即返回按照官方要求組裝成文本消息回復(fù)給粉絲,格式為:event + “from_callback”(假定event為L(zhǎng)OCATION,則文本消息內(nèi)容為: LOCATIONfrom_callback)。
這里,我們需要先判斷事件信息是否屬于專用測(cè)試公眾號(hào),然后組裝進(jìn)行回復(fù):
if($toUsername== 'gh_3c884a361561'){
$event = $postObj->Event;
$content =$event.'from_callback';
responseText($postObj,$content);
}
2)返回普通文本信息
模擬粉絲發(fā)送文本消息給專用測(cè)試公眾號(hào),第三方平臺(tái)需要根據(jù)文本消息的內(nèi)容進(jìn)行相應(yīng)的響應(yīng),這里推過來的會(huì)是一個(gè)固定內(nèi)容,為TESTCOMPONENT_MSG_TYPE_TEXT,而我們也是返回一個(gè)固定文本內(nèi)容即可,為TESTCOMPONENT_MSG_TYPE_TEXT_callback:
if(strtolower($postObj -> MsgType) == 'text' &&trim($postObj->Content)=='TESTCOMPONENT_MSG_TYPE_TEXT'){
$toUsername = $postObj->ToUserName;
if($toUsername =='gh_3c884a361561'){
$content ='TESTCOMPONENT_MSG_TYPE_TEXT_callback';
3)返回Api文本信息
模擬粉絲發(fā)送文本消息給專用測(cè)試公眾號(hào),第三方平臺(tái)需要在5秒內(nèi)返回空串表明暫時(shí)不回復(fù),然后再立即使用客服消息接口發(fā)送消息回復(fù)粉絲。
第三方平臺(tái)接收到的文本信息為QUERY_AUTH_CODE:$query_auth_code$,這里我們只要進(jìn)行“QUERY_AUTH_CODE”字段判定就可以了,在拿到$query_auth_code$的值后,需要利用$query_auth_code$的值來換取公眾號(hào)的授權(quán)信息(換取授權(quán)信息實(shí)現(xiàn)方法見微信公眾號(hào)三方平臺(tái)開發(fā)【獲取授權(quán)方的授權(quán)信息以及基本信息】),然后再調(diào)用發(fā)送客服消息api來給粉進(jìn)行文本消息回復(fù),其中文本消息內(nèi)容為:$query_auth_code$_from_api:
if(strpos ( $postObj->Content, 'QUERY_AUTH_CODE' ) !== false){
$query_auth_code =str_replace ( 'QUERY_AUTH_CODE:', '', $postObj->Content);
$wechat =A('Wechat/Wechat');
$info = $wechat->getAuthInfo($query_auth_code);
$access_info=$info['authorization_info'] ['authorizer_access_token'];
$param ['touser'] =$postObj ->FromUserName;
$param ['msgtype'] ='text';
$param ['text']['content'] = $query_auth_code . '_from_api';
$url ='https://api.weixin.qq/cgi-bin/message/custom/send?access_token='.$access_info;
$res = post_data ($url, $param );
完整消息事件完整代碼:
public function reponseMsg(){
require_once(dirname(__FILE__).'/wxBizMsgCrypt.php');
//encodingAesKey和token均為申請(qǐng)三方平臺(tái)是所填寫的內(nèi)容
$encodingAesKey = '公眾號(hào)消息加解密Key';
$token = '公眾號(hào)消息校驗(yàn)Token';
$appId = '三方平臺(tái)appid';
$timeStamp = empty($_GET ['timestamp'] ) ? "" : trim ( $_GET ['timestamp'] );
$nonce = empty ($_GET['nonce'] ) ? "" : trim ( $_GET ['nonce'] );
$msg_sign = empty($_GET ['msg_signature'] ) ? "" : trim ( $_GET ['msg_signature'] );
$pc = new\WXBizMsgCrypt( $token, $encodingAesKey, $appId );
//獲取到微信推送過來post數(shù)據(jù)(xml格式)
$postArr=$GLOBALS['HTTP_RAW_POST_DATA'];
$msg = '';
$errCode=$pc->decryptMsg($msg_sign, $timeStamp, $nonce, $postArr,$msg);
if($errCode == 0){
//處理消息類型,并設(shè)置回復(fù)類型和內(nèi)容
$postObj=simplexml_load_string($msg,'SimpleXMLElement',LIBXML_NOCDATA);
//判斷該數(shù)據(jù)包是否是訂閱(用戶關(guān)注)的事件推送
if(strtolower($postObj-> MsgType) == 'event'){
//第三方平臺(tái)全網(wǎng)發(fā)布檢測(cè)發(fā)送事件消息測(cè)試
$toUsername= $postObj ->ToUserName;
$event= $postObj ->Event;
$content= $event.'from_callback';
//如果是關(guān)注subscribe事件
if(strtolower($postObj->Event== 'subscribe')){
$public_name=strval($postObj->ToUserName);
$map['public_name']=$public_name;
$cont=M('Subscribe')->where($map)->find();
//回復(fù)用戶消息
$content=$cont['content'];
//第三方平臺(tái)全網(wǎng)發(fā)布檢測(cè)普通文本消息測(cè)試
if(strtolower($postObj-> MsgType) == 'text' &&trim($postObj->Content)=='TESTCOMPONENT_MSG_TYPE_TEXT'){
$content= 'TESTCOMPONENT_MSG_TYPE_TEXT_callback';
//第三方平臺(tái)全網(wǎng)發(fā)布檢測(cè)返回api文本消息測(cè)試
if(strpos ($postObj->Content, 'QUERY_AUTH_CODE' ) !== false){
$query_auth_code= str_replace ( 'QUERY_AUTH_CODE:', '', $postObj->Content);
$wechat= A('Wechat/Wechat');
$info= $wechat ->getAuthInfo($query_auth_code);
$param['touser'] = $postObj ->FromUserName;
$param['msgtype'] = 'text';
$param['text'] ['content'] = $query_auth_code . '_from_api';
$url='https://api.weixin.qq/cgi-bin/message/custom/send?access_token='.$access_info;
$res = post_data ( $url,$param );
//用戶發(fā)送某一圖文關(guān)鍵字的時(shí)候,回復(fù)圖文消息
if(strtolower($postObj->MsgType) == 'text' && trim($postObj->Content)=='圖文'){
//這一步可從數(shù)據(jù)庫中查詢得到
$arr=array(
array(
'title'=>'test1',
'description'=>'test1',
'picUrl'=>'http://mmbiz.qpic/mmbiz/mLiaE7fSUysSbbqzicX2LVsLL1HsXMRV0m6uicfiaSX9Aic43BA5vnpFOBMWAoEuaVDicoOX4HzGT8OT5QK6DRs14VkQ/0',
'url'=>'https://mp.weixin.qq/s?__biz=MjM5NzY4MDc0MA==&tempkey=mKI6U0rlJZofvceyQdxTPAYtneMxKyhWy52ytbUZfOJzFEHMDqmYTQLQWrkrSRky&appmsgid=10000002&itemidx=1&sign=99baf31f45e2357af575c63b5b303b6a#wechat_redirect',
),
'title'=>'test2',
'description'=>'test2',
'picUrl'=>'http://mmbiz.qpic/mmbiz_jpg/mLiaE7fSUysTFDEZQTOvXleYwYqFN1JeLwM66Zg7dHjK3aHQxdVtwGTJgzuKJRuZCBHljIvVLkvZ2CADJ6paJYQ/0?wx_fmt=jpeg',
'url'=>'https://mp.weixin.qq/s?__biz=MjM5NzY4MDc0MA==&tempkey=mKI6U0rlJZofvceyQdxTPDXw5wcPw4rpHzkwOv4U7kDY1V%2BUUirAB0C9oEEsX5HQB8Uv1Ut2zj3buNkRPh6KNYWVyTaxebMkb8IcD9FjNbpcqY0mdRbCxRnbIjtmNBd37cKXm3Egbo1KWdkSEy5NZg%3D%3D&chksm=315123030626aa15c3e454afbd931ec3458149b13370999b16bc72b876326977e7d68b406a8c#rd',
)
);
responseNews($postObj,$arr);
}else{
//當(dāng)微信用戶發(fā)送關(guān)鍵字,公眾號(hào)回復(fù)對(duì)應(yīng)內(nèi)容
$keyword=strval(trim($postObj ->Content));
$log['public_name']=$public_name;
$log['keyword']=array('like','%'.$keyword.'%');
$con=M('Keyword')->where($log)->select();
foreach($conas $vo =>$k){
$conn=$con[$vo]['content'];
if($conn){
$content=$conn;
$lg['public_name']=$public_name;
$lg['keyword']='';
$con=M('Keyword')->where($lg)->select();
完成后,再前往開放平臺(tái),點(diǎn)擊全網(wǎng)發(fā)布,等待一分鐘左右,看到所有狀態(tài)都為成功,則代表全網(wǎng)發(fā)布接入檢測(cè)通過了,點(diǎn)擊【確定】,就愉快的發(fā)布咯。
如果正合你意,如果你也喜歡,點(diǎn)贊or分享只在一瞬間~
微信小程序選擇嵌入網(wǎng)頁還是原生開發(fā) 小程序視頻課程
微信小程序有一個(gè)功能,就是直接在小程序中嵌入Web頁面。這可以大大減少小程序的開發(fā)成本。有的客戶發(fā)現(xiàn)了這點(diǎn),在找小編公司做微信小程序的時(shí)候,為了節(jié)約資金,都希望直接嵌入web頁面,小編是不希望這做的,至于為什么,請(qǐng)看下面。
在實(shí)現(xiàn)功能上,Web頁面能做的,原生小程序大部分能做。原生小程序能做的,web不一定能做。我這么一寫,可能有的人就會(huì)說,小編你是不是有病啊。既然這兩個(gè)都差不多,為什么還不推薦用web頁面嵌入,是不是為了多掙點(diǎn)錢。別急,看小編慢慢道來。
1.在原生小程序里,整個(gè)小程序都是提前下載的,不會(huì)存在Web頁面打開時(shí)的卡頓現(xiàn)象。大家都知道小程序打開速度的快慢,直接影響到用戶體驗(yàn),打開的越慢,用戶的流失率越高。
2.有一些功能例如推送信息等只有原生開發(fā)的小程序才能使用,而Web頁面嵌入的小程序是沒有的。
所以,如果需要和微信生態(tài)整合得更緊密,可以使用原生方式開發(fā);如果追求快速遷移已有 Web 產(chǎn)品,嵌入 Web 頁面更快。要注意的是,微信小程序嵌入網(wǎng)頁的功能,目前還不對(duì)個(gè)人開放,且對(duì)網(wǎng)頁的域名有要求。