微信公众号开发全攻略:订阅号与服务号区别、注册流程及代码示例

gongzhonghao 的头像

在这里插入图片描述

使用微信公众号时,你是否常遇到权限和调试上的困扰?其实,只要掌握了正确的方法,这些问题就变得容易解决了。接下来,我会逐一为大家详细介绍。

个人订阅号权限受限

img

个人订阅号的使用受到不少限制,诸如不能使用二维码生成、网页授权、自定义菜单和微信支付等高级功能。以开设电商类的个人订阅号为例,因为缺少微信支付接口,用户无法在号内直接下单和支付,这给经营带来了诸多不便。不少个人运营者满怀希望地开始尝试,却因权限不足而遭遇发展瓶颈。

image.png

测试公众号来救场

image.png

在微信公众平台上,你可以申请一个测试账号,它比普通个人订阅号功能更丰富。申请过程并不繁琐,只需在指定页面扫描二维码进行登录。登录之后,你就能立刻查看腾讯分配给你的账号信息。有了这个测试账号,我们就能安心地搭建开发环境进行测试,就像拥有了一个微型实验基地,可以尽情地尝试新的点子。

公众号开发调试之痛

在开发微信公众号应用时,调试阶段特别麻烦。每次添加新功能,都得将其上传到公网服务器上测试。用户发起请求后,先到微信服务器,再转至我们服务器。为确保双方网络顺畅沟通,服务器需能被外部网络访问。小型创业团队面临的问题之一是,公网服务器的成本相对较高,而且频繁进行部署还会耗费大量的人力资源。

第三方软件来帮忙

在这里插入图片描述

常用内网穿透工具对比

在这里插入图片描述

natapp、ngrok和dingding都是常用的内网穿透软件。我试过这些软件,发现只有natapp适合做微信公众号的开发。用natapp,可以保证和微信服务器的稳定连接,不会出现连接中断的情况。不少小团队在尝试了多种软件后,觉得natapp最为便捷,有效解决了开发中的问题。

公众号接入微信平台

@Controller
@RequestMapping(value = "wx")
public class WeiController{
    /**
     * 公众号appid
     */
    @Value("${wx.appid}")
    private  String appid;
    /**
     * 公众号appSecret
     */
    @Value("${wx.secret}")
    private  String secret;
    /**
     * 微信消息接收和token验证
     * @param request
     * @param response
     * @throws IOException
     */
    @GetMapping("/weChatToken")
    public  void weChat(HttpServletRequest request, HttpServletResponse response) {
        boolean isGet = request.getMethod().toLowerCase().equals("get");
        if (isGet) {
            // 微信加密签名
            String signature = request.getParameter("signature");
            // 时间戳
            String timestamp = request.getParameter("timestamp");
            // 随机数
            String nonce = request.getParameter("nonce");
            // 随机字符串
            String echostr = request.getParameter("echostr");
            // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
            if (signature != null && CheckoutUtil.checkSignature(signature, timestamp, nonce)) {
                try {
                    PrintWriter print = response.getWriter();
                    print.write(echostr);
                    print.flush();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

资料上传完成后,微信平台会将GET指令发送至预设的服务器地址,并附带相关信息。若该请求确实来自微信平台,系统将直接返回echostr参数的值,表示接入成功,开发者身份得以确认;若非微信平台发起,接入尝试将不会成功。进入微信测试公众号的管理界面,准确输入外网映射的网址和代码中的token声明,操作完毕后,公众号即可与微信服务器进行无障碍沟通,这表明接入已经顺利完成。

微信网页授权得信息

public class CheckoutUtil {
    public static  String token  = "999";
    /**
     * 验证签名
     * @param signature
     * @param timestamp
     * @param nonce
     * @return
     */
    public static boolean checkSignature(String signature, String timestamp, String nonce) {
        String[] arr = new String[] { token, timestamp, nonce };
        // 将token、timestamp、nonce三个参数进行字典序排序
        Arrays.sort(arr);
        StringBuilder content = new StringBuilder();
        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 = byteToHex(digest );
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
        return tmpStr != null ? tmpStr.equals(signature) : false;
    }
    
    /**
     * 十六进制字节数组转为字符串
     * @param hash
     * @return
     */
    private static String byteToHex(final byte[] hash) {
        Formatter formatter = new Formatter();
        for (byte b : hash) {
            formatter.format("x", b);
        }
        String result = formatter.toString();
        formatter.close();
        return result;
    }

用户若在微信上查看其他网站,公众号便能利用微信网页授权手段取得用户的基本信息,包括openId等,之后便可以进行相关业务操作。比如,生活服务类的公众号在掌握了用户信息后,可为用户提供个性化的服务推荐,既让用户感到便捷,又增强了商家的营销成果。

开发微信公众号时,大家主要关心哪些功能权限?若您觉得这篇文章对您有所启发,不妨点个赞,并将它分享出去!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bPMvNxRI-1608702695943)(typora-user-imagesimage-20201214105001081.png)]

gongzhonghao 的头像

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

网站建设杨老师

1.5M Followers

关注“网站建设杨老师”,获取免费专业咨询服务,开启您的数字化之旅!