关于微信公众平台:微信公众号接入

35次阅读

共计 2445 个字符,预计需要花费 7 分钟才能阅读完成。

一、背景

最近我的项目中因为某些起因,波及到了 微信公众号 的开发,此处简略记录下微信公众号的接入。

二、前置条件

1、须要有一个能够在外网能够拜访的域名
2、本地开发,须要将内网环境穿透到外网能够拜访。
3、须要有一个公众号。

留神:
1、内网穿透 外网域名 咱们能够通过 natapp 来购买实现。

三、通过 natapp 内网穿透和域名购买

1、购买隧道


此处依据本人的状况,购买一个适宜本人的隧道。

前期将会把咱们本人的本地端口,映射到一个外网能够拜访的网址上。

2、购买一个二级域名(如果本人有能够疏忽)


留神
1、此处购买一个 二级域名,如果本人有 域名,能够不必购买。

3、将域名绑定到购买的隧道上

4、下载 natapp 客户端

https://natapp.cn/#download
此处须要依据本人的操作系统,下载对应的客户端。

5、启动 natapp


此处的 authtoken 的值为 咱们本人购买的隧道的值。

四、编写微信服务端接入验证

1、填写服务器配置

门路:开发 -> 根本配置

2、编写服务端验证接入代码


微信服务器地址 URL:这个能够先记下来,上面会告知在那个中央配置
咱们本人接入微信公众号有些验证比拟麻烦,此处借助网上的开源框架 weixin-java-mp 这个程序开发

1、引入 weixin-java-mp.jar

<dependency>
    <groupId>com.github.binarywang</groupId>
    <artifactId>weixin-java-mp</artifactId>
    <version>4.0.0</version>
</dependency>

2、进行 mp 配置

@Configuration
public class WxMpConfiguration {

    @Autowired
    private WxMpProperties wxMpProperties;

    @Bean
    public WxMpService wxMpService() {WxMpServiceImpl wxMpService = new WxMpServiceImpl();
        wxMpService.setWxMpConfigStorage(wxMpConfigStorage());
        // 设置多个微信公众号的配置
        // wxMpService.setMultiConfigStorages();
        return wxMpService;
    }

    /**
     * 这个中央的配置是保留在本地,生产环境须要本人扩大,能够保留在 Redis 中等等
     *
     * @return WxMpConfigStorage
     */
    public WxMpConfigStorage wxMpConfigStorage() {WxMpDefaultConfigImpl storage = new WxMpDefaultConfigImpl();
        storage.setAppId(wxMpProperties.getAppId());
        storage.setSecret(wxMpProperties.getAppSecret());
        storage.setAesKey(wxMpProperties.getAesKey());
        storage.setToken(wxMpProperties.getToken());
        return storage;
    }
}

留神
1、WxMpConfigStorage 这个类在生产环境中,如果服务是 集群 部署的话,最好不要应用 WxMpDefaultConfigImpl 因为这个是将配置保留在 内存中。能够思考应用 WxMpRedissonConfigImpl 这个类。
2、WxMpConfigStorage 中的配置,和上方的服务器配置保持一致。

3、服务器端代码验证

@Component
@RestController
@Slf4j
public class MpEntryController {

    @Autowired
    private WxMpService wxMpService;

    /**
     * 微信接入
     *
     * @param signature 签名
     * @param timestamp 工夫戳
     * @param nonce     随机数
     * @param echoStr   随机字符串
     * @return 接入胜利返回 echoStr 的值,否则轻易返回
     */
    @GetMapping("/mp/entry")
    public String entry(@RequestParam("signature") String signature,
                        @RequestParam("timestamp") String timestamp,
                        @RequestParam("nonce") String nonce,
                        @RequestParam("echostr") String echoStr) {log.info("微信公众号 / 服务号接入传递的参数 signature:[{}],timestamp:[{}],nonce:[{}],echostr:[{}]",
                signature, timestamp, nonce, echoStr);

        if (StringUtils.isAnyBlank(signature, timestamp, nonce, echoStr)) {log.error("接管到微信认证信息, 参数非法, 存在为空的参数");
            return "error";
        }

        boolean result = wxMpService.checkSignature(timestamp, nonce, signature);
        log.info("微信公众号 / 服务号接入胜利?[{}]", result);
        return result ? echoStr : "error";
    }
}

留神
1、/mp/entry 这个为咱们本人的接入门路,和上方图中保留统一。

4、验证

1、启动咱们的 web 工程
2、在微信配置页面,点击 提交
3、验证通过,阐明接入胜利。


微信服务器地址 URL 就是 /mp/entry

五、参考文档

1、微信接入

六、代码网址

https://gitee.com/huan1993/wechat-development

正文完
 0