最近在作一個公衆號的工具,想使用公衆號的權限,第一步就是受權,官方的文檔說的不是很清楚,對於一個剛接觸的開發者看起來是有點吃力的。php
說下兩個比較重要的域名設置node
微信服務器會向這個地址推送一些信息包括(ComponentVerifyTicket、用戶取消應用受權...)數據庫
用戶關注公衆號或發送信息對應的信息會推送到這個地址。json
微信調用任何接口都須要component_verify_ticket,這一步也是折騰我最久的,主要推送過來的信息是加密的咱們須要將信息解密,
解密出component_verify_ticket將該ticket保存
後面須要用到api
消息加解密接入指引
這個頁面上能夠下載對應語言解密的demo,我選擇的是php,貌似有點問題,本身改了下能夠用了。服務器
public function parseMess() { $data = $_REQUEST; $postStr = $GLOBALS['HTTP_RAW_POST_DATA']; $encryptMsg = $postStr; $xml_tree = new DOMDocument(); $xml_tree->loadXML($encryptMsg); $array_e = $xml_tree->getElementsByTagName('Encrypt'); $encrypt = $array_e->item(0)->nodeValue; $msg_sign = $data['msg_signature']; $format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>"; $from_xml = sprintf($format, $encrypt); $msg = ''; $this->load->library('openweixin/wxBizMsgCrypt'); //改文件在php的demo包裏面,加載過來就行 $pc = new WXBizMsgCrypt($this->token, $this->key, $this->appid); $timeStamp = $data['timestamp']; $nonce = $data['nonce']; $errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg); if ($errCode == 0) { $postObj = simplexml_load_string($msg, "SimpleXMLElement", LIBXML_NOCDATA); $data = (array)$postObj; return $data; }
component_access_token這個參數也須要保存,後面也會重複用到。
這個參數的有效期是2個小時,因此定時每2小時執行下面的程序來更新component_access_token微信
public function getToken() { $ticket = $component_verify_ticket; //component_verify_ticket以前已經保存了,從數據庫中獲取 $post = array( 'component_appid' => $this->appid, //應用詳情中的AppID 'component_appsecret' => $this->secret, //應用詳情中的AppSecret 'component_verify_ticket' => $ticket, ); $ret=send_post('https://api.weixin.qq.com/cgi-bin/component/api_component_token', $post); $result = json_decode($ret, True); $component_access_token = $result['component_access_token']; //保存component_access_token echo 'success'; }
//發送post請求 function send_post($url, $post_data) { $postdata=json_encode($post_data); $options = array( 'http' => array( 'method' => 'POST', 'header' => 'Content-type:application/x-www-form-urlencoded', 'content' => $postdata, 'timeout' => 15 * 60 // 超時時間(單位:s) ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); return $result; }
有限時間是10分鐘,因此定時執行每過10分鐘來刷新一次pre_auth_codeapp
//刷新pre_auth_code public function refresh_pre() { $info = getData('system_config', array('type' => 'component_access_token'), array(), 1); $component_access_token = $info ['value']; $url = 'https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token='.$component_access_token; $post = array('component_appid' => $this->appid); $ret=send_post($url, $post); $result = json_decode($ret, True); $pre_auth_code = $result['pre_auth_code']; //保存pre_auth_code echo 'success'; }
這是個人我的網站今日Tech 喜歡科技新聞的朋友能夠收藏下。工具