利用第三方的SDK【Senparc.Weixin.MP】來開發(fā)屬于自己的微信公眾號(hào)。
此項(xiàng)目的GitHub地址:https://github.com/Andyahui/xgyxsh_WeiXin
這個(gè)系列是自己做的一個(gè)dome,主要想通過這個(gè)練習(xí)理清微信開發(fā)的基本流程和網(wǎng)站開發(fā)的思路,學(xué)會(huì)在項(xiàng)目實(shí)戰(zhàn)中學(xué)習(xí)知識(shí),使自己朝大牛的路上更近一步。
廢話不多說--進(jìn)入主題。
一:開發(fā)工具大禮包
微信公眾平臺(tái)開發(fā)者API:http://mp.weixin.qq.com/wiki/home/index.html
微信公眾號(hào)平臺(tái)接口調(diào)試工具:https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E6%B6%88%E6%81%AF%E6%8E%A5%E5%8F%A3%E8%B0%83%E8%AF%95&form=%E8%A7%86%E9%A2%91%E6%B6%88%E6%81%AF
Senparc.Weixin.MPgithub地址https://github.com/JeffreySu/WeiXinMPSDK/
Senparc.Weixin.MPhttp://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html
Senparc.Weixin.MP的官方網(wǎng)頁地址:http://weixin.senparc.com/QA
二:了解微信通信流程
我們知道只要關(guān)注微信公眾號(hào),就可以和公眾號(hào)進(jìn)行簡單的通信;比如公眾號(hào)發(fā)送新聞,用戶點(diǎn)擊微信公眾號(hào)菜單得到一系列回復(fù),這些就是簡單的通信。
2.1--通信原理:
需要知道客戶端發(fā)送的請(qǐng)求不是直接到達(dá)我們的網(wǎng)站服務(wù)器的,而是通過微信服務(wù)器轉(zhuǎn)發(fā)的,我們的每一次和微信公眾號(hào)互動(dòng)都是通過微信的服務(wù)器來做中間人(這么叫),這樣才能正常的進(jìn)行一些簡單的交互。交互是通過XML文件的格式來進(jìn)行傳遞的,具體可以看大神的圖。
[](file:///C:/Users/Ahui/AppData/Local/Temp/WindowsLiveWriter-274329463/supfiles1E194197/image_thumb92.png)
這個(gè)圖可以清楚的看到二者的通信過程,利用第三方的SDK可以把2,4的流程簡化,因?yàn)樗M(jìn)行了封裝,我們需要做的就是 3 處理一些邏輯關(guān)系,調(diào)用第三方的SDK完成2,4的功能。
微信服務(wù)器和網(wǎng)站的通信-----XML
<微信開發(fā)者資料里面有具體的通信數(shù)據(jù)交互過程>
[](file:///C:/Users/Ahui/AppData/Local/Temp/WindowsLiveWriter-274329463/supfiles1E194197/image_thumb12.png)
2.2--注意事項(xiàng)
---每條XML信息由大小限制,Content內(nèi)容不要超過600字;
---步驟2之后微信服務(wù)器有個(gè)等待時(shí)間:5秒,時(shí)間內(nèi)沒有到底4,那么請(qǐng)求就會(huì)被關(guān)閉。
---同一個(gè)用戶關(guān)注了兩個(gè)不同的公眾號(hào),他會(huì)產(chǎn)生兩個(gè)不同的OpenId;
---CreateTime使用的是Unix時(shí)間,需要進(jìn)行轉(zhuǎn)換;
---保證官方API的節(jié)點(diǎn)順序;
---上面通信圖是單項(xiàng)的,不會(huì)從網(wǎng)站向客戶端主動(dòng)推動(dòng)消息,都是在客戶端請(qǐng)求才響應(yīng)得到的;
三:成為開發(fā)者
完成微信的開發(fā),我們需要申請(qǐng)微信的公眾號(hào)(服務(wù)號(hào)/訂閱號(hào))。這兩者是有區(qū)別的,自己申請(qǐng)的時(shí)候就可以看到;由于我們是開發(fā)dome,所有就利用微信的測(cè)試號(hào)來完成就可以,將來部署的時(shí)候直接替換就可以。
測(cè)試號(hào)申請(qǐng)頁面:ttp://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
<通過微信掃碼登陸就可以免費(fèi)使用一年,基本的開發(fā)接口都有,足以完成常規(guī)的開發(fā)測(cè)試,特別的好。>
我們申請(qǐng)頁面成功之后就可以看到具體的測(cè)試號(hào)信息和接口配置信息,我們需要配置接口的信息;配置接口信息我們需要一個(gè)服務(wù)器和域名(可以是服務(wù)器的IP);
成為開發(fā)者的前提是:微信服務(wù)器向網(wǎng)站服務(wù)器發(fā)送GET請(qǐng)求,通過網(wǎng)站服務(wù)器將介紹到的隨機(jī)字符串發(fā)送回微信服務(wù)器,這樣就驗(yàn)證成功就可以成為開發(fā)者了。之后的每一次請(qǐng)求就是POST請(qǐng)求。
URL:指能夠接收處理微信服務(wù)器發(fā)送的GET/POST請(qǐng)求,且地址是存在的,可以通過瀏覽器訪問的。特定到某個(gè)處理get請(qǐng)求的頁面 .
Token:可由開發(fā)者任意填寫,用作生成簽名(該Token會(huì)和接口URL中包含的Token進(jìn)行比對(duì),從而驗(yàn)證安全性)。
3.1--完成認(rèn)證
直接新建個(gè)空MVC4的項(xiàng)目,引用SDK,添加相應(yīng)的引用,新建WeixinController控制器,填寫下面的代碼,直接發(fā)布就可以。不需要添加視圖,部署到網(wǎng)站服務(wù)器上面就可以完成認(rèn)證,成為開發(fā)者。
namespace XGY_WeiXin.Controllers
{
/// <summary>
/// 微信服務(wù)器發(fā)送的GET/POST請(qǐng)求,從這里在到別的地方去處理相應(yīng)的邏輯。
/// </summary>
public class WeiXinController : Controller
{
public static readonly string Token = "xgyweixin"; //與微信公眾賬號(hào)后臺(tái)的Token設(shè)置保持一致,區(qū)分大小寫。
#region GET驗(yàn)證請(qǐng)求
/// <summary>
/// 微信后臺(tái)驗(yàn)證地址(Get請(qǐng)求處理)
/// </summary>
[HttpGet]
[ActionName("Index")]
public ActionResult Get(PostModel postModel, string echostr)
{
if (CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, Token))
{
return Content(echostr); //返回隨機(jī)字符串則表示驗(yàn)證通過,,官網(wǎng)的有說明。
}
else
{
return
Content("failed:" + postModel.Signature + "," +
CheckSignature.GetSignature(postModel.Timestamp, postModel.Nonce, Token) + "。" +
"如果你在瀏覽器中看到這句話,說明此地址可以被作為微信公眾賬號(hào)后臺(tái)的Url,請(qǐng)注意保持Token一致。");
}
}
#endregion
}
}
----將這樣的項(xiàng)目發(fā)布到服務(wù)器部署,在URL和Token處填寫相關(guān)的內(nèi)容,看是否合格;本項(xiàng)目的填寫URL:http:www.xgy.llili.cn/Weixin,URL是具體到相關(guān)頁面的,這樣才會(huì)請(qǐng)求到具體的控制器。 Token: xgyweixin ,這個(gè)要和自己控制器里面填寫的一樣。
----這樣就成為了開發(fā)者,接下來就可以進(jìn)行一系列相關(guān)的操作。利用SDK就可以完成微信的相關(guān)功能了。