勖日陽光 發表於 2021-10-5 19:08:00

C#微信公众号开发

<h2 id="c微信公众号开发">C#微信公众号开发</h2>
<h3 id="一-准备">一》 准备</h3>
<ul>
<li>
<p>【开发文档】</p>
</li>
<li>
<p>【微信公众号测试接口】</p>
</li>
</ul>
<p>用自己的微信扫码登陆,然后就可以获取就有了appId 和 appsecret。<br>
<img src="https://img-blog.csdnimg.cn/5b54e5cdfdf346faa845c46b90952b5e.png" alt="" loading="lazy"></p>
<h3 id="二获取access_token">二》获取access_token</h3>
<p>打开 微信公众平台接口调试工具</p>
<p><img src="https://img-blog.csdnimg.cn/aa5468e8d76a4451982d2608524e9ccc.png" alt="" loading="lazy"><br>
这个access_token是通过appID 和 appsecret来生成的,access_token 有效期为 <strong>两个小时</strong>(7200秒),一天可以获取2000次,只要是向微信服务器发送请求都需要带上这个access_token</p>
<pre><code class="language-csharp">/// &lt;summary&gt;
    /// AccessToken帮助类
    /// &lt;/summary&gt;
    public class AccessTokenHelp
    {
      //填写自己微信的秘钥
      private static string appId = System.Configuration.ConfigurationManager.AppSettings["WeChatAppId"];
      private static string appSecret = System.Configuration.ConfigurationManager.AppSettings["WeChatAppSecret"];

      private static DateTime GetAccessToken_Time;
      /// &lt;summary&gt;
      /// 过期时间为7200秒
      /// &lt;/summary&gt;
      private static int Expires_Period = 7200;
      /// &lt;summary&gt;
      ///
      /// &lt;/summary&gt;
      private static string mAccessToken;
      /// &lt;summary&gt;
      ///
      /// &lt;/summary&gt;
      public static string AccessToken
      {
            get
            {
                //如果为空,或者过期,需要重新获取
                if (string.IsNullOrEmpty(mAccessToken) || HasExpired())
                {
                  //获取
                  mAccessToken = GetAccessToken(appId, appSecret);
                }
                return mAccessToken;
            }
      }
      /// &lt;summary&gt;
      ///
      /// &lt;/summary&gt;
      /// &lt;param name="appId"&gt;&lt;/param&gt;
      /// &lt;param name="appSecret"&gt;&lt;/param&gt;
      /// &lt;returns&gt;&lt;/returns&gt;
      private static string GetAccessToken(string appId, string appSecret)
      {
            string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&amp;appid={0}&amp;secret={1}", appId, appSecret);
            string result = HttpUtility.GetData(url);

            XDocument doc = CommonHelp.ParseJsonToXML(result, "root");
            XElement root = doc.Root;
            if (root != null)
            {
                XElement access_token = root.Element("access_token");
                if (access_token != null)
                {
                  GetAccessToken_Time = DateTime.Now;
                  if (root.Element("expires_in") != null)
                  {
                        Expires_Period = int.Parse(root.Element("expires_in").Value);
                  }
                  return access_token.Value;
                }
                else
                {
                  GetAccessToken_Time = DateTime.MinValue;
                }
            }
            return null;
      }

      /// &lt;summary&gt;
      /// 判断Access_token是否过期
      /// &lt;/summary&gt;
      /// &lt;returns&gt;bool&lt;/returns&gt;
      private static bool HasExpired()
      {
            if (GetAccessToken_Time != null)
            {
                //过期时间,允许有一定的误差,一分钟。获取时间消耗
                if (DateTime.Now &gt; GetAccessToken_Time.AddSeconds(Expires_Period).AddSeconds(-60))
                {
                  return true;
                }
            }
            return false;
      }
</code></pre>
<p>通过<code>string access_token = Common.AccessTokenHelp.AccessToken;</code> 就可以获取accesstoken</p>
<h3 id="三创建菜单">三》创建菜单</h3>
<p>通过测试接口来处理<br>
<img src="https://img-blog.csdnimg.cn/eed2dd91747f4a6e9957c23c2bb072fa.png" alt="" loading="lazy"><img src="https://img-blog.csdnimg.cn/f814b078e18a4aa1a32a657ba5775be8.png" alt="" loading="lazy"></p>
<pre><code class="language-csharp">{
    "button": [
      {
            "name": "迷恋自留地",
            "type": "view",
            "url": "https://hunji.xyz"//点击菜单访问网址
      },
      {
            "name": "防伪扫描",
            "type": "scancode_push",
            "key": "FangweiScan"      //点击调用微信二维码扫描,是网址直接访问,是文本则显示文本内容
      },
      {
            "name": "订单查询",
            "type": "click",
            "key": "OrderQuery"       //点击出发click事件,向我们配置的API地址进行请求
      }
    ]
}
</code></pre>
<p>扫码关注公众号就ok,更多的按钮参考:微信开发文档<br>
<img src="https://img-blog.csdnimg.cn/f9640d29f59845bc981d198a75c4ca21.png" alt="" loading="lazy"><br>
请求成功后,取消微信号关注并退出微信,重新进入关注,应该就可以看到添加好的文档了。</p>
<p>想删除重新创建菜单,调用菜单删除就可以了。</p>
<p><img src="https://img-blog.csdnimg.cn/92770aad11974886bf5302ce680e943f.png" alt="" loading="lazy"></p>
<h3 id="四开发接口处理文本和事件">四》开发接口、处理文本和事件</h3>
<p>当用户使用微信发送消息或者单击菜单出发事件,就会向配置的API发送请求,API进行处理响应 :消息回复参考文档</p>
<p>具体的代码实现请查阅下篇文章,在这里先埋个坑</p>
<h3 id="五发送模板消息">五》发送模板消息</h3>
<p>首先在后台添加测试的模板,获取到消息模板的id</p>
<p><img src="https://img-blog.csdnimg.cn/7f976098689a40aea8f63e356f6c1545.png" alt="" loading="lazy"><br>
<img src="https://img-blog.csdnimg.cn/8bcc0e3085784a9ead4dea96d28ac870.png" alt="" loading="lazy"><br>
<img src="https://img-blog.csdnimg.cn/d679b99e9b984b4290906ba49bf23a84.png" alt="" loading="lazy"></p>
<p><img src="https://img-blog.csdnimg.cn/20210517111144223.png" alt="我的公众号" loading="lazy"></p>
<p><img src="https://gitee.com/Pridejoy/Bing/raw/master/2021/09/30.jpg" alt="" loading="lazy"><br>
参考链接</p><br><br>
来源:https://www.cnblogs.com/netcore5/p/15369291.html
頁: [1]
查看完整版本: C#微信公众号开发