微信token验证

对于刚使刚进行微信开发来说,确实很蒙,不知道如何下手为好,首先啊,就是需要进行微信申请与开通开发人员开发,然后新建一个工程,接口名字无所谓,但端口必须为443或80,项目必须放在外网,或用内网穿透,不强求一定使用域名。此篇主要讲的是微信的token验证。

在微信申请完后,在主页面->基本配置->服务器配置中会有服务器地址,令牌与消息加密秘钥。服务器地址就是你项目所在服务器的ip,加上http://,不需要加端口(此处尝试了好久才发现这个问题),例如:http://12.12.12.12/wx,消息加密秘钥可以先不用管。

 

在微信开发者文档中,token验证实例使用的是Python,确实有点让人头大,不过大致都是一样的,只需要将signature、timestamp、nonce与echostr各自放在@RequestParam中即可,@Api与@ApiOperation这个个注解不用管,这两个注解是swagger2注解,方便在页面调试代码使用的。接口定义代码块如下:

@RestController
@Api(tags = "微信接口")
@RequestMapping("/wx")
public class WXController {

    @Autowired
    WXService wxService;

    @GetMapping("")
    @ApiOperation("微信TOKEN验证接口")
    public String check(@RequestParam("signature") String signature,
                        @RequestParam("timestamp") String timestamp,
                        @RequestParam("nonce") String nonce,
                        @RequestParam("echostr") String echostr){
        return wxService.check(signature, timestamp, nonce, echostr);
    }
}

微信token验证逻辑没有太多的复杂。1.先将TOKEN,timestamp,nonce进行排序,2.将将排列后的字符串数据拼接成一个字符串,在这里使用的是StringBuffer,3.对拼接后的字符串进行SHA1加密,此处使用的是DigestUtils工具包中自带的sha1加密方法,4.将加密后的数据与传过来的signature字段进行比较,如果相同则返回echostr字段,如果不相同,则返回null即可,代码块如下:

public interface WXService {
    String check(String signature,String timestamp,String nonce,String echostr);
}
@Service
public class WXServiceImpl implements WXService  {
    private Logger logger = LoggerFactory.getLogger(WXServiceImpl.class);

    private static final String TOKEN = "TEST_TOKEN";

    /**
     * 微信TOKEN验证
     * @param signature
     * @param timestamp
     * @param nonce
     * @param echostr
     * @return
     */
    @Override
    public String check(String signature,String timestamp,String nonce,String echostr) {

        //排序
        String[] arr = new String[]{TOKEN,timestamp,nonce};
        Arrays.sort(arr);

        //生成字符串
        StringBuffer content = new StringBuffer();
        for(int i = 0; i < arr.length; i++){
            content.append(arr[i]);
        }
        //sha1 加密 java实现消息摘要加密
        String temp = DigestUtils.sha1Hex(content.toString());
        //和微信传递过来的参数进行校验

        if (temp.equals(signature)){
            return echostr;
        }
        return null;
    }
}

微信开发实际上没有太大的难度,主要看自己如何构建项目了,本人仍继续开发中,哈哈哈,继续努力

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值