微信平台验证url有效性java代码_微信消息接收 验证URL有效性 C#代码示例

官方文档只给出了PHP的示例代码

开发者提交信息后,微信服务器将发送GET请求到填写的URL上,GET请求携带四个参数:

参数描述

signature

微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。

timestamp

时间戳

nonce

随机数

echostr

随机字符串

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

加密/校验流程如下:

1. 将token、timestamp、nonce三个参数进行字典序排序

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

3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

检验signature的PHP示例代码:

private function checkSignature()

{

$signature = $_GET["signature"];

$timestamp = $_GET["timestamp"];

$nonce = $_GET["nonce"];

$token = TOKEN;

$tmpArr = array($token, $timestamp, $nonce);

sort($tmpArr, SORT_STRING);

$tmpStr = implode( $tmpArr );

$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){

return true;

}else{

return false;

}

}

C#代码示例如下:

string signature = "a948c4f99d23c1b6ef78204c1eb867166e2276e8";//context.Request.QueryString["signature"];

string timestamp = "1405665299";//context.Request.QueryString["timestamp"];

string nonce = "42752994";//context.Request.QueryString["nonce"];

string token = "Topevery";

List list = new List();

list.Add(token);

list.Add(timestamp);

list.Add(nonce);

list.Sort();

list.Sort();

string res = string.Join("", list.ToArray());

Byte[] data1ToHash = Encoding.ASCII.GetBytes(res);

byte[] hashvalue1 = ((HashAlgorithm)CryptoConfig.CreateFromName("SHA1")).ComputeHash(data1ToHash);

StringBuilder sb = new StringBuilder();

foreach (byte b in hashvalue1)

{

sb.Append(b.ToString("x2"));

}

//string s = BitConverter.ToString(hashvalue1).Replace("-", string.Empty).ToLower();

if (signature == sb.ToString())

{

Console.Write("OK");

}

else

{

Console.Write("NO");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
企业微信代开发回调验证是指通过验证企业微信接收到的外部事件回调(例如消息、联系人等),确保这些事件确实是由企业微信发送的。下面给出一个用Java代码实现企业微信代开发回调验证示例: ```java import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; public class CallbackVerifier { private static final String TOKEN = "your_token"; // 企业微信后台配置的Token // 验证回调请求的签名是否合法 public static boolean verifySignature(String signature, String timestamp, String nonce) { String[] arr = {TOKEN, timestamp, nonce}; Arrays.sort(arr); // 字典序排序 StringBuilder content = new StringBuilder(); for (String s : arr) { content.append(s); } return signature.equals(sha1(content.toString())); } // 使用SHA1算法计算字符串的哈希值 private static String sha1(String str) { try { MessageDigest digest = MessageDigest.getInstance("SHA-1"); digest.update(str.getBytes()); byte[] bytes = digest.digest(); StringBuilder sb = new StringBuilder(); for (byte b : bytes) { String hex = Integer.toHexString(b & 0xff); if (hex.length() == 1) { sb.append("0"); } sb.append(hex); } return sb.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } // 测试 public static void main(String[] args) { String signature = "signature"; // 从企业微信接收到的请求参数 String timestamp = "timestamp"; String nonce = "nonce"; boolean isValid = verifySignature(signature, timestamp, nonce); System.out.println("是否合法:" + isValid); } } ``` 在上述代码中,首先定义了一个TOKEN常量,即企业微信后台配置的Token。然后定义了一个verifySignature方法,该方法接收从企业微信接收到的signature、timestamp和nonce参数,并通过字典序排序和SHA1算法生成待验证的签名。最后,通过判断生成的签名是否与接收到的signature一致来验证回调请求的合法性。 该示例代码可以直接运行,并且可以将TOKEN替换为实际的Token进行验证

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值