精华内容
下载资源
问答
  • 微信公众号服务器配置

    千次阅读 2019-06-26 09:38:14
    微信公众号开发-服务器配置 最近在进行公司的微信公众号和小程序的开发,由于都是由本人独立研发,所以框架和接口都要自己去搭去写,因此想把相关接口做完之后做一些记录,如今闲来无事就总结下相关接口,本篇内容为...

    微信公众号开发-服务器配置

    最近在进行公司的微信公众号和小程序的开发,由于都是由本人独立研发,所以框架和接口都要自己去搭去写,因此想把相关接口做完之后做一些记录,如今闲来无事就总结下相关接口,本篇内容为:微信公众号研发的服务器配置

    1.微信公众平台配置

    要进行服务器配置的话首先登入微信公众平台,总步骤如下:

    1. 登入微信公众平台 ,在左侧菜单栏最下方子菜单找到 开发–基本配置
      在这里插入图片描述
    2. 点击进入 基本配置,出现下图
      在这里插入图片描述
    3. 此处我已经进行过配置了,未进行配置的页面 服务器配置 相关信息应是空白。那么此页面需要配置的信息为 ip白名单+服务器配置信息,url填服务器+接口,token随便填,token用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性),密钥直接点随机生成,加解密方式选明文模式。
    4. 具体配置: ip白名单应配置为你的服务器ip地址(不知道自己的ip?看完本条看下一条),服务器地址应配置为你的项目发布的服务器地址(必须是已备案的域名,端口必须是80或443)+项目名+接口名,(此条看懂的话,第五第六条可跳过)
    5. 不知道自己的ip地址,打开cmd命令,windows输入ipconfig,Linux输入ifconfig,windows或者可以直接打开百度,然后输入ip至搜索框,点搜索,往下翻翻,就可以看到下图
      在这里插入图片描述
    6. 你的项目发布的服务器地址(必须是已备案的域名,端口必须是80或443)+项目名+接口名 :意思是你的项目必须发布在一台外网可以访问到的服务器上,且发布的端口必须是80或443,如果你想用本机发布并调试的话,建议去natapp买一个外网映射工具,在网站里叫隧道(图一),再在本网站二级域名菜单里点击注册买个已备案的二级域名(图二),然后把域名绑定到隧道上,下载一个小工具,解压,修改一下配置,然后启动之后,本机地址就映射到外网了(图三);URL格式示例http://top.XXX.cc/项目名/wechat
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    至此,微信公众平台上的配置就完成了,接下来是java端的接口写法。

    2.JAVA接口写法

    1. 先看官方文档的说明

    开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:

    参数描述
    signature微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
    timestamp时间戳
    nonce随机数
    echostr随机字符串

    开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

    1)将token、timestamp、nonce三个参数进行字典序排序
    2)将三个参数字符串拼接成一个字符串进行sha1加密
    3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

    官方文档链接:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319

    官方文档里还给了个PHP的代码示例,不过我做的框架是java的SSM,开始有点懵,后来在网上借鉴相关在ssm里配置相关借口资料研究之后终于走通,所以现在直接贴出java的相关代码

    Controller层

    package com.wechat.controller;
    
    import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
    import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
    
    import org.apache.commons.lang3.StringUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.wechat.service.WxService;
    
    @RestController
    @RequestMapping("/wxportal")
    public class WxController {
      @Autowired
      private WxService wxService;
     
      private final Logger logger = LoggerFactory.getLogger(this.getClass());
      private static org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger("logfile");
      @ResponseBody
      @GetMapping(produces = "text/plain;charset=utf-8")
      public String authGet(@RequestParam(name = "signature", required = false) String signature,
          @RequestParam(name = "timestamp", required = false) String timestamp,
          @RequestParam(name = "nonce", required = false) String nonce,
          @RequestParam(name = "echostr", required = false) String echostr) {
        this.logger.info("\n接收到来自微信服务器的认证消息:[{}, {}, {}, {}]", signature, timestamp, nonce, echostr);
    
        if (StringUtils.isAnyBlank(signature, timestamp, nonce, echostr)) {
          throw new IllegalArgumentException("请求参数非法,请核实!");
        }
    
        if (this.getWxService().checkSignature(timestamp, nonce, signature)) {
          return echostr;
        }
    
        return "非法请求";
      }
    
      @ResponseBody
      @PostMapping(produces = "application/xml; charset=UTF-8")
      public String post(@RequestBody String requestBody, @RequestParam("signature") String signature,
          @RequestParam(name = "encrypt_type", required = false) String encType,
          @RequestParam(name = "msg_signature", required = false) String msgSignature,
          @RequestParam("timestamp") String timestamp, @RequestParam("nonce") String nonce) {
        this.logger.info(
            "\n接收微信请求:[signature=[{}], encType=[{}], msgSignature=[{}],"
                + " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",
            signature, encType, msgSignature, timestamp, nonce, requestBody);
    
        if (!this.wxService.checkSignature(timestamp, nonce, signature)) {
          throw new IllegalArgumentException("非法请求,可能属于伪造的请求!");
        }
        String out = null;
        if (encType == null) {//unsubscribe event fromUser=oQmj3t35STb8TZHs7keHSYrYlPos  msgType=event
        	  //event=subscribe
          // 明文传输的消息
          WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(requestBody);
         
          
             WxMpXmlOutMessage outMessage = this.getWxService().route(inMessage);
          if (outMessage == null) {
            return "";
          }
    
          out = outMessage.toXml();
        } else if ("aes".equals(encType)) {
          // aes加密的消息
          WxMpXmlMessage inMessage = WxMpXmlMessage.fromEncryptedXml(requestBody,
              this.getWxService().getWxMpConfigStorage(), timestamp, nonce, msgSignature);
          this.logger.debug("\n消息解密后内容为:\n{} ", inMessage.toString());
          WxMpXmlOutMessage outMessage = this.getWxService().route(inMessage);
          if (outMessage == null) {
            return "";
          }
    
          out = outMessage.toEncryptedXml(this.getWxService().getWxMpConfigStorage());
        }
    
        this.logger.debug("\n组装回复信息:{}", out);
    
        return out;
      }
    
      protected WxService getWxService() {
        return this.wxService;
      }
    
    }
    

    Service层

    package com.wechat.service;
    
    import static me.chanjar.weixin.common.api.WxConsts.EventType.LOCATION;
    import static me.chanjar.weixin.common.api.WxConsts.EventType.SCAN;
    import static me.chanjar.weixin.common.api.WxConsts.EventType.SUBSCRIBE;
    import static me.chanjar.weixin.common.api.WxConsts.EventType.UNSUBSCRIBE;
    import static me.chanjar.weixin.common.api.WxConsts.MenuButtonType.CLICK;
    import static me.chanjar.weixin.common.api.WxConsts.MenuButtonType.VIEW;
    import static me.chanjar.weixin.common.api.WxConsts.XmlMsgType.EVENT;
    import static me.chanjar.weixin.mp.constant.WxMpEventConstants.POI_CHECK_NOTIFY;
    import static me.chanjar.weixin.mp.constant.WxMpEventConstants.CustomerService.KF_CLOSE_SESSION;
    import static me.chanjar.weixin.mp.constant.WxMpEventConstants.CustomerService.KF_CREATE_SESSION;
    import static me.chanjar.weixin.mp.constant.WxMpEventConstants.CustomerService.KF_SWITCH_SESSION;
    
    import javax.annotation.PostConstruct;
    
    import me.chanjar.weixin.common.api.WxConsts.XmlMsgType;
    import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
    import me.chanjar.weixin.mp.api.WxMpMessageRouter;
    import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
    import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfOnlineList;
    import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
    import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.wechat.config.WxMpConfig;
    import com.wechat.handler.KfSessionHandler;
    import com.wechat.handler.LocationHandler;
    import com.wechat.handler.LogHandler;
    import com.wechat.handler.MenuHandler;
    import com.wechat.handler.MsgHandler;
    import com.wechat.handler.NullHandler;
    import com.wechat.handler.StoreCheckNotifyHandler;
    import com.wechat.handler.SubscribeHandler;
    import com.wechat.handler.UnsubscribeHandler;
    
    @Service
    public class WxService extends WxMpServiceImpl {
      private final Logger logger = LoggerFactory.getLogger(this.getClass());
    
      @Autowired
      protected LogHandler logHandler;
    
      @Autowired
      protected NullHandler nullHandler;
    
      @Autowired
      protected KfSessionHandler kfSessionHandler;
    
      @Autowired
      protected StoreCheckNotifyHandler storeCheckNotifyHandler;
    
      @Autowired
      private WxMpConfig wxConfig;
    
      @Autowired
      private LocationHandler locationHandler;
    
      @Autowired
      private MenuHandler menuHandler;
    
      @Autowired
      private MsgHandler msgHandler;
    
      @Autowired
      private UnsubscribeHandler unsubscribeHandler;
    
      @Autowired
      private SubscribeHandler subscribeHandler;
    
      private WxMpMessageRouter router;
    
      @PostConstruct
      public void init() {
        final WxMpInMemoryConfigStorage config = new WxMpInMemoryConfigStorage();
        // 设置微信公众号的appid
        config.setAppId(this.wxConfig.getAppid());
        // 设置微信公众号的app corpSecret
        config.setSecret(this.wxConfig.getAppSecret());
        // 设置微信公众号的token
        config.setToken(this.wxConfig.getToken());
        // 设置消息加解密密钥
        config.setAesKey(this.wxConfig.getAesKey());
        super.setWxMpConfigStorage(config);
    
        this.refreshRouter();
      }
    
      private void refreshRouter() {
        final WxMpMessageRouter newRouter = new WxMpMessageRouter(this);
    
        // 记录所有事件的日志
        newRouter.rule().handler(this.logHandler).next();
    
        // 接收客服会话管理事件
        newRouter.rule().async(false).msgType(EVENT).event(KF_CREATE_SESSION)
          .handler(this.kfSessionHandler).end();
        newRouter.rule().async(false).msgType(EVENT).event(KF_CLOSE_SESSION)
          .handler(this.kfSessionHandler).end();
        newRouter.rule().async(false).msgType(EVENT).event(KF_SWITCH_SESSION)
          .handler(this.kfSessionHandler).end();
    
        // 门店审核事件
        newRouter.rule().async(false).msgType(EVENT).event(POI_CHECK_NOTIFY)
          .handler(this.storeCheckNotifyHandler).end();
    
        // 自定义菜单事件
        newRouter.rule().async(false).msgType(EVENT).event(CLICK).handler(this.menuHandler).end();
    
        // 点击菜单连接事件
        newRouter.rule().async(false).msgType(EVENT).event(VIEW).handler(this.nullHandler).end();
    
        // 关注事件
        newRouter.rule().async(false).msgType(EVENT).event(SUBSCRIBE).handler(this.subscribeHandler).end();
    
        // 取消关注事件
        newRouter.rule().async(false).msgType(EVENT).event(UNSUBSCRIBE).handler(this.unsubscribeHandler).end();
    
        // 上报地理位置事件
        newRouter.rule().async(false).msgType(EVENT).event(LOCATION).handler(this.locationHandler).end();
    
        // 接收地理位置消息
        newRouter.rule().async(false).msgType(XmlMsgType.LOCATION).handler(this.locationHandler).end();
    
        // 扫码事件
        newRouter.rule().async(false).msgType(EVENT).event(SCAN).handler(this.nullHandler).end();
    
        // 默认
        newRouter.rule().async(false).handler(this.msgHandler).end();
    
        this.router = newRouter;
      }
    
      public WxMpXmlOutMessage route(WxMpXmlMessage message) {
        try {
          return this.router.route(message);
        } catch (Exception e) {
          this.logger.error(e.getMessage(), e);
        }
    
        return null;
      }
    
      public boolean hasKefuOnline() {
        try {
          WxMpKfOnlineList kfOnlineList = this.getKefuService().kfOnlineList();
          return kfOnlineList != null && kfOnlineList.getKfOnlineList().size() > 0;
        } catch (Exception e) {
          this.logger.error("获取客服在线状态异常: " + e.getMessage(), e);
        }
    
        return false;
      }
    
    }
    
    

    配置文件 wx.properties

    wx_appid=wx3cd70cbxxxxxxx
    wx_appsecret=8e939b9e582f4fdfxxxxxxx
    wx_token=123487xxx
    wx_aeskey=2Ud4dSEEM6ykj0Cgs5Q5xxxx
    wx_url=http://top.xxxxxx.cc
    wx_key=cafdae5e6xxxxxxxxa8c6cd143e
    file_Path=E\:\\apache-tomcat-7.0.77\\apiclient_cert.p12
    

    [参考链接]:[https://github.com/binarywang/weixin-java-mp-demo-springboot]

    展开全文
  • 本篇文章主要介绍了详解nodejs微信公众号开发——1.接入微信公众号,非常具有实用价值,需要的朋友可以参考下
  • 使用Nodejs接入并验证微信公众号和微信小程序服务器配置 接入步骤 1、微信后台配置 [url] 写自己的已经绑定服务器的域名  [Token] 随便写 2、自己的服务器部署以下代码   check.js   'use strict';   const ...
  • 一、填写服务器配置 二、微信服务器验证 一、填写服务器配置 登录微信公众平台官网后,在公众平台官网的开发-基本设置页面,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey, 其中URL是...

    目录

     

    一、填写服务器配置

    二、微信服务器验证


    一、填写服务器配置

    登录微信公众平台官网后,在公众平台官网的开发-基本设置页面,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey,

    其中URL是开发者用来接收微信消息和事件的接口URL(即自己服务器接收处理url)。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。

    EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。

    二、微信服务器验证

    开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:

    填写好服务器之后,先不要提交,在服务器响应url处增加方法处理,以响应微信的验证

    路由配置

    //微信公众号事件接口
    Route::any('wxNotify', 'ApiWeChatController@wxNotify');

    控制器代码如下

       /**
         * 微信事件通知
         */
        public function wxNotify()
        {
            $model = new ApiOther();
            # 接收值方式为laravel框架封装方法 非框架可使用 $_GET
            $signature = request()->input('signature');
            $timestamp = request()->input('timestamp');
            $nonce = request()->input('nonce');
            $echostr = request()->input('echostr');
            echo $model->checkSignature($signature, $timestamp, $nonce, $echostr);
        }

    模型层代码如下

       /**
         * 微信验证签名
         * @param $signature
         * @param $timestamp
         * @param $nonce
         * @param $echostr
         * @return bool
         */
        public function checkSignature($signature, $timestamp, $nonce, $echostr)
        {
            if (empty($signature) || empty($timestamp) || empty($nonce)) return false;
    
            $token = 'xxxxxxxxxxxx'; # 自己设定的Token
            $tmpArr = array($token, $timestamp, $nonce);
            sort($tmpArr, SORT_STRING);
            $tmpStr = implode($tmpArr);
            $tmpStr = sha1($tmpStr);
            // 检验signature,若确认此次GET请求来自微信服务器,原样返回echostr参数内容,则接入生效,否则接入失败
            if ($tmpStr == $signature) {
                return $echostr;
            }
            return false;
        }

    写好后,可提交微信配置,开启服务器配置

    这样验证URL有效性成功后即接入生效,用户每次向公众号发送消息、或者产生自定义菜单、或产生微信支付订单等情况时,

    开发者填写的服务器配置URL将得到微信服务器推送过来的消息和事件,开发者可以依据自身业务逻辑进行响应。

    展开全文
  • 配置node服务器 在购买好服务器后,用Xshell链接到服务器。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash 或者 wget -qO- ...
  • php 微信公众号服务器配置首次验证 首先要确定你有微信公众号和服务器; 登录微信公众号平台,左侧最下方的 开发->基本配置 我这里用了get_event方法接受验证,既你在服务器的丢出来一个可以读取的接口,方法名...

    php 微信公众号服务器配置首次验证

    首先要确定你有微信公众号和服务器;

    登录微信公众号平台,左侧最下方的 开发->基本配置
    服务器地址,令牌
    我这里用了get_event方法接受验证,既你在服务器的丢出来一个可以读取的接口,方法名为get_event;

    下面是该方法里面的内容,用于验证;
    在这里插入图片描述

    以上我用php简单的验证所有步骤这么多,只是简单的明文模式,其他模式可另行选择。
    总结也就是在控制器中写一个方法供微信端访问,配置信息完成,代码如上图即可;

        public function get_event()
    {
       $timestamp = $_GET['timestamp'];//timestamp其实就是一个时间戳
        $nonce = $_GET['nonce'];//nonce是一个随机参数
        $token = "token";//这个token填写你在微信公众平台上写的那个值
        $signature = $_GET['signature'];//这个signature其实就是在微信公众平台已经加密好的字符串
        $echostr = $_GET['echostr'];
        $array = array($timestamp, $nonce, $token);
        sort($array);
        $tmpstr = implode('', $array);
        $tmpstr = sha1($tmpstr);
        if ($tmpstr == $signature && $echostr) {
            echo $echostr;
            exit;
        }
    }
    
    展开全文
  • 自己申请了个公众号玩一下,需要配置服务器url地址。有的同学没域名,没服务器,想要测试下公众号功能怎么办,然后在网上找了下 有好多内网穿透软件- 花生壳,ngrok, natapp什么的- 比较了下,决定售后服务 natapp,...

    自己申请了个公众号玩一下,需要配置服务器url地址。有的同学没域名,没服务器,想要测试下公众号功能怎么办,然后在网上找了下 有好多内网穿透软件- 花生壳,ngrok, natapp什么的- 比较了下,决定用 natapp,为啥,因为免费呗。
    首先,去https://natapp.cn/ 注册登录,找到我的隧道, 免费隧道。

    就填80端口,画个图。

    创建完后他会分配一个authtoken,然后下载客户端https://natapp.cn/#download
    启动时用命令: natapp.exe -authtoken xxxxtoken  也可以写成bat,一键启动。启动后应该是这个样子.这样就把本地8080端口映射到外网该域名80端口了。

    下面配置服务器地址,登录微信公众号,找到基础配置,服务器配置。这个token32位,自己生成一个就行,但是验证签名时必须本地与线上一至。

    然后配置本地服务端.需要返回echostr。

    package com.fshows.demo.utils;
    
    public class Keys {
    
        public static String WX_WEB_TOKEN = "GMbxE6XJUL9IIDU59isnrBUY1CCxYN6D";
    
        public static String WX_WEB_PASSWORD = "liuzhe222";
    }
    
    package com.fshows.demo.utils;
    
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Arrays;
    
    public class TokenUtil {
    
        /**
         * 验证签名
         *
         * @param signature
         * @param timestamp
         * @param nonce
         * @return
         */
        public static boolean checkSignature(String signature, String timestamp, String nonce) {
            String[] arr = new String[] { Keys.WX_WEB_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 = byteToStr(digest);
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
    
            content = null;
            // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
            return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
        }
    
        /**
         * 将字节数组转换为十六进制字符串
         *
         * @param byteArray
         * @return
         */
        private static String byteToStr(byte[] byteArray) {
            String strDigest = "";
            for (int i = 0; i < byteArray.length; i++) {
                strDigest += byteToHexStr(byteArray[i]);
            }
            return strDigest;
        }
    
        /**
         * 将字节转换为十六进制字符串
         *
         * @param mByte
         * @return
         */
        private static String byteToHexStr(byte mByte) {
            char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
            char[] tempArr = new char[2];
            tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
            tempArr[1] = Digit[mByte & 0X0F];
    
            String s = new String(tempArr);
            return s;
        }
    
    }
    

    然后就配置完了-

    展开全文
  • 原因:修改了域名后,更换服务器地址失败。原来是可以验证通过的,代码没有变动过。...3、微信公众号提交验证,居然通过了。 4、马上删除新建的文件,把旧文件改回来。 5、完成 方法有点笨,勿喷! ...
  • 配置时提示配置失败,已经进入代码并且验证通过,也按照文档将返回值返回(以下是我通过测试号演示) 解决方法 使用respone输出流返回结果,接口改为无返回值即可 over,配置成功了,继续踩坑吧 ...
  • 先看博主配置完的效果 直接看代码 import tornado.web import hashlib class TBWeChatBasisConfigHandler(tornado.web.RequestHandler): def __init__(self, application, request, **kwargs): ...
  • 这篇文章主要介绍了微信公众号服务器验证Token步骤图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 服务器验证Token验证分为以下及步骤 一,在微信公众号...
  • SpringBoot微信公众号服务器配置案例

    千次阅读 2019-05-09 10:51:18
    进行微信公众号开发,进行服务器配置是必不可少的,通过配置,公众号粉丝与公众号交互的消息将发送至开发者服务器,开发者对消息进行处理,例如:配置后,用户关注公众号或取关时,消息将发送至开发者配置的URL上,...
  • 配置服务器 服务器进行token验证 <?php //验证token $wx = new Wx(); class Wx { // 微信后台设置的token值 php7.1之后可以加权限 private const TOKEN = 'weixin'; // 构造方法 public function ...
  • 微信公众号 服务器配置Token操作

    千次阅读 2020-02-17 23:13:19
    服务器方面操作 在我的服务器列表下,新建一个PHP文件,这里的PHP版本应该是没区别,我的是7.2版本。 我新建一个PHP,叫做api.php 然后再PHP文件里输入 <?php /** * wechat php test */ //define your token...
  • 微信公众号服务器配置详解一览

    万次阅读 2018-06-06 16:13:20
    下图是配置完成后的样子,后面给大家详细介绍每一步的步骤:下图为微信公众号开发验证机制:由用户发送请求给微信服务器,微信服务器根据地址URL访问请求个人开发服务器,然后个人开发服务器响应返回给微信服务器(其中有...
  • 半年前接触微信公众号开发,由于使用java,便直接使用最简单的Servlet去做校验,通过百度完美的成功接入服务器配置,后来接触到了一个小框架wxtools,对微信的api做了一层java的封装,无需自己写,就把原先写的改成...
  • 微信公众号基本配置

    2016-12-18 09:51:25
    微信公众号 基本配置 安全模式微信公众号 基本配置 安全模式微信公众号 基本配置 安全模式
  • 2.检查微信公众号配置的推送地址是http的还是https的,因为有些服务器网关配置的http会自动转发https的,转发过程中一些请求体可能会丢失,所以就会造成验证能通过,说明get请求不会丢失,而事件却收不到,说明在...
  • 微信公众平台官网:https://mp.weixin.qq.com 文章目录 一、注册公众号 ...服务器基本配置 3.存取access_token参数 4.公众号消息管理 5.获取openid以及网页授权(重难点)
  • 首先我们需要在微信公众平台上填写服务器配置 重点内容 服务器地址URL(一定要外网能访问的到) 在我们提交配置的时候,微信会发送GET请求到URL上, 并会携带 signature,timestamp,nonce,echostr 四个参数, ...
  • 做一个简单的小项目,放到服务器tomcat的webapps下,启动项目,访问成功,即可保存服务器配置 需要三个文件: 1、Constant: package com.xkx.constants; public class Constant {  // ��ӿ�������...
  • 在阅读这篇文章之前你要做以下的准备:1.注册一个订阅号(通过微信公众平台https://mp.weixin.qq.com/); 2.... 4.... 第一步:填写服务器配置我们登录微信公众号之后,右下角基本开发配置点进去----&gt;URL是开...
  • 现在很多开发,都依托在微信,有微信公众号,或者是小程序,而近段时间一直在跟进微信的会员开发功能,但是一直对于服务配置这方面都是过一遍就忘,记录一下一般,都会有公司的公众号,在没有公司的公众号的时候,...
  • 若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下: j 我们在服务器创建一个web项目,新建一个servlet。 servlet代码:...
  • 微信公众号服务器配置--验证token

    万次阅读 2017-08-12 16:46:37
    3 填写相关服务器配置信息: 这里的token要跟服务器的验证文件里的token一致。4 写一个验证文件放进服务器,验证token,看是否连接成功。附上验证代码:** * wechat php test */ //define your tokendefine("T
  • 主要为大家详细介绍了Java微信公众号安全模式消息解密,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • java微信公众号服务器配置-验证Token 之前做了微信支付,最近开始了微信公众号的开发,没想到第一步验证Token就踩坑了,开个贴记录一下,同时也希望能帮助到同样有疑惑的小伙伴们 一、填写服务器配置 首先我们...
  • 分析:那么必须利用微信公众号的生成带参数的二维码的机制,把上级的ID生成到二维码中,然别人扫描的时候就可以获得到,再进行上下级绑定。 总体来说还是挺好实现的,只是再测试的过程中,发现服务器配置启用没有...
  • 主要介绍了Java开发微信公众号接收和被动回复普通消息的相关资料,需要的朋友可以参考下
  • 从今天开始我们就正式开始微信公众号开发了,首先进入微信官网https://mp.weixin.qq.com/,注册或者登陆(如果已经注册了)你的微信公众号,登陆后需要管理员用个人微信扫码验证通过才行,这里直接贴出截图如下:​...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,306
精华内容 15,722
关键字:

微信公众号服务器配置