c#使用微信接口开辟微信门户应用

c#使用微信接口开辟微信门户应用

澳门新萄京 1

 

澳门新萄京 2

此连串前边早已更新了两篇博文了,都以微信支付的最初盘算干活,未来切入大旨,本篇讲解生手接入的步调与办法,大神可从来跳过,也迎接大神戏弄。

自己以店四名义申请了服务号,账号注册后,会在主分界面上呈现你的相关音信,别的给您申请三个二维码的事物,扫描2维码就可以进入集团的微信关心确认对话框,非常便于。如下正是自己申请后的商家账号2维码,能够直接动用扫描。

那个代码也就起头认证的时候用一遍,以后就无须了:

第三个状态:第二种情状我们通晓为布局阶段,那么第两种处境正是确实的开辟阶段了,在那些品级,大家接受用户的新闻(text,click,view
等),然后用户的消息,推送给用户 text,image,网址页面(能够跟你的 url
是三个网址,也能够是第1方网址)。

微信公众号支付种类教程1(调节和测试情状布署)

澳门新萄京 3

 

注册测试帐号,是在微信的网址上做到的,输入 url 和
token,则注明我们早就创立了那么些公众号。

C#微信公众号支付种类教程三(音信体签字及加解密)

相似景色下,假设我们刚刚申请了微功率信号码,能够运用编辑菜单测试一下,根据说明编辑一些美食指南试试。纵然微信说贰四钟头内更新,然而貌似快捷,最快或许1两秒钟就创新了,以为依旧不错的。

/// <summary>
/// 验证微信具名
/// </summary>
/// * 将token、timestamp、nonce多个参数进行字典序排序
/// * 将多个参数字符串拼接成3个字符串举办sha一加密
/// *
开拓者获得加密后的字符串可与signature比较,标记该请求来源于微信。
/// <returns></returns>
private bool CheckSignature()
{
string signature = Request.QueryString[“signature”].ToString();
string timestamp = Request.QueryString[“timestamp”].ToString();
string nonce = Request.QueryString[“nonce”].ToString();
string[] ArrTmp = { Token, timestamp, nonce };
Array.Sort(ArrTmp); //字典排序
string tmpStr = string.Join(“”, ArrTmp);
tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr,
“SHA1”);
tmpStr = tmpStr.ToLower();
if (tmpStr == signature)
{
return true;
}
else
{
return false;
}
}

急需值得注意的是,该值是有失效期。

澳门新萄京,C#微信公众号支付种类教程4(接收普通音讯)

复制代码 代码如下:

}
finally
{
if (sr != null)
sr.Close();
}
}

下面聊到了这些测试的公众号在管理端的呈现,那么只要关注了它,你和谐的微信发出了怎么变动。是的,它出现在了你的订阅号中。话说,壹开首自己感到那个测试号不是服务号呢就不能够享受一些尖端作用。然而,不会的,既然是测试号,就活该让本人测的安心乐意热情洋溢,于是,大家来看看哪些生成菜单。可是,先稍后,大家率先来理清下思路,看看微信公众号的数量流转到底是个怎么回事。如若未有清理那点,你就能跟自家同壹,一天内都摸不清头脑。

微信公众号支付连串教程一(调试环境计划续:vs远程调试)

