微信开发者接入php,微信开发系之新手接入指南

首先,开发者在接入时,微信服务器将发送get请求到你填写的url上,此请求携带四个参数,分别signature(微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。),timestamp(时间戳),nonce(随机数),echostr(随机字符串).用 HttpContext.Current.Request.RawUrl可以获取当前请求的原始url,如下图所示:

381908508af20b20913fda1a8607db52.png

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:1. 将token、timestamp、nonce三个参数进行字典序排序

2. 将三个参数字符串拼接成一个字符串进行sha1加密

3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。下面是代码实现。首先,在你的处理程序中(我是新建了一个一般处理程序wx.ashx),判断当前请求的类型,因为接入时,是发送的GET请求,消息处理是发送的POST请求。如下图:这里我对验证url的方法进行封装。///

/// 验证url权限, 接入服务器 ///

///

///

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三个参数进行字典序排序 /// * 将三个参数字符串拼接成一个字符串进行sha1加密 /// * 开发者获得加密后的字符串可与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, "SHA1");

tmpStr = tmpStr.ToLower(); if (tmpStr == signature)

{ return true;

} else

{ return false;

}

}

注:代码VqiRequest.GetQueryString是封装的QueryString请求的方法,使用的时候可以改成QueryString[“”]

处理过程如图:

49358a8af9bd20aaaa785a5d0bdca7a4.png

477562a5a6fc8a621684309f586f839a.png

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

69509de56100165fb5ec945e7b2f0c25.png

32fbd2502a328c18d560eb90fb26c85c.png

排序后的ArrTmp:

fd4dbb882659b7d907ae4c1cc0860f91.png

将三个将三个参数字符串拼接成一个字符串:

5d222f83216f066018234239e9e7d951.png

将tmpStr进行sha1加密,加密后的字符串转换成小写:

3c80f3c30bc49d516a6ff2b14b725b5a.png

然后和签名进行对比,相同则表示验证成功。

7fdca41178902fa9f987a0e62159e5a3.png

验证成功将echoStr返回给微信。

f2dce574ba0ba6d06d19064df218dfb2.png///

/// 根据指定的密码和哈希算法生成一个适合于存储在配置文件中的哈希密码 ///

/// 要进行哈希运算的密码

/// 要使用的哈希算法

/// 经过哈希运算的密码

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();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值