【微信公众号开发文档api】微信公众帐号开发教程第2篇-开发模式启用及接口配置

2018-11-22 14:58:40 微信支付开发 78 views 微信支付开发
[导读]:本文(《微信公众帐号开发教程第2篇-开发模式启用及接口配置》)由来自吴川的客户投稿,并经由本站(河池微信接口)结合主题:微信公众号开发文档api,收集整理了众多资料而成。主要记述了微信开发,微信api,时间戳等方面的信息。相信从本文您一定可以获得自己所需要的!

编辑模式与开发模式

公众帐号申请成功后,要想接收处理用户的请求,就必须要在“高级功能”里进行配置,点击“高级功能”,将看到如下界面:

图片

从上图中可以看到,高级功能包含两种模式:编辑模式和开发模式,并且这两种模式是互斥关系,即两种模式不能同时开启。那两种模式有什么区别呢?作为开发人员到底要开启哪一种呢?

编辑模式:主要针对非编程人员及信息发布类公众帐号使用。开启该模式后,可以方便地通过界面配置“自定义菜单”和“自动回复的消息”。

启用开发模式(上)

微信公众帐号注册完成后,默认开启的是编辑模式。那么该如何开启开发模式呢?操作步骤如下:

1)点击进入编辑模式,将右上角的编辑模式开关由“开启”切换到“关闭”,如下图所示:

【微信公众号开发文档api】微信公众帐号开发教程第2篇-开发模式启用及接口配置

2)点击高级功能进入到开发模式,将右上角的开发模式开关由“关闭”切换到“开启”,但在切换时会遇到如下提示:

【微信公众号开发文档api】微信公众帐号开发教程第2篇-开发模式启用及接口配置

提示需要我们先成为开发者,才能开启开发模式。那就先点击下图所示的“成为开发者”按钮:

图片

果提示资料不全,那就先补齐资料再回来继续操作。需要补全的资料有公众帐号头像、描述和运营地区。

【微信公众号开发文档api】微信公众帐号开发教程第2篇-开发模式启用及接口配置

待资料补全后,再次点击“成为开发者”,这时将看到接口配置信息界面,如下图所示:

这里需要填写URL和Token两个值。

这里需要填写URL和Token两个值。URL指的是能够接收处理微信服务器发送的GET/POST请求的地址,并且是已经存在的,现在就能够在浏览器访问到的地址,这就要求我们先把公众帐号后台处理程序开发好(至少应该完成了对GET请求的处理)并部署在公网服务器上。Token后面会详细说明。

也就是说要完成接口配置,只需要先完成微信服务器的GET请求处理就可以?是的。 那这是为什么呢?因为这是微信公众平台接口中定义的。具体请参考API文档-消息接口-消息接口指南中的网址接入部分。点此进入。

图片

上面写的很清楚,其实你只要能理解上面在说什么就OK了,至于怎么编写相关代码,我已经帮你完成了,请继续往下看。

创建公众帐号后台接口程序