/// <summary>
        /// 成为开荒者的第一步,验证并相应服务器的多寡
        /// </summary>
        private void Auth()
        {
            string token =
ConfigurationManager.AppSettings[“WeixinToken”];//从布局文件获取Token
            if (string.IsNullOrEmpty(token))
            {
                LogTextHelper.Error(string.Format(“WeixinToken
配置项尚未安插!”));
            }

const string Token = “XXXXX”;//你的token
protected void Page_Load(object sender, EventArgs e)
{
string postStr = “”;
if (Request.HttpMethod.ToLower() == “post”)
{
System.IO.Stream s =
System.Web.HttpContext.Current.Request.InputStream;
byte[] b = new byte[s.Length];
s.Read(b, 0, (int)s.Length);
postStr = System.Text.Encoding.UTF8.GetString(b);
if (!string.IsNullOrEmpty(postStr))
{
//ResponseMsg(postStr);
Response.Write(ResponseMsg(postStr));
Response.End();
}
//WriteLog(“postStr:” + postStr);
}
else
{
Valid();
}
}

3.1 关于 access_token

微信公众平台音信接口的办事原理大概能够这么精通:从用户端到大众号端2个流程是如此的,用户发送音讯到微信服务器,微信服务器将收到到的新闻post到用户接入时填写的url中,在url管理程序中,首先判定音讯的合法性,判定成功后基于音信体的内容做相应的呼应。原理很轻松明白,接触过socket的可能清楚起来更便于。

可是,微信的文档有时真的有一点令人摸不着头脑,关于微信接入的文档写的真的不敢恭维啊。官方文书档案写的首先步是“申请音信接口”,这里是内需填写一个url的,此url用来管理微信发送的新闻的,但微信把url中有关的安顿写在了第三步,一十分大心就把新手给坑了。下边作者根据自个儿的掌握来进行表达。

率先,开拓者在过渡时,微信服务器将发送get请求到您填写的url上,此恳请指引八个参数,分别signature(微信加密签名,signature结合了开拓者填写的token参数和伸手中的timestamp参数、nonce参数。),timestamp(时间戳),nonce(随机数),echostr(随机字符串).用
HttpContext.Current.Request.RawUrl能够获得当前呼吁的原始url,如下图所示:

澳门新萄京 4

开垦者通过验证signature对请求实行校验(上边有校验方式)。若确认此番GET请求来自微信服务器,请原样重返echostr参数内容,则连接生效,成为开垦者成功,不然接入战败。

加密/校验流程如下:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。

下面是代码实现。

首先,在你的处理程序中(我是新建了一个一般处理程序wx.ashx),判断当前请求的类型,因为接入时,是发送的GET请求,消息处理是发送的POST请求。如下图:

这里我对验证url的方法进行封装。

/// <summary>
        /// 验证url权限, 接入服务器
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        public static bool ValidUrl(string token)
        {
            string echoStr = VqiRequest.GetQueryString("echoStr");
            if (CheckSignature(token))
            {
                if (!string.IsNullOrEmpty(echoStr))
                {
                    Utils.ResponseWrite(echoStr);
                    return true;
                }

}
return false;
}

///

/// 验证微信签名
///

/// 将token、timestamp、nonce多个参数举办字典序排序
///
将四个参数字符串拼接成二个字符串进行sha壹加密
/// * 开辟者获得加密后的字符串可与signature比较,标志该请求来源于微信。
///
public static bool CheckSignature(string token)
{
string signature = VqiRequest.GetQueryString(“signature”);
string timestamp = VqiRequest.GetQueryString(“timestamp”);
string nonce = VqiRequest.GetQueryString(“nonce”);
string[] ArrTmp = { token, timestamp, nonce };
Array.Sort(ArrTmp); //字典排序
string tmpStr = string.Join(“”, ArrTmp);
tmpStr = Utils.HashPasswordForStoringInConfigFile(tmpStr, “SHA壹”);
tmpStr = tmpStr.ToLower();
if (tmpStr == signature)
{
return true;
}
else
{
return false;
}
}

 

注:代码VqiRequest.GetQueryString是包裹的QueryString请求的艺术,使用的时候能够改成QueryString[“”]

管理进度如图:

澳门新萄京 5

澳门新萄京 6

将signature,timestamp,nonce八个参数放在数组中,

澳门新萄京 7

澳门新萄京 8

排序后的ArrTmp:

澳门新萄京 9

将多个将多个参数字符串拼接成3个字符串:

澳门新萄京 10

将tmpStr进行sha壹加密,加密后的字符串调换来小写:

澳门新萄京 11

接下来和签署举行自己检查自纠,一样则意味着验证成功。

澳门新萄京 12

注解成功将echoStr重返给微信。

澳门新萄京 13

/// <summary>
        /// 根据指定的密码和哈希算法生成一个适合于存储在配置文件中的哈希密码
        /// </summary>
        /// <param name="str">要进行哈希运算的密码</param>
        /// <param name="type"> 要使用的哈希算法</param>
        /// <returns>经过哈希运算的密码</returns>
        public static string HashPasswordForStoringInConfigFile(string str, string type)
        {
            return FormsAuthentication.HashPasswordForStoringInConfigFile(str, type);
        }

public static void ResponseWrite(string str)
{
HttpContext.Current.Response.Write(str);
HttpContext.Current.Response.End();
}

            Array.Sort(ArrTmp);
            string tmpStr = string.Join(“”, ArrTmp);

private void Valid()
{
string echoStr = Request.QueryString[“echoStr”].ToString();
if (CheckSignature())
{
if (!string.IsNullOrEmpty(echoStr))
{
Response.Write(echoStr);
Response.End();
}
}
}

先是个状态:通过在微信网址上陈设新闻照旧调用微信接口,大家就让大家的万众号绑定了一部分信息:如自定同蒿单。那样,当别人关切群众号的时候,就能够收看自定桐花菜单等新闻;

 C#微信公众号支付连串教程6(被动回复与上传下载多媒体文件)

微信有三种办法的美食指南定义,一种是编辑格局,一种是付出方式,两个互斥,也正是说,一旦大家接纳了开荒格局,就不能够选用编辑格局了,反过来也同等。编辑下的菜系,其实也是能够管理的,不过微信不扶助,感觉很不爽。

 

3:你什么样推送内容给别人

C#微信公众号支付连串教程五(接收事件推送与音信排重)

进入后,你会开掘微信把广大音信的拍卖,分门别类放到不一致的归类里面了。

 

public void ProcessRequest(HttpContext param_context)
{
    if (HttpContext.Current.Request.HttpMethod.ToUpper() == “POST”)
    {
        using (Stream stream =
HttpContext.Current.Request.InputStream)
        {
            Byte[] postBytes = new Byte[stream.Length];
            stream.Read(postBytes, 0, (Int32)stream.Length);
            Handle(Encoding.UTF8.GetString(postBytes));            
        }
    }
    else
    {
        Auth(); 
    }
}

 

/// <summary>
    /// 微信接口。统壹抽出并拍卖新闻的输入。
    /// </summary>
    public class wxapi : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            string postString = string.Empty;
            if (HttpContext.Current.Request.HttpMethod.ToUpper() ==
“POST”)
            {
                using (Stream stream =
HttpContext.Current.Request.InputStream)
                {
                    Byte[] postBytes = new Byte[stream.Length];
                    stream.Read(postBytes, 0, (Int32)stream.Length);
                    postString = Encoding.UTF8.GetString(postBytes);
                }

/// <summary>
/// 写日记(用于追踪)
/// </summary>
private void WriteLog(string strMemo)
{
string filename = Server.MapPath(“/logs/log.txt”);
if (!Directory.Exists(Server.MapPath(“//logs//”)))
Directory.CreateDirectory(“//logs//”);
StreamWriter sr = null;
try
{
if (!File.Exists(filename))
{
sr = File.CreateText(filename);
}
else
{
sr = File.AppendText(filename);
}
sr.WriteLine(strMemo);
}
catch
{

澳门新萄京 14

C#微信公众号支付类别教程二(新手接入指南)

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图