zoukankan      html  css  js  c++  java
  • 微信公众号

    前期准备

    准备如下

    个人只能申请订阅号,而且不能进行微信认证,但是可以申请公众平台测试账号,拥有全部的权限,(首页—>开发者工具—>公众平台测试账号)

    接入

    在公网部署好一个web项目,一定是80或者443端口。接入指南

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.wx.aeolian</groupId>
        <artifactId>com.wx.aeolian</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <!--servlet-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
            <!--jsp-->
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
                <version>2.2</version>
                <scope>provided</scope>
            </dependency>
            <!--jstl-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
                <scope>runtime</scope>
            </dependency>
            <!--加密工具-->
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>1.12</version>
            </dependency>
        </dependencies>
    
        <!--编码方式UTF-8-->
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.basedir>D:ProgramFiles_QYIdeaProjectsWxAeolian</project.basedir>
        </properties>
    
        <build>
            <plugins>
                <!--编译Compile,使用JDK1.7开发-->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.3</version>
                    <configuration>
                        <source>1.7</source>
                        <target>1.7</target>
                    </configuration>
                </plugin>
                <!--打包时跳过测试-->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.18.1</version>
                    <configuration>
                        <skipTests>true</skipTests>
                    </configuration>
                </plugin>
                <!--Tomcat-->
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <path>/${project.artifactId}</path>
                    </configuration>
                </plugin>
    
            </plugins>
        </build>
    </project>

    核心Servlet

    package com.aeolian.core;
    
    import org.apache.commons.codec.digest.DigestUtils;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.*;
    
    @WebServlet("/wxCore")
    public class WxServlet extends HttpServlet{
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
            try {
                doPost(req,resp);
            } catch (ServletException e) {
                e.printStackTrace();
            }
        }
    
        /*1)将token、timestamp、nonce三个参数进行字典序排序
         *2)将三个参数字符串拼接成一个字符串进行sha1加密
         *3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信*/
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String signature = req.getParameter("signature");
            String timestamp = req.getParameter("timestamp");
            String nonce = req.getParameter("nonce");
            String echostr = req.getParameter("echostr");
            String token = "微信公众平台中设置的token";    //微信公众平台中配置
            /*1)将token、timestamp、nonce三个参数进行字典序排序*/
            String[] str = { token, timestamp, nonce };
            Arrays.sort(str); // 字典序排序
            String sortStr = str[0] + str[1] + str[2];  //排序后拼接
            /*2)将三个参数字符串拼接成一个字符串进行sha1加密*/
            String digest = DigestUtils.sha1Hex(sortStr);
    
            /*System.out.println("signature: "+signature);
            System.out.println("timestamp: "+timestamp);
            System.out.println("nonce: "+nonce);
            System.out.println("echostr: "+echostr);
            System.out.println("nosha1: "+sortStr);
            System.out.println("digest: "+digest);*/
            /*3)校验*/
            String result = "";
            if (digest.equals(signature)){   //与signature对比,标识该请求来源于微信
                result = echostr;  //如果是,返回echostr
            }
    
            resp.resetBuffer();
            resp.setContentType("text/html;charset=utf-8");
            resp.getOutputStream().write(result.getBytes("utf-8"));
            resp.getOutputStream().flush();
        }
    }

    打成war包是注意事项,在Artifacts中右击Available Elements-》put into /WEB-INF/lib,否则打成的包中没有pom引入的jar

  • 相关阅读:
    关于C的一些理解
    Linux下/proc目录简介
    python学习链接
    “段寄存器”的故事[转](彻底搞清内存段/elf段/实模式保护模式以及段寄存器)
    内核态与用户态
    bzoj1087: [SCOI2005]互不侵犯King 状压dp
    bzoj1007: [HNOI2008]水平可见直线 单调栈维护凸壳
    bzoj1015: [JSOI2008]星球大战starwar
    bzoj1002: [FJOI2007]轮状病毒 生成树计数
    bzoj1013: [JSOI2008]球形空间产生器sphere
  • 原文地址:https://www.cnblogs.com/aeolian/p/10373046.html
Copyright © 2011-2022 走看看