微信開發深度解析

微信開發深度解析

《微信開發深度解析》 全稱《微信開發深度解析:微信公眾號、小程式高效開發秘籍》,作者蘇震巍,電子工業出版社2017年7月出版

內容提要

《微信開發深度解析:微信公眾號、小程式高效開發秘籍》以深度剖析Senparc.Weixin SDK框架的設計思想和使用方法為主幹,全面介紹了開發微信公眾號(包含了訂閱號、服務號和小程式)所需的關鍵技能,包括了從需求分析、策劃,到賬號申請、驗證,再到全面的API及開發工具介紹,側重於伺服器端開發。《微信開發深度解析:微信公眾號、小程式高效開發秘籍》也涵蓋了盛派網路團隊在多年的研發過中收集到的大量注意點,幫助開發者“避坑”。

《微信開發深度解析:微信公眾號、小程式高效開發秘籍》包含了四個部分:微信基礎介紹(第1~3章)、Senparc.Weixin SDK框架介紹(第4~13章)、Senparc.Weixin SDK接口介紹(第14~19章)和微信小程式(第20章),由淺入深指導開發者學習微信開發,在此過程中可以結合配套系統進行閱讀和練習:https://book.weixin.senparc.com。

同時,《微信開發深度解析:微信公眾號、小程式高效開發秘籍》也是Senparc.Weixin SDK作者為開發者奉上的一份官方文檔,書中詳細介紹了SDK中各個接口的位置及用法,可以幫助開發者靈活套用和改寫代碼。對於需要學習編程架構思想的開發者,本書也凝結了較多精華的思想和思考過程,可以作為參考。