创建一个Web工程,并新建一个能够处理请求的Servlet,命名任意,我在这里将其命名为org.liufeng.course.servlet.CoreServlet,代码如下:

  • package org.liufeng.course.servlet;  

  • import java.io.IOException;  

  • import java.io.PrintWriter;  

  • import javax.servlet.ServletException;  

  • import javax.servlet.http.HttpServlet;  

  • import javax.servlet.http.HttpServletRequest;  

  • import javax.servlet.http.HttpServletResponse;  

  • import org.liufeng.course.util.SignUtil;  

  • /** 

  •  * 核心请求处理类 

  •  *  

  •  * @author liufeng 

  •  * @date 2013-05-18 

  •  */

  • publicclass CoreServlet extends HttpServlet {  

  •     /** 

  •      */

  •     publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  

  •         String signature = request.getParameter("signature");  

  •         // 时间戳

  •         String timestamp = request.getParameter("timestamp");  

  •         // 随机数

  •         String nonce = request.getParameter("nonce");  

  •         // 随机字符串

  •         String echostr = request.getParameter("echostr");  

  •         PrintWriter out = response.getWriter();  

  •         // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败

  •         if (SignUtil.checkSignature(signature, timestamp, nonce)) {  

  •             out.print(echostr);  

  •         }  

  •         out.close();  

  •         out = null;  

  •     }  

  •     /** 

  •      */

  •     publicvoid doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  

  •         // TODO 消息的接收、处理、响应

  •     }  

  • }  

  • 可以看到,代码中只完成了doGet方法,它的作用正是确认请求是否来自于微信服务器;而doPost方法不是我们这次要讲的内容,并且完成接口配置也不需要管doPost方法,就先空在那里。

    在doGet方法中调用了org.liufeng.course.util.SignUtil.checkSignature方法,SignUtil.的实现如下:

  • package org.liufeng.course.util;  

  • import java.security.MessageDigest;  

  • import java.security.NoSuchAlgorithmException;  

  • import java.util.Arrays;  

  • /** 

  •  * 请求校验工具类 

  •  *  

  •  * @author liufeng 

  •  * @date 2013-05-18 

  •  */

  • publicclass SignUtil {  

  •     // 与接口配置信息中的Token要一致

  •     privatestatic String token = "weixinCourse";  

  •     /** 

  •      * 验证签名 

  •      *  

  •      * @param signature 

  •      * @param timestamp 

  •      * @param nonce 

  •      * @return 

  •      */

  •     publicstaticboolean 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 

  •             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;  

  •         return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;  

  •     }  

  •     /** 

  •      * 将字节数组转换为十六进制字符串 

  •      *  

  •      * @param byteArray 

  •      * @return 

  •      */

  •     privatestatic String byteToStr(byte[] byteArray) {  

  •         String strDigest = "";  

  •         for (int i = 0; i 

  •             strDigest += byteToHexStr(byteArray[i]);  

  •         }  

  •         return strDigest;  

  •     }  

  •     /** 

  •      * 将字节转换为十六进制字符串 

  •      *  

  •      * @param mByte 

  •      * @return 

  •      */

  •     privatestatic String byteToHexStr(byte mByte) {  

  •         char[] Digit = { '0''1''2''3''4''5''6''7''8''9''A''B''C''D''E''F' };  

  •         char[] tempArr = newchar[2];  

  •         tempArr[0] = Digit[(mByte >>> 4) & 0X0F];  

  •         tempArr[1] = Digit[mByte & 0X0F];  

  •         String s = new String(tempArr);  

  •         return s;  

  •     }  

  • }  

  • 这里唯一需要注意的就是SignUtil类中的成员变量token,这里赋予什么值,在接口配置信息中的Token就要填写什么值,两边保持一致即可,没有其他要求,建议用项目名称、公司名称缩写等,我在这里用的是项目名称weixinCourse。

    最后再来看一下web.xml中,CoreServlet是怎么配置的,web.xml中的配置代码如下:

  • xmlversion="1.0"encoding="UTF-8"?>

  •     <servlet>

  •         <servlet-name>coreServletservlet-name>

  •         <servlet-class>

  •             org.liufeng.course.servlet.CoreServlet  

  •         servlet-class>

  •     servlet>

  •     

  •     <servlet-mapping>

  •         <servlet-name>coreServletservlet-name>

  •         <url-pattern>/coreServleturl-pattern>

  •     servlet-mapping>

  •     <welcome-file-list>

  •         <welcome-file>index.jspwelcome-file>

  •     welcome-file-list>

  • web-app>

  • 到这里,所有编码都完成了,就是这么简单。接下来就是将工程发布到公网服务器上,如果没有公网服务器环境,可以去了解下BAE、SAE或阿里云。发布到服务器上后,我们在浏览器里访问CoreServlet,如果看到如下界面就表示我们的代码没有问题:

    图片

    啊,代码都报空指针异常了还说证明没问题?那当然了,因为直接在地址栏访问coreServlet,就相当于提交的是GET请求,而我们什么参数都没有传,在验证的时候当然会报空指针异常。

    接下来,把coreServlet的访问路径拷贝下来,再回到微信公众平台的接入配置信息界面,将coreServlet的访问路径粘贴到URL中,并将SignUtil类中指定的token值weixinCourse填入到Token中,填写后的结果如下图所示:

    【微信公众号开发文档api】微信公众帐号开发教程第2篇-开发模式启用及接口配置

    我在写这篇教程的时候是使用的BAE环境,如果想学习微信公众帐号开发又没有公网服务器环境的,建议可以试试,注册使用都很方便,如果有问题我们还可以交流。

    相关问答

    问:微信的公众平台api怎样才能接入成功?

    答:1、进入微信公众平台后台,进入开发者中心
    2、同意成为开发者
    3、获得开发者appid和APPsecret 等开发数据
    4、在你所进行开发的项目的服务器上做配置
    5、获取你开发项目的服务器的 url和token,并填到微信公众平台的开发者中心。
    6、微信公众平台api接入成功


    问:微信公众平台在哪里看API 在哪里下载wxsample.php示例

    答:在登录前的界面上有帐号分类,鼠标移到想看的帐号类型上面,就会出现开发文档了。


    问:微信公众平台怎么调用API

    答:  你好。
      API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
      app调app可以用URL通信来实现,貌似是在工程plist文件中加一个键值,然后在另一个app来调用这个string来激活这个app的。不过你要看有没有提供这个string,或者说有没有提供这个功能接口。


    问:微信支付的API证书怎么下载?

    答:API安全证书设置开发所需的接口API证书、密钥,请登录微信支付商户平台,点击【账户中心】->【账户设置】->【API安全】->【下载证书】中,下载及设置;开通帐号和更换API证书时,可以此页下载和更改证书,该证书用来标识和界定您的身份;部分安全性要求高的API需要使用该证书来确认您的调用身份,防止因盗用给您带来的损失。


    发表评论

    繁花似锦

    登录微信商户平台,API安全里可以下载

    2018-12-04 13:36:19
    如烟呀

    商户后台自己点击下载即可,http://kf.qq.com/faq/161222NneAJf161222U7fARv.html

    2018-11-24 15:41:02
    左边右边

    想知道楼主怎么做的?我的也是验证成功了,但是没有任何回复 不知道这功能怎么实现

    2018-11-23 09:51:45
    李实如

    情况一样,我也是连接成功了而已。
    怎么实现百科啊天气预报之类的东西啊!

    2018-11-22 18:11:45

    发表评论:

    在线客服