java微信公众号推荐_java对接微信公众号

问题:微信公众号配置URL 请求URL超时

思路:这个可能是我们使用的ip地址是内网的地址, 我在家使用的是路由器提供的ip地址,那这个地址是内网的。总是不能让微信通过域名把信息反给我们。

解决: 通过natapp这个软件,我们可以得到一个免费的映射。

地址:https://natapp.cn/#download

下载软件按照官网文档操作

mac启动后会出现界面,使用出现的域名作为微信公众号配置的地址,然后加上自己的方法就可以。

4645e17ee01eacfc26afd1fd08216858.png

微信配置

aacb34cb7ee97600a3aebdf115397765.png

剩下的就是我们的controller中,主要注意点

1,返回的是字符串

2,返回的是微信给我门的echostr字符串,验证方式可以到微信官网获取

地址:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html

https://developers.weixin.qq.com/doc/oplatform/Third-party_Platforms/Message_Encryption/Message_encryption_and_decryption.html

上边两个地址都可以找到下载的代码,只是比较不好找, [官网上给出的demo,我这里总是出问题,不知道怎么调试。就往上找了一个,贴到下边了]

f0a91f5a02b9cf1b3d6a643a28fdd47c.png

如果不验真,直接返回微信给的echostr就可以

@ResponseBody

@RequestMapping("verify")

public String verifyUrl(String signature, String timestamp, String nonce, String echostr)

{

final boolean b = WeixinCheckoutUtil.checkSignature(signature, timestamp, nonce);

if(b)

{

return echostr;

}

return "0";

}

public classWeixinCheckoutUtil {//与接口配置信息中的Token要一致

private static String token = "ddrsgz";/*** 验证签名

*

*@paramsignature

*@paramtimestamp

*@paramnonce

*@return

*/

public static booleancheckSignature(String signature, String timestamp, String nonce) {

String[] arr= newString[] { token, timestamp, nonce };//将token、timestamp、nonce三个参数进行字典序排序//Arrays.sort(arr);

sort(arr);

StringBuilder content= newStringBuilder();for (int i = 0; i < arr.length; i++) {

content.append(arr[i]);

}

MessageDigest md= null;

String tmpStr= null;try{

md= MessageDigest.getInstance("SHA-1");//将三个参数字符串拼接成一个字符串进行sha1加密

byte[] digest =md.digest(content.toString().getBytes());

tmpStr=byteToStr(digest);

}catch(NoSuchAlgorithmException e) {

e.printStackTrace();

}

content= null;//将sha1加密后的字符串可与signature对比,标识该请求来源于微信

return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;

}/*** 将字节数组转换为十六进制字符串

*

*@parambyteArray

*@return

*/

private static String byteToStr(byte[] byteArray) {

String strDigest= "";for (int i = 0; i < byteArray.length; i++) {

strDigest+=byteToHexStr(byteArray[i]);

}returnstrDigest;

}/*** 将字节转换为十六进制字符串

*

*@parammByte

*@return

*/

private static String byteToHexStr(bytemByte) {char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};char[] tempArr = new char[2];

tempArr[0] = Digit[(mByte >>> 4) & 0X0F];

tempArr[1] = Digit[mByte & 0X0F];

String s= newString(tempArr);returns;

}public static voidsort(String a[]) {for (int i = 0; i < a.length - 1; i++) {for (int j = i + 1; j < a.length; j++) {if (a[j].compareTo(a[i]) < 0) {

String temp=a[i];

a[i]=a[j];

a[j]=temp;

}

}

}

}public static voidmain(String[] args)

{

String verifyMsgSig= "70023ded8e972680e8506161043feaeb1ae6d7c8";

String timeStamp= "1609253670";

String nonce= "584987070";

String echoStr= "160542013663168510";final boolean b =checkSignature(verifyMsgSig, timeStamp, nonce);

System.out.println(b);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值