微信开发(一)

本文介绍了如何实现内网穿透,以便腾讯服务器能够访问本地电脑。首先在ngrok.cc注册并下载客户端,通过Sunny-Ngrok启动工具设置隧道。接着,申请微信测试号以获取更多接口权限,配置URL和Token,并编写后台Servlet处理微信的接入验证。文章详细阐述了每个步骤及代码实现。
摘要由CSDN通过智能技术生成

环境搭建

实现内网穿透
			如果腾讯服务器需要访问本地电脑,需要用本机运行穿透软件,
步骤1:在www.ngrok.cc官网注册一个自己的隧道
步骤2:ngrok客户端
步骤3:在客户端打开		Sunny-Ngrok启动工具.bat 这个文件

2.申请微信测试号以获得更多接口权限

步骤1:打开https://mp.weixin.qq.com/
步骤2:点开服务号,点开开发者文档
步骤3:开始开发,接口测试号申请
	注意:申请成功之后,需要扫描测试号二维码进行测试和开发,
步骤4:填写接口配置信息:
	URL:Ngrok给的URl地址
	Token:自定义,需要和程序后台一致
步骤5:编写后台程序:
@WebServlet(urlPatterns = "/wx")
public class WxServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*signature	微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
        timestamp	时间戳
        nonce	随机数
        echostr	随机字符串*/
        String signature = req.getParameter("signature");
        String timestamp = req.getParameter("timestamp");
        String nonce = req.getParameter("nonce");
        String echostr = req.getParameter("echostr");
        //校验证签名
        if (WxService.check(timestamp,nonce,signature)){
            System.out.println("接入成功");
            PrintWriter out = resp.getWriter();
            out.print(echostr);
            out.flush();
            out.close();
        }else{
            System.out.println("接入失败");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("psot");
        /* ServletInputStream is = req.getInputStream();
        byte[] b = new byte[1024];
        int len;
        StringBuilder sb = new StringBuilder();
        while((len=is.read(b))!=-1){
            sb.append(new String(b,0,len));
        }
        System.out.println(sb.toString());*/
    }
}
public class WxService {

    private  final static String TOKEN = "token";

    /**
     * 验证签名
     */
    public static boolean check(String timestamp,String nonce,String signature){
        //将token、timestamp、nonce三个参数进行字典序排序
        String[] strs = new String[] {TOKEN,timestamp,nonce};
        System.out.println("字典排序之前:"+strs.toString());
        Arrays.sort(strs);
        System.out.println("字典排序之后:"+strs.toString());
        //将三个参数字符串拼接成一个字符串进行sha1加密
        String str = strs[0]+strs[1]+strs[2];
        System.out.println("拼成得到字符串:"+str);
        //加密
        String mysig = sha1(str);
        System.out.println("mysig:"+mysig);
        System.out.println("signature:"+signature);
        //开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

        return mysig.equals(signature);
    }

    /**
     * 进行sha1加密
     * @param str
     * @return
     */
    private static String sha1(String str) {
        try {
            //获取一个加密对象,如果写成md5,则获得一个md5的加密对象
            MessageDigest md = MessageDigest.getInstance("sha1");
            //加密
            byte[] digest = md.digest(str.getBytes());
            char[] chars = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
            StringBuilder sb = new StringBuilder();
            //处理加密结果
            for (byte b : digest){
                sb.append(chars[(b>>4)&15]);
                sb.append(chars[b&15]);
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值