Senparc.Weixin SDK已經支持了多個.NET版本,包括.NET Core、.NET Framework 4.5和.NET Framework 4.0,各個版本的接口和使用方法保持了高度的一致,《微信開發深度解析:微信公眾號、小程式高效開發秘籍》以目前使用率最高的.NET 4.5(C#)版本為例進行介紹,針對其他框架本書也同樣適用,讀者可以舉一反三。

《微信開發深度解析:微信公眾號、小程式高效開發秘籍》除提供給專業開發人員使用以外,也適合大專院校、培訓機構作為相關教材和參考書使用。

目錄

★第一部分 微信基礎介紹

第1章 使用本書 2

1.1 我是否適合讀這本書 3

1.2 如何用好這本書 3

1.3 各章節導讀 5

1.4 名詞解釋 7

1.5 學習資源 8

1.6 幫助我們改進 9

習題 9

第2章 策劃你的第一個微信項目 10

2.1 需求分析 10

2.1.1 溝通需求 10

2.1.2 整理需求 13

2.1.3 制定方案 14

2.2 資料庫設計 17

2.3 接口統計 21

2.4 業務邏輯 22

2.5 技術架構 24

2.6 微信公眾號策劃 26

2.7 統一培訓 27

習題 28

第3章 開發微信公眾號前的準備 29

3.1 準備工作 29

3.1.1 基本技能 29

3.1.2 開發環境 30

3.1.3 域名 31

3.1.4 伺服器 31

3.1.5 SSL證書 31

3.2 訊息通信 31

3.2.1 公眾平台的訊息通信過程 31

3.2.2 XML通信格式 32

3.2.3 訊息通信中需要注意的問題 33

3.3 訪問網頁 34

3.4 使用測試號進行測試 34

3.5 使用微信 Web 開發者工具調試微信 36

3.5.1 下載和安裝 36

3.5.2 使用開發者工具 37

3.6 單元測試 39

3.7 線上接口調試工具 39

3.8 服務號、訂閱號和認證賬號的功能差別 40

3.8.1 服務號 40

3.8.2 訂閱號 44

3.9 微信公眾號申請 47

習題 56

★第二部分 Senparc.Weixin SDK框架介紹

第4章 Senparc.Weixin SDK設計架構 58

4.1 開源項目 58

4.2 開源協定 58

4.3 微信平台生態與 Senparc.Weixin SDK 59

4.4 檔案目錄 61

4.4.1 根目錄 61

4.4.2 src目錄 61

4.5 Senparc.Weixin.dll 62

4.5.1 Senparc.Weixin檔案結構 62

4.5.2 Senparc.Weixin類庫結構 65

4.5.3 使用Senparc.Weixin注意點 65

4.6 Senparc.Weixin.MP.dll 66

4.6.1 Senparc.Weixin.MP.dll檔案結構 66

4.6.2 Senparc.Weixin.MP.dll類庫 69

4.7 Senparc.Weixin.WxOpen.dll 69

4.8 Senparc.Weixin.MP.MvcExtension.dll 71

4.9 Senparc.Weixin.Cache.Redis.dll 71

4.10 Senparc.Weixin.Cache.Memcached.dll 72

4.11 其他類庫 72

4.12 單元測試 72

4.13 修改原始碼和貢獻代碼 72

4.13.1 註冊 GitHub 賬號 73

4.13.2 Fork項目 75

4.13.3 修改代碼 76

4.13.4 提交代碼 78

4.13.5 貢獻代碼 79

習題 82

第5章 微信公眾號開發全過程案例 83

5.1 開發準備 83

5.1.1 安裝開發環境及工具 83

5.1.2 創建解決方案 84

5.1.3 創建項目 85

5.1.4 使用 Nuget 安裝 Senparc.Weixin SDK 88

5.2 開發 90

5.2.1 準備基礎框架 91

5.2.2 創建資料庫 91

5.2.3 同步資料庫 92

5.2.4 建立資料庫框架 95

5.2.5 開發Repository倉儲模組 98

5.2.6 快取 100

5.2.7 開發業務邏輯 102

5.2.8 Controller控制器 105

5.2.9 Web項目和UI 111

5.3 單元測試 111

5.4 部署 112

5.5 訊息驗證和線上測試 112

5.6 在Microsoft Azure上運行微信公眾號示例 112

習題 116

第6章 使用SDK Demo:Senparc.Weixin.MP.Sample 117

6.1 檔案位置及結構 117

6.1.1 Senparc.Weixin.MP.Sample 解決方案資料夾 117

6.1.2 Senparc.Weixin.MP.Sample 解決方案 118

6.1.3 Senparc.Weixin.MP.Sample Web項目 119

6.1.4 Senparc.Weixin.MP.Sample.CommonService 項目 121

6.2 配置項目 122

6.2.1 Web.Config檔案 122

6.2.2 Global.asax 檔案 124

6.2.3 首頁 125

6.3 微信訊息 126

6.3.1 訊息處理 127

6.3.2 訊息模擬及並發訊息測試 134

6.4 微信選單 135

6.5 OAuth 138

6.6 JS-SDK 140

6.7 微信支付 141

6.8 素材 143

6.9 快取測試 143

6.10 異步方法 145

6.11 微信內置瀏覽器過濾 146

6.12 微信小程式 147

6.12.1 訊息處理 147

6.12.2 模板訊息 148

6.12.3 WebSocket 148

6.13 其他 148

6.13.1 開放平台 148

6.13.2 企業號 149

6.13.3 文檔下載 149

6.14 WebForms項目 150

6.15 單元測試 150

6.15.1 單元測試項目 150

6.15.2 單元測試方法 151

6.16 配置伺服器和參數 153

6.16.1 配置IIS 153

6.16.2 安裝 .NET Framework 4.5 154

6.16.3 設定IIS站點 155

6.16.4 解析域名 156

6.16.5 檢查 Web.config 檔案 156

6.17 部署 156

習題 157

第7章 MessageHandler:簡化訊息處理流程 158

7.1 設計思想 158

7.2 訊息類型 160

7.2.1 概述 160

7.2.2 命名規則 161

7.2.3 全局訊息基類 161

7.2.4 請求訊息 161

7.2.5 回響訊息 165

7.3 原始訊息處理方法 169

7.4 使用MessageHandler 170

7.4.1 第一步:通過Nuget安裝Senparc.Weixin.MP 170

7.4.2 第二步:創建你自己的MessageHandler 170

7.4.3 第三步:寫3行關鍵代碼 175

7.5 OnExecuting()和OnExecuted() 175

7.6 解決用戶上下文(Session)問題 176

7.6.1 訊息容器:MessageContainer 177

7.6.2 訊息佇列:MessageQueue 178

7.6.3 單用戶上下文:MessageContext 179

7.6.4 全局上下文:WeixinContext 183

7.6.5 上下文移除事件:WeixinContextRemovedEventArgs 185

7.7 訊息去重 185

7.8 訊息加密 187

7.9 訊息格式轉換 189

7.9.1 XML轉實體 190

7.9.2 實體轉XML 190

7.10 訊息代理 191

7.11 了解MessageHandler設計原理 191

7.11.1 Senparc.Weixin.MessageHandlers.MessageHandler結構 192

7.11.2 Senparc.Weixin.MP.MessageHandlers.MessageHandler結構 196

7.11.3 抽象類及虛方法 198

7.11.4 構造函式 198

7.11.5 Execute()方法 200

7.11.6 CancelExcute屬性 201

7.11.7 OnExecuting()方法 202

7.11.8 DefaultResponseMessage()方法 202

習題 203

第8章 快取策略 204

8.1 設計原理 204

8.2 基礎快取策略接口:IBaseCacheStrategy 206

8.3 數據容器快取策略接口:IContainerCacheStragegy 207

8.3.1 原始IContainerCacheStragegy設計思路 207

8.3.2 最佳化IContainerCacheStragegy設計思路 208

8.3.3 最佳化IContainerItemCollection和ContainerItemCollection 208

8.4 本地數據容器快取策略:LocalContainerCacheStrategy 211

8.4.1 創建LocalContainerCacheStrategy類 211

8.4.2 定義數據源 212

8.4.3 實現容器快取策略 214

8.4.4 運用單例模式 216

8.4.5 測試 218

8.5 分散式快取 219

8.5.1 起因 219

8.5.2 負載均衡 220

8.5.3 分散式快取 220

8.5.4 分散式使用的注意點 221

8.6 Redis分散式快取策略:RediscontainerCacheStrategy 222

8.6.1 Redis簡介 222

8.6.2 安裝Redis 222

8.6.3 StackExchange.Redis快取擴展 222

8.6.4 實現Redis快取策略 224

8.6.5 單元測試 225

8.7 Memcached分散式快取策略:MemcachedContainerCacheStrategy 225

8.7.1 Memcached簡介 225

8.7.2 安裝Memcached 226

8.7.3 EnyimMemcached快取擴展 226

8.7.4 實現Memcached快取策略 227

8.8 快取策略工廠:CacheStrategyFactory 227

8.8.1 創建CacheStrategyFactory 227

8.8.2 配置和使用CacheStrategyFactory 229

習題 230

第9章 並發場景下的分散式鎖 231

9.1 概述 231

9.2 為什麼需要分散式鎖 231

9.3 分散式鎖的設計 232

9.3.1 IBaseCacheStrategy 接口設計 232

9.3.2 ICacheLock 接口設計 234

9.3.3 分散式鎖基類:BaseCacheLock 236

9.4 本地鎖 236

9.4.1 LocalCacheLock 236

9.4.2 實現 BeginCacheLock 238

9.5 Redis 鎖 238

9.5.1 RedisCacheLock 238

9.5.2 Redlock.CSharp 240

9.5.3 實現BeginCacheLock 240

9.6 Memcached鎖 241

9.6.1 MamcachedCacheLock 241

9.6.2 實現BeginCacheLock 242

習題 242

第10章 Container:數據容器 243

10.1 設計思路及原理 243

10.2 BaseContainerBag 245

10.3 BaseContainer 246

10.4 AccessTokenContainer 253

10.5 JsApiTicketContainer 262

10.6 BindableBase 262

10.7 ContainerHelper 264

習題 265

第11章 SenparcMessageQueue:訊息佇列 266

11.1 設計原理 266

11.2 佇列項:SenparcMessageQueueItem 267

11.3 訊息佇列:SenparcMessageQueue 268

11.3.1 GenerateKey()方法 269

11.3.2 MessageQueueDictionary 269

11.3.3 MessageQueueList 269

11.3.4 有關Dictionary和List的效率測試 270

11.4 自動執行緒處理:SenparcMessageQueueThreadUtility 272

11.4.1 SenparcMessageQueueThreadUtility 272

11.4.2 執行緒工具類:ThreadUtility 274

11.4.3 最佳化擴展 276

習題 278

第12章 接口調用及數據請求 279

12.1 設計規則 279

12.2 回響類型 281

12.2.1 基類:WxJsonResult 281

12.2.2 擴展回響類型 282

12.3 請求 284

12.3.1 GET請求 284

12.3.2 POST請求 286

12.3.3 JSON 請求 290

12.3.4 檔案上傳/下載 292

12.3.5 公共方法 293

12.4 使用AccessToken請求接口:CommonJsonSend 293

12.4.1 Sent () 方法 293

12.4.2 JsonSetting 295

12.4.3 WeixinJsonConventer 298

12.5 AccessToken自動處理器:ApiHandlerWapper 299

習題 302

第13章 Debug模式及異常處理 303

13.1 Debug模式設計原理 303

13.2 WeixinTrace 304

13.3 異常處理 308

13.3.1 WeixinException 308

13.3.2 ErrorJsonResultException 309

13.3.3 MessageHandlerException 310

13.3.4 UnknownRequestMsgTypeException 311

13.3.5 UnRegisterAppIdException 311

13.3.6 WeixinMenuException 312

13.4 微信官方線上調試工具 314

習題 315

★第三部分 Senparc.Weixin SDK接口介紹

第14章 微信接口 318

14.1 微信接口概述 318

14.2 開始使用微信接口 319

14.2.1 獲取接口調用憑據(AccessToken) 319

14.2.2 獲取憑證接口 320

14.2.3 獲取微信伺服器IP位址 321

14.3 自定義選單管理 322

14.3.1 自定義選單 322

14.3.2 個性化選單 328

14.4 訊息管理 329

14.4.1 傳送客服訊息 329

14.4.2 傳送訊息-群發接口和原創校驗 332

14.4.3 傳送訊息-模板訊息接口 334

14.4.4 獲取公眾號的自動回復規則 334

14.5 微信網頁授權(OAuth) 334

14.6 素材管理 335

14.6.1 新增臨時素材 335

14.6.2 獲取臨時素材 335

14.6.3 新增永久素材 335

14.6.4 獲取永久素材 335

14.6.5 刪除永久素材 335

14.6.6 修改永久圖文素材 336

14.6.7 獲取素材總數 336

14.6.8 獲取素材列表 336

14.7 用戶管理 336

14.7.1 用戶標籤管理 336

14.7.2 設定用戶備註名 338

14.7.3 獲取用戶基本信息(UnionID機制) 338

14.8 賬號管理 339

14.8.1 創建二維碼 339

14.8.2 獲取下載二維碼的地址 339

14.8.3 長連結轉短連結 339

14.9 數據統計接口 339

14.9.1 用戶分析數據接口 340

14.9.2 圖文分析數據 340

14.9.3 訊息分析數據 341

14.9.4 接口分析數據接口 342

14.10 微信JS-SDK 343

14.10.1 獲取驗證地址 343

14.10.2 獲取AccessToken 343

14.10.3 刷新access_token 343

14.10.4 獲取用戶基本信息 343

14.10.5 檢驗授權憑證(access_token)是否有效 343

14.11 微信小店接口 344

14.11.1 語義理解接口 344

14.12 微信卡券接口 344

14.12.1 創建卡券 344

14.12.2 投放卡券 345

14.12.3 核銷卡券 346

14.12.4 管理卡券 346

14.12.5 會員卡專區 348

14.12.6 朋友的券專區 349

14.12.7 第三方代制專區 350

14.12.8 第三方授權相關接口(開放平台) 352

14.13 微信門店接口 352

14.13.1 上傳圖片 352

14.13.2 創建門店 352

14.13.3 查詢門店信息 353

14.13.4 查詢門店列表 353

14.13.5 修改門店服務信息 353

14.13.6 刪除門店 353

14.13.7 獲取門店類目表 353

14.13.8 設備功能介紹 353

14.14 多客服功能 354

14.14.1 客服管理接口 354

14.14.2 多客服會話控制接口 355

14.14.3 獲取客服聊天記錄接口 356

14.15 搖一搖周邊 356

14.15.1 申請開通搖一搖周邊 356

14.15.2 設備管理 356

14.15.3 頁面管理 357

14.15.4 素材管理 358

14.15.5 配置設備與頁面的關聯關係 358

14.15.6 數據統計 359

14.15.7 HTML5頁面獲取設備信息 359

14.15.8 獲取設備及用戶信息 360

14.15.9 搖一搖紅包 361

14.16 微信連Wi-Fi 361

14.16.1 第三方平台獲取開外掛程式wifi_token 361

14.16.2 Wi-Fi門店管理 362

14.16.3 Wi-Fi設備管理 362

14.16.4 配置聯網方式 363

14.16.5 商家主頁管理 363

14.16.6 Wi-Fi數據統計 364

14.16.7 卡券投放 364

14.17 小程式 364

14.18 異步方法 365

習題 366

第15章 模板訊息 367

15.1 概述 367

15.2 使用規則 367

15.3 申請模板訊息 369

15.3.1 開通模板訊息功能 369

15.3.2 添加訊息模板 370

15.3.3 創建自定義訊息模板 373

15.4 接口介紹 374

15.4.1 設定所屬行業 374

15.4.2 獲取設定的行業信息 374

15.4.3 獲得模板ID(添加模板) 374

15.4.4 獲取模板列表 375

15.4.5 刪除模板 375

15.4.6 傳送模板訊息 375

15.4.7 事件推送 381

15.4.8 異步方法 382

習題 383

第16章 微信網頁授權(OAuth 2.0) 384

16.1 OAuth 2.0簡介 384

16.2 設定微信OAuth回調域名 386

16.3 開發微信OAuth接口 387

16.3.1 創建Controller 387

16.3.2 GetAuthorizeUrl() 方法 388

16.3.3 GetAccessToken() 方法 391

16.3.4 GetUserInfo() 方法 394

16.3.5 RefreshToken() 方法 398

16.3.6 Auth() 方法 398

16.4 異步OAuth接口 399

16.5 調試OAuth 399

16.5.1 調試工具 399

16.5.2 設定 400

16.6 使用SenparcOAuthAttribute實現OAuth自動登錄 403

16.6.1 SenparcOAuthAttribute 定義 403

16.6.2 使用 SenparcOAuthAttribute 406

16.7 解決 OAuth 出現 40029(invalid code)錯誤 408

16.7.1 現象和問題 408

16.7.2 原因 408

16.7.3 解決方案一 411

16.7.4 解決方案二 411

16.7.5 解決方案三 412

16.7.6 解決方案四 412

16.7.7 解決方案總結 414

16.8 一些誤區和注意點 414

16.8.1 每次打開頁面都使用OAuth獲取OpenId 414

16.8.2 認為不使用HTTPS沒有關係 416

16.8.3 在Callback(redirectUrl) 頁面直接輸出頁面 416

16.8.4 簡訊通知包含需要OAuth的網頁(體驗問題) 417

16.8.5 不使用OAuth,而使用選單事件判斷來訪者身份 418

習題 419

第17章 其他幫助類及輔助接口 420

17.1 概述 420

17.2 序列化和JSON相關 420

17.2.1 SerializerHelper 420

17.2.2 WeixinJsonConventer 422

17.2.3 JsonSetting 422

17.3 時間幫助類:DateTimeHelper 423

17.4 加密解密 424

17.4.1 MD5 424

17.4.2 SHA1 425

17.4.3 AES 426

17.5 瀏覽器相關 427

17.5.1 判斷當前網頁是否在瀏覽器內 427

17.6 JS-SDK 429

17.6.1 獲取簽名信息 429

17.6.2 JsSdkUiPackage 430

17.6.3 獲取 SHA1 加密信息 432

17.6.4 卡券相關 433

17.7 地圖及位置 435

17.7.1 LBS位置計算幫助類:GpsHelper 435

17.7.2 百度地圖 435

17.7.3 谷歌地圖 435

習題 436

第18章 微信網頁開發:JS-SDK 437

18.1 概述 437

18.2 簽名 438

18.2.1 通過JsApiTicketContainer獲取jsapi_ticket 438

18.2.2 獲取簽名 439

18.3 JS-SDK使用步驟 439

18.3.1 第一步:綁定域名 439

18.3.2 第二步:引入JS檔案 440

18.3.3 第三步:通過config接口注入許可權驗證配置 441

18.3.4 第四步:通過ready接口處理成功驗證 442

18.3.5 第五步:通過error接口處理失敗驗證 442

18.4 接口調用說明 442

18.5 基礎接口 443

18.6 具體業務接口 443

18.6.1 分享接口 444

18.6.2 圖像接口 446

18.6.3 音頻接口 447

18.6.4 智慧型接口 450

18.6.5 設備信息 451

18.6.6 地理位置 451

18.6.7 搖一搖周邊 452

18.6.8 界面操作 452

18.6.9 微信掃一掃 454

18.6.10 微信小店 454

18.6.11 微信支付 455

18.6.12 微信卡券 455

18.7 參考資料 458

18.7.1 所有選單項列表 458

18.7.2 卡券擴展欄位cardExt說明 459

18.7.3 所有JS接口列表 459

習題 461

第19章 微信支付 462

19.1 支付模式 463

19.1.1 刷卡支付 463

19.1.2 掃碼支付 463

19.1.3 公眾號支付 463

19.1.4 APP支付 463

19.2 申請微信支付 463

19.2.1 流程介紹 463

19.2.2 第一步:申請開戶 464

19.2.3 第二步:小額打款 466

19.2.4 第三步:支付驗證費用 467

19.3 獲取商戶證書 468

19.3.1 接收郵件 468

19.3.2 安裝操作證書 468

19.3.3 下載證書 471

19.3.4 一些注意點 474

19.4 接口規則 475

19.4.1 協定規則 475

19.4.2 參數規定 476

19.4.3 安全規範 479

19.4.4 獲取OpenId 480

19.5 公眾號支付 480

19.5.1 支付場景介紹 480

19.5.2 公眾號後台的配置 482

19.5.3 設定測試目錄 486

19.5.4 商戶後台的配置 487

19.5.5 業務流程 489

19.5.6 HTML5頁面調起支付API 491

19.6 微信支付API 492

19.6.1 統一下單 493

19.6.2 查詢訂單 496

19.6.3 關閉訂單 497

19.6.4 申請退款 498

19.6.5 查詢退款 499

19.6.6 下載對賬單 500

19.6.7 支付結果通知 502

19.6.8 交易保障 503

19.7 企業付款 503

19.7.1 概述 503

19.7.2 企業付款 API 505

19.7.3 查詢企業付款 API 506

19.8 微信支付Demo開發 507

19.8.1 後端開發 507

19.8.2 前端開發 514

19.9 需要注意的一些事 517

19.9.1 關於伺服器SSL版本 517

19.9.2 關於IPv6 518

19.9.3 關於阿里雲主機 518

習題 518

★第四部分 微信小程式

第20章 微信小程式 522

20.1 註冊小程式 523

20.2 管理信息及微信認證 525

20.2.1 信息設定 525

20.2.2 微信認證 527

20.3 準備開發 528

20.3.1 開發參數設定 528

20.3.2 添加開發者和體驗者 532

20.3.3 下載開發工具 532

20.3.4 開發第一個小程式 533

20.3.5 預覽小程式 542

20.3.6 發布小程式 542

20.4 使用SDK進行後端開發 545

20.4.1 Senparc.Weixin.WxOpen.dll 545

20.4.2 對接MessageHandler 545

20.4.3 回復客服訊息 551

20.4.4 獲取二維碼 555

20.4.5 其他高級接口 556

20.5 使用模板訊息 556

20.5.1 概述 556

20.5.2 第一步:選取訊息模板 556

20.5.3 第二步:設定並添加模板 558

20.5.4 第三步:傳送模板訊息 559

20.5.5 申請模板 563

20.6 實現數據請求 565

20.7 登錄接口及用戶信息管理 569

20.7.1 登錄:wx.login 569

20.7.2 登錄狀態維護:SessionContainer 571

20.7.3 驗證:wx.checkSession 573

20.7.4 簽名加密 573

20.7.5 加密數據解密算法 575

20.8 實現WebSocket 通信 578

20.8.1 關於 WebSocket 578

20.8.2 在伺服器上配置 WebSocket 578

20.8.3 使用 Senparc.WebSocket 進行 WebSocket 開發 580

20.9 小程式的微信支付 591

20.10 小程式開發過程中的常見問題 594

20.10.1 使用HTTPS 594

20.10.2 安裝WMSVC證書 596

20.10.3 申請免費的SSL證書 596

20.10.4 解決Unexpected response code: 200 錯誤 601

習題

相關詞條

熱門詞條

聯絡我們