C#微信公衆號接口開發,靈活利用網頁受權、帶參數二維碼、模板消息,提高用戶體驗之完成用戶綁定我的微信及驗證碼獲取

1、前言html

當下微信公衆號幾乎已是每一個公司必備的,可是大部分微信公衆帳號用戶體驗都欠佳,特別是涉及到用戶綁定等,須要用戶進行復雜的操做才能夠和網站綁定,或者不少公司直接不綁定,而是每次都讓用戶填寫帳號密碼。做爲微信接口開發人員咱們知道網頁受權能夠用做微信網頁用做安全登陸,帶參數二維碼的使用用做記錄用戶來源,模板消息用做購物消費等消息的通知,可是不多看到有綜合利用這些高級接口作出體驗比較好的公衆帳號,這裏分享一些我開發的用戶綁定和驗證碼的一些心得。所須要的接口有基礎的回覆、網頁受權、帶參數二維碼、模板消息。因此這裏所講的必須是認證服務號(沒辦法騰訊接口限制真的好爲難咱們這些開發人員)。git

2、需求github

1.pc網站綁定我的微信帳號2.pc網站獲取驗證碼(用戶註冊即綁定、找回密碼等場景)數據庫

3、實現流程及與傳統方法對比json

1.pc網站綁定我的微信帳號:api

傳統的方法--是輸入帳號和密碼,而後經過網頁受權綁定,下次能夠免登錄安全

利用微信接口--方法一、網頁受權服務器

在pc端生成一個網頁受權的二維碼:url+id=32132312其中id爲用戶的惟一標識,用微信掃描 保存id和openid在對應的用戶表即綁定成功微信

       方法二、申請帶參數二維碼+網頁受權微信開發

在經過微信接口申請臨時的帶參數二位碼顯示在pc網頁上,所帶參數是根據登陸用戶生成的惟一標識一串數字 ,當用戶掃描的時候微信回覆的參數即爲這串數字,將這串數字和openid保存在數據庫對應的用戶表中便可。

注意:在這建議使用第2中方法:第1中方法是直接在網頁中綁定,用戶可能沒有關注咱們的公衆帳號,而第二種方法當用戶沒有關注的時候提示先關注,關注完以後自動綁定,而且提示成功,若是關注也是直接跳轉到咱們的公衆帳號

4、用戶綁定流程圖

1.網頁受權綁定的流程圖:

2.帶參數二維碼綁定

 5、用戶綁定實現方法主要代碼

這裏以綁定第二種方法爲例(網頁受權參考我以前文章C#微信公衆號開發-高級接口-之網頁受權oauth2.0獲取用戶基本信息(二)

1.首先用戶登陸pc網站 獲取到惟一標識也能夠即時生成,而後以惟一標識爲參數向微信服務器申請帶參數的二維碼方法詳情可參照我以前的文章:C#微信公衆號接口開發實例-高級接口-申請帶參數的二維碼

主要代碼獲取ticket 其中 scene_id即爲用戶惟一標識 二維碼連接https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET 嵌入到網頁中便可

 1 /// <summary>
 2 /// 調用微信接口獲取帶參數臨時二維碼的ticket
 3 /// 使用方法:https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET
 4 /// </summary>
 5 /// <param name="scene_id">二維碼帶的參數</param>
 6 /// <returns>json:ticket:換取二維碼的憑證,expire_seconds:憑證有效時間,url:二維碼解析後的地址。此處返回ticket 不然返回錯誤碼</returns>
 7 public string GetQrcode(string appid, string appsecret, Int32 scene_id)
 8 {
 9     string QrcodeUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={0}";//WxQrcodeAPI接口
10     string AccessToken = getTokenSession(appid, appsecret);//拉取全局的AccessToken
11     QrcodeUrl = string.Format(QrcodeUrl, AccessToken);
12     string PostJson = "{\"expire_seconds\": 1800, \"action_name\": \"QR_SCENE\", \"action_info\": {\"scene\": {\"scene_id\": " + scene_id + "}}}";
13     string ReText = WebRequestPostOrGet(QrcodeUrl, PostJson);//post提交
14     Dictionary<string, object> reDic = (Dictionary<string, object>)Jss.DeserializeObject(ReText);
15     if (reDic.ContainsKey("ticket"))
16     {
17         return reDic["ticket"].ToString();//成功
18     }
19     else
20     {
21         return reDic["errcode"].ToString();//返回錯誤碼
22     }
23 }

2.用戶掃描帶參數二維碼(此處爲臨時二維碼),非關注用戶提示關注,關注後直接綁定,關注用戶能夠直接綁定,原理是掃描帶參數二維碼,微信會接收到xml形式的數據 可參考我以前文章C#/ASP.NET MVC微信公衆號接口開發之從零開發(二) 接收微信消息而且解析XML(附源碼)

解析獲取到scene_id由於消息也帶用戶信息openid 將scene_id和openid保存到用戶表即完成主要代碼以下:

 1 switch (WxXmlModel.Event)
 2 {
 3     case "subscribe":
 4         if (string.IsNullOrEmpty(WxXmlModel.EventKey))
 5         {
 6             XML = sohovan.com.wxapi.ResponseMessage.GetText(WxXmlModel.FromUserName, WxXmlModel.ToUserName,"關注成功");
 7         }
 8         else
 9         {
10             XML = sohovan.com.wxapi.ResponseMessage.SubScanQrcode(WxXmlModel.FromUserName, WxXmlModel.ToUserName, WxXmlModel.EventKey);//掃描帶參數二維碼先關注後推送事件
11         }
12         break;
13     case "SCAN":
14         XML = sohovan.com.wxapi.ResponseMessage.ScanQrcode(WxXmlModel.FromUserName, WxXmlModel.ToUserName, WxXmlModel.EventKey);//掃描帶參數二維碼已關注 直接推送事件
15         break;
16 }

掃描分爲兩種一種是先關注後進入公衆號(Event=="subscribe")還有一種是直接進入公衆號 (Event="SCAN") 其中FromUserName是用戶的openid微信惟一標識 此時將openid 和scene_id保存到對應用戶表便可須要

注意的是關注掃描中EventKey爲qrscene_加標識 若是標識爲321312那麼EventKey="qrscene_321312",已經關注的EventKey="321312"。

6、模板消息獲取驗證碼實現方法

上一步已經將pc網站和微信綁定,若是咱們忘記密碼,傳統的作法是能夠經過短信找回,弊端是對於手機號碼常常換的用戶可能找不回,相信對於大部分年輕人來講換10個手機號碼也不會去換一個QQ好一個微信號,這個時候咱們經過微信找回咱們的密碼是相對安全的

實現方法不少,好比在微信中修改,可是麻煩(須要查找到公衆帳號,找到對應的按鈕等等),這裏能夠利用帶參數二維碼用戶掃描pc網站的方式獲取,相似上面的方法,而此時利用微信模板消息,體驗又更加方便。

獲取驗證碼流程圖:

這個過程就是和短信相似,可是我以爲不管是從經濟仍是用營銷上考慮都是好處多多,比較若是量大,每月驗證各類東西以萬條算的網站短信費用就能夠省不小一筆,同時還能夠爲微信引流一舉多得。

模板消息實現可參考:C#微信公衆號開發-高級接口-之模板消息開發,附源碼

 

本文版權歸做者(謝俊)和博客園全部,歡迎轉載,轉載請標明出處。

原文地址:http://www.cnblogs.com/net-xiejun/

微信開發羣C#.NETWEB程序開發交流

完整源碼下載:https://github.com/xiejun-net/weixin

公衆帳號:

相關文章
相關標籤/搜索