本文針對人群是有1定開發基礎的人員,可以比較快的幫助你了解和學習微信開發.
其次是本文作者本次書寫,全部采取的是個人的定閱號,假設是正常的開發流程,可能會存在不同,請讀者注意.
本文代碼部份主要提供的是關鍵代碼,非關鍵代碼因人而異,需要讀者自行補充,請注意.
今天文章下面對1些方法進行了封裝,雖然在公司里面,這些都是由后臺來對這些任務完成,但是身為1個有理想,有抱負的前端,我們會肯定是有必要的,對吧.而且微信開發很多時候,也是直接由前端來開發完成的.
最后,如果喜歡本文,請關注我呦. 2016年05月31日
CSDN:http://blog.csdn.net/mr_lp?viewmode=contents
具體內容請參考 微信公眾平臺注冊步驟示例圖(企業)
我們只需要明白下面這個圖的內容。
申請1個微信公眾號
微信公眾號鏈接
我們選擇了
以后我們首先需要去配置1下接口.
以后我們就能夠去修改我們的token.
以后我們需要前往
開發–> 開發者工具 –> 開始開發 –> 接入指南
可以直接點擊 接入指南
找到 PHP示例代碼下載去進行下載.
我這里幫大家偷個懶 PHP 示例代碼下載
下載以后我們需要去進行解緊縮,將解緊縮以后的文件名稱去進行1下修改,例如可以改成 wx.php.
以后我們打開php , 去將里面的內容 token 去進行更改.
以后我們將其重新緊縮,緊縮完成以后我們需要打開我們的新浪云去管理我們的 PHP 文件.
首先,使用新浪云首先需要進行新浪云的注冊和實名認證,這里相信大家都能弄明白.
只是額外提1點,新浪云是需要消耗蕓豆的,而新手注冊會贈送200蕓豆,以后則需要自己去購買了.
但是如果是好友約請,你除當前的200以外,應當,注意是應當會額外贈送你200蕓豆,所以咯,小火伴們如果不厭棄,可以直接用我下面的注冊鏈接,這樣你應當就可以取得 400 蕓豆了.
我的約請鏈接 http://t.cn/R5UICr2
在我們注冊以后,我們就需要開始去創建我們新的利用了.
這里需要注意, PHP 的版本不要選太高,否則會影響后面的內容.
創建了空利用以后,我們就能夠在這里找到我們剛才創建的利用了,點擊上面的利用名稱.
找到利用中的代碼管理,以后選擇右邊的上傳代碼.
這時候候發現,提示代碼上傳只支持 zip, gz, tar.gz 3種格式.
這時候候就能夠把我們剛才特地打包好的利用去上傳上去了.
上傳以后,我們也能夠在上傳代碼的邊上找到編輯代碼.
以后直接在編輯代碼中去更改我們的 PHP 文件了.
還記得我們剛才在邊上有1個鏈接么?
這時候候我們就能夠將剛才的鏈接去直接復制過去,回到微信開發接口這邊,把剛才的 URL 填寫進去.
但是需要注意,我們需要將鏈接補全終了,
也就是將剛才的路徑去做1個更改,將地址和文件名串連在1起,以后回到剛才的接口中,可以去做 URL 的添加,但是需要注意,需要在前面添加上 HTML 協議.
至此,我們已獲得了 我們的接口,接下來就正式進入微信開發.
access_token是公眾號的全局唯1接口調用憑據,公眾號調用各接口時都需使用access_token。開發者需要進行妥善保存。
以上話術出自 獲得access_token
這里主要就是看看你剛才去生成的 APPID 和 APPSECRET 能否正常的獲得.
這里我們可以直接現在網頁中去嘗試1下,看看能否獲得數據.
這里把剛才的APPID 等填寫進去,如果成功的話,我們應當就可以看見我們的 access_token 了.
http要求方式:
GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
這塊代碼是固定的,可以直接粘貼.
可是我現在只是在網頁中獲得出來了,我們要是在程序中怎樣去獲得呢?難道用 AJAX ? 固然不是,這時候候我們需要使用 PHP 去獲得.
<?php
$appid = "**********這里書寫自己的 id*********";
$appsecret = "**********這里書寫自己的secret*********";
$api = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}}&secret={$appsecret}";
$json = file_get_contents($api);
// 這類可以進行獲得,但是數據不穩定,所以不推薦使用
// 微信官方推薦使用的方法是 curl,
// 我們可以新建1個 PHP,去 打印1下 phpinfo();
// 以后在網頁中去查詢1下是不是有 curl 這個內容
echo $json;
?>
如果我們驗證以后確切存在,我們就能夠去使用微信提供的方式.
<?php
$appid = "**********這里書寫自己的 id*********";
$appsecret = "**********這里書寫自己的secret*********";
$api = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}}&secret={$appsecret}";
//$json = file_get_contents($api);
// 這類可以進行獲得,但是數據不穩定,所以不推薦使用
// 微信官方推薦使用的方法是 curl,
// 我們可以新建1個 PHP,去 打印1下 phpinfo();
// 以后在網頁中去查詢1下是不是有 curl 這個內容
// echo phpinfo();//比file_get_contents穩定且能發送post要求
function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
// 為保證第3方服務器與微佩服務器之間數據傳輸的安全性,所有微信接口采取https方式調用,必須使用下面2行代碼打開ssl安全校驗。
// 如果在部署進程中代碼在此處驗證失敗,請到 http://curl.haxx.se/ca/cacert.pem 下載新的證書辨別文件。
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
// curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
// 這里進行注釋是由于這里是進行 token 去進行驗證
// 避免其他人歹意刷內容
// 這里由于是本地測試,所以注釋1下,正式上線的時候還是需要注釋開的
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
$json = httpGet($api);
echo $json;
?>
此段代碼可以在 微信JS-SDK中查詢到.
這時候候我們應當就可以夠獲得我們的 token 了,但是我們現在還需要將其重新獲得出來,我們可以將其轉換為1個數組,以后重新獲得我們的 access_token.
<?php
$appid = "**********這里書寫自己的 id*********";
$appsecret = "**********這里書寫自己的secret*********";
$api = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}}&secret={$appsecret}";
function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
// curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
$str = httpGet($api);
// 第2個參數設置為 true ,返回值改成數組
$arr = json_decode($str,true);
print_r($arr);
$accessToken = $arr["assess_token"];
?>
我們已獲得了具體的 access_token, 以后我們就能夠存入我們的數據庫中,每次使用的時候去進行1個判斷,如果是舊的就去獲得新的替換它.
這里不對數據庫操作做更多說明,這個完全看自己習慣,
只是補充1點, token 的 類型要是 TEXT ,time 的類型最好是 VARCHAR.
以后回到代碼部份,這時候候我們會首先去連接1下我們剛才的數據庫.
具體連接數據庫請自行操作.
以后我們就去通過數據庫操作去獲得到我們的 token.
<?php
$appid = "**********這里書寫自己的 id*********";
$appsecret = "**********這里書寫自己的secret*********";
function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
// curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
$str = httpGet($api);
function getToken(){
global $appid;
global $appsecret;
$api = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}}&secret={$appsecret}";
// 第2個參數設置為 true ,返回值改成數組
$arr = json_decode($str,true);
// print_r($arr);
$accessToken = $arr["assess_token"];
return $accessToken;
}
$sql = "SELECT * FROM token";
$result = mysql_query($sql);
if (mysql_num_rows($result) > 0) {
//我們判斷時間是不是過期
$row = mysql_fetch_assoc($result);
$time = $row["time"];
$nowTime = time();
// 由于剛才微信默許的有效時間是7200秒(2小時)
if ($nowTime - $time > 7200) {
// 過期了,重新獲得并更新數據庫
$token = getToken();
$time = time();
$sql = "UPDATE token SET token='{$token}',time='$time'";
mysql_query($sql);
if (mysql_affected_rows() > 0) {
echo "更新成功";
}
else{
echo "更新失敗";
}
}
else{
// 沒過期
$token = $row["token"];
}
echo $token;
}
else{
//沒有的話,就直接去插入
$sql = "INSERT INTO token(id,token,time) VALUES (NULL,'{$accessToken}','{$time}')";
mysql_query($sql);
if (mysql_insert_id() > 0) {
echo "插入成功";
}
else{
echo "插入失敗";
}
}
echo $token;
?>
如果公眾號基于安全等斟酌,需要獲知微佩服務器的IP地址列表,以便進行相干限制,可以通過該接口取得微佩服務器IP地址列表或IP網段信息。
以上話術出自 獲得微佩服務器IP地址
http要求方式:
GET
https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=ACCESS_TOKEN
這里我們首先可以先來獲得1下微信的服務器列表.
// 獲得微佩服務器列表
function getIP($token){
$api = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token={$token}";
$json = http_get($api);
echo $json;
}
getIP($token);
我們再對其進行1下封裝,
// 獲得微佩服務器列表
function getIP($token){
$api = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token={$token}";
$json = http_get($api);
$arr = json_decode($json,true);
return $arr["ip_list"];
}
$ip_List = getIP($token);
print_r($ip_List);
記得實際操作的時候,需要對獲得到的數據進行1個驗證,只有在獲得到了對應的數據以后再進行下面的操作.
一樣的操作,像我們想獲得用戶列表等內容,一樣也是如此.
公眾號可通過本接口來獲得帳號的關注者列表,關注者列表由1串OpenID(加密后的微信號,每一個用戶對每一個公眾號的OpenID是唯1的)組成。1次拉取調用最多拉取10000個關注者的OpenID,可以通過量次拉取的方式來滿足需求。
以上話術出自 獲得用戶列表
http要求方式:
GET(請使用https協議)
https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID
我們也能夠對其進行1下封裝.
// 第2個參數為可選參數
function getUserList($token,$nextOpendId = false){
if ($nextOpendId) {
$api = "https://api.weixin.qq.com/cgi-bin/user/get?access_token={$token}&next_openid={$nextOpendId}";
}
else{
$api = "https://api.weixin.qq.com/cgi-bin/user/get?access_token={$token}";
}
$json = httpGet($api);
echo $json;
// $arr = json_decode($json,true);
}
getUserList($token);
// 用這個方法可以獲得到我們的內容是從哪一個位置開始
// 例如假設有 100個人,我們給定的是 第50 個人的 token, 返回的應當是 51 - 100
// getUserList($token,"用戶的 token 內容");
這時候候我們就能夠對其進行1下打印,打印以后就能夠看到我們的想要的用戶列表了.
在關注者與公眾號產生消息交互后,公眾號可取得關注者的OpenID(加密后的微信號,每一個用戶對每一個公眾號的OpenID是唯1的。對不同公眾號,同1用戶的openid不同)。公眾號可通過本接口來根據OpenID獲得用戶基本信息,包括昵稱、頭像、性別、所在城市、語言和關注時間。
請注意,如果開發者有在多個公眾號,或在公眾號、移動利用之間統1用戶帳號的需求,需要前往微信開放平臺(open.weixin.qq.com)綁定公眾號后,才可利用UnionID機制來滿足上述需求。
上方出自 微信公眾平臺說明 獲得用戶基本信息(UnionID機制)
http要求方式:
GET
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
//獲得用戶詳細信息
function getUserInfo($token,$userOpenId){
$api = "http要求方式: GET https://api.weixin.qq.com/cgi-bin/user/info?access_token={$token}}&openid={$userOpenId}}&lang=zh_CN";
$json = httpGet($api);
$arr = json_decode($json,true);
return $arr;
}
getUserList($token,"用戶的 token 內容");
$userInfo = getUserInfo($token,"某1用戶的 token");
// 獲得用戶信息
print_r($userInfo);
// 獲得用戶頭像
echo "<img src = '".$userInfo["headimgurl"]."'>";
在今天文章最后,我們再來給大家演示1個 post 接口的寫法.
將1條長鏈接轉成短鏈接。
主要使用處景: 開發者用于生成2維碼的原鏈接(商品、支付2維碼等)太長致使掃碼速度和成功率降落,將原長鏈接通過此接口轉成短鏈接再生成2維碼將大大提升掃碼速度和成功率。
上述話語出自 長鏈接轉短鏈接接口
http要求方式:
POST
https://api.weixin.qq.com/cgi-bin/shorturl?access_token=ACCESS_TOKEN
以上要求網址是固定的,可以直代替換.
function httpPost($data,$url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tmpInfo = curl_exec($ch);
if (curl_errno($ch)) {
return curl_error($ch);
}
curl_close($ch);
return $tmpInfo;
}
function longToShort($token,$url){
$api = "https://api.weixin.qq.com/cgi-bin/shorturl?access_token={$token}";
// 這里直接采取官網提供的url 了
$data = '{"action":"long2short","long_url":"'$url.'"}';
$json = httpPost($data,$api);
// echo $json;
return json_decode($json,true);
}
longToShort($token,"https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1443433600&token=&lang=zh_CN");
print_r($arr);
這時候候我們可以去打印1下現在的URL ,這時候候我們就沒必要使用之前的非常長的接口內容了,而可以直接去使用我們縮短的網址了.
同時這個函數不單單可以用在此處,其余時候也能夠直接去使用.
上一篇 設計模式07_代理模式
下一篇 VRP系統——5