微信开发收获和踩过的坑

1 进入地址 https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

 点击“开始开发” 、“接口测试号申请” 开始进行开发

2.token说明没2小时过期一次,可以存缓存等

https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

 3.配置说明 

      URL

           本机测试:内网穿透 NATAPP(自搜教程,注意本机端口是否开放) 填写 内网穿透完的网址/controller/Index

           如果有正式域名和服务期,注意必须是80或443端口

     Token需要和程序员内的TOKEN保持一致

上代码(引用版本 Senparc.WeiXin.Mp_15.0.6.1    Senparc.WeiXin.Mp.MVCExtensiion_4.1.1)

using Microsoft.AspNetCore.Mvc;
using Senparc.Weixin.MP;
using Senparc.Weixin.MP.Entities.Request;
using Senparc.Weixin.MP.MvcExtension;
using System.IO;
using weixin.Handler;
using weixin.Utils;

  public class WeiXinController : Controller
    {
        [HttpGet]
        [ActionName("Index")]
        public ActionResult Get(PostModel postModel, string echostr)
        {
            if (CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, WXModel.Token))
            {
                return Content(echostr); //返回随机字符串则表示验证通过
            }
            else
            {
                return Content("failed:" + postModel.Signature + "," + Senparc.Weixin.MP.CheckSignature.GetSignature(postModel.Timestamp, postModel.Nonce, WXModel.Token) + "。" +
                    "如果你在浏览器中看到这句话,说明此地址可以被作为微信公众账号后台的Url,请注意保持Token一致。");
            }
        }

        /// <summary>
        /// 用户发送消息后,微信平台自动Post一个请求到这里,并等待响应XML。
        /// PS:此方法为简化方法,效果与OldPost一致。
        /// v0.8之后的版本可以结合Senparc.Weixin.MP.MvcExtension扩展包,使用WeixinResult,见MiniPost方法。
        /// </summary>
        [HttpPost]
        [ActionName("Index")]
        public ActionResult Post(PostModel postModel)
        {
            if (!CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, WXModel.Token))
            {
                return Content("参数错误!");
            }

            postModel.Token = WXModel.Token;//根据自己后台的设置保持一致
            postModel.EncodingAESKey = WXModel.EncodingAESKey;//根据自己后台的设置保持一致
            postModel.AppId = WXModel.appId;//根据自己后台的设置保持一致

            //自定义MessageHandler,对微信请求的详细判断操作都在这里面。
            //获取request的响应
            var memoryStream = new MemoryStream();
            Request.Body.CopyTo(memoryStream);

            var messageHandler = new CustomMessageHandler(memoryStream, postModel);//接收消息
            messageHandler.Execute();//执行微信处理过程

            if (messageHandler.ResponseDocument == null) {

                return Content("");//返回结果
            }
            return Content(messageHandler.ResponseDocument.ToString());//返回结果

        }
    }

二:配置菜单

        注意APPID和appsecret必须正确。随便一个地方调用创建菜单的方法,即可创建

        参考 https://developers.weixin.qq.com/doc/offiaccount/Custom_Menus/Creating_Custom-Defined_Menu.html 

      public static string MenuCreate(string MenuJson,string token)
        {
            string setMenuUrl = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token={0}";
            setMenuUrl = string.Format(setMenuUrl, token);
            string respText = HttpUtility.SendPostHttpRequest(setMenuUrl, "post", MenuJson);//SendGetHttpRequest(, );
            //         gatewayStatusEntity dictResult = JsonHelper.JSONToObject<gatewayStatusEntity>(Encoding.UTF8.GetString(e1.ApplicationMessage.Payload));
            Dictionary<string, object> respDic = JsonHelper.JSONToObject<Dictionary<string, object>>(respText);
            return respDic["errcode"].ToString();//返回0发布成功
        }

 public static string SendPostHttpRequest(string uri, string contentType, string requestData)
        {
            WebRequest request = WebRequest.Create(uri);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";

            //将字符串数据转化为字节串,这也是POST请求与GET请求区别的地方
            byte[] buffer = Encoding.UTF8.GetBytes(requestData);

            //用于将数据写入Internet资源
            Stream stream = request.GetRequestStream();
            stream.Write(buffer, 0, buffer.Length);
            request.ContentLength = buffer.Length;

            WebResponse response = request.GetResponse();

            //从网络资源中返回数据流
            stream = response.GetResponseStream();

            StreamReader sr = new StreamReader(stream, Encoding.UTF8);

            //将数据流转换文字符串
            string result = sr.ReadToEnd();

            //关闭流数据
            stream.Close();
            sr.Close();

            return result;
        }

3.处理接收到的信息

    微信发送消息默认走填写的验证地址的post方法

   

using Senparc.Weixin.MP.Entities;
using Senparc.Weixin.MP.Entities.Request;
using Senparc.Weixin.MP.MessageHandlers;
using Senparc.Weixin.Context;
using Bootstrap.DataAccess.Sytem;
using Bootstrap.DataAccess.System;
using System.Text;
using weixin.Utils;

namespace weixin.Handler
{
    public partial class CustomMessageHandler : MessageHandler<MessageContext<IRequestMessageBase, IResponseMessageBase>>
    {
        public CustomMessageHandler(Stream inputStream, PostModel postModel) : base(inputStream, postModel)
        {
        }

        public CustomMessageHandler(RequestMessageBase requestMessage) : base(requestMessage)
        {
        }

        public override IResponseMessageBase OnEventRequest(IRequestMessageEventBase requestMessage)
        {
            return base.OnEventRequest(requestMessage);
        }

        public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
        {
            var responseMessage = this.CreateResponseMessage<ResponseMessageText>();

            string openid = requestMessage.FromUserName;
            //查询openID是否在平台中存在
            //获取公司
            StringBuilder sb = new StringBuilder("欢迎关注微信平台!请登录!");
            sb.Append("<a href =\""+ WXModel.Domain + "?openId="+ openid + "\">登录</a>");
            responseMessage.Content = sb.ToString();
            return responseMessage;
        }

        public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
        {
            var responseMessage = base.CreateResponseMessage<ResponseMessageText>();
            if (!"1".Equals(requestMessage.Content))
            {
                responseMessage.Content = "本平台不识别此信息";
            }
            else
            {
                string openid = requestMessage.FromUserName;
                string loginurl = "<a href =\"" + WXModel.Domain + "?openId=" + openid + "\">登录</a>";
                responseMessage.Content = "欢迎关注微信平台!" + loginurl;
            }
            return responseMessage;
        }
    }
}
 

4发送模板消息

   测试号页面,模板消息接口  新增测试模板 新增模板

{{first.DATA}}

内容1:{{keyword1.DATA}}

  所有的变量都是{{.Data}}的格式,上面的实例代表变量first  keyword1

发送消息代码

        public ActionResult SendMsg(string 接收消息用户的openid)
        {

            ///发送模版消息
            string url = string.Format("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={0}", AccessTokenHelp.AccessToken);
            string postData = "{ \"touser\":\"" + openId + "\"," +
                "\"template_id\":\"模板ID\"," +
                "\"url\":\"www.baidu.com\"," +
                "\"data\":{" +
                "\"first\":{" +
                "\"value\":\"亲,宝贝已经启程了,好想快点来到你身边!\"," +
                "\"color\":\"#173177\"}," +
                "\"keyword1\":{" +
                "\"value\":\"201408189987\"," +
                "\"color\":\"#173177\"" +
                "},\"keyword2\":{" +
                "\"value\":\"圆通快递\"," +
                "\"color\":\"#173177\"}," +
                "\"keyword3\":{" +
                "\"value\":\"6522238281\"," +
                "\"color\":\"#173177\"}," +
                  "\"keyword4\":{" +
                "\"value\":\"6522238281\"," +
                "\"color\":\"#173177\"}," +
                "\"keyword5\":{" +
                "\"value\":\"6522238281\"," +
                "\"color\":\"#173177\"}" +
                "} }";

            string respText = HttpUtility.SendPostHttpRequest(url, "", postData);

            return View();
        }

 

 

以上就是最近开发微信的收获

 

1.开发过程中遇到的问题

    穿透失败,原因本地的端口权限不足

    菜单配置失败,APPID错误

    发送模板消息变量无法带入,原因没有严格按照格式

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET 微信开发源码是为了在ASP.NET平台上实现微信开发而提供的源代码。微信开发是指利用微信提供的开发接口和功能,开发出基于微信平台的应用程序或网站,以实现与微信用户的交互和功能扩展。 ASP.NET是一种用于构建Web应用程序和网站的开发框架,而微信开发源码则是在ASP.NET框架下,基于微信公众平台或企业微信开发接口,实现了与微信的集成和功能开发。它包括了与微信平台的交互代码、消息处理代码、用户验证代码、素材管理代码等一系列功能模块的实现。 使用ASP.NET微信开发源码,可以方便地实现微信公众号或企业微信的开发需求,例如消息回复、菜单管理、用户管理、素材上传下载等功能。借助ASP.NET框架的优势,可以高效地处理微信用户的请求,并根据需要进行业务逻辑处理和数据交互。 ASP.NET微信开发源码通常会包含一个可扩展的框架,使开发者能够快速搭建一个与微信平台对接的应用程序。开发者可以根据自己的需求和业务场景,对源码进行定制和扩展,以实现更复杂的功能或个性化的交互体验。 在使用ASP.NET微信开发源码进行微信开发时,需要了解微信平台的开发接口和规范,并熟悉ASP.NET框架的开发方式与特点。通过合理利用ASP.NET微信开发源码,可以快速、高效地开发出符合微信用户需求的应用程序,并与微信平台进行无缝对接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值