工作中遇到开发微信第三方服务的需求,学习的同时记录一下开发的过程,给大家提供一个参考,希望能有些帮助,让大家少走些弯路。

首先说下开发流程,微信公众平台提供了大量的第三方接口供开发者调用,可以丰富微信公众号和服务号的功能,一遍提供更便捷的服务和完成复杂的业务流程,接入微信第三方平台有严格的要求,可以查看开发者文档:
公众平台开发者文档

首先需申请接口测试号,方便开发者测试接口功能:

用自己的微信号登录一下就行了。
登录成功后有测试号的信息,测试号的接口调用权限和微信认证服务号是一样的。

appID、appsecret是系统生成的测试应用号,正式上线时有微信分配的信息,URL和Token需开发者自己配置,URL为开发者开发的服务程序的资源,这里是认证action的映射,真是环境必须使用域名,这里我申请的花生壳内网穿透,审核服务费6元,懒得申请的可以百度下载一个ngrok,也是内网穿透工具。

要使微信服务号与我们开发的平台对接,需要先进行有效性验证,具体实现过程如下。

Java方面用的是SpringMVC,首先配置文件中添加基本信息:

按自己的测试号信息配置。

第二步,增加SpringMVC映射:

@Controller
@RequestMapping("/")
public class WXVerifyController {private static final Logger log = Logger.getLogger(WXVerifyController.class);@RequestMapping("api")public @ResponseBody String wxVerify(HttpServletRequest request){String signature = request.getParameter("signature");// 时间戳String timestamp = request.getParameter("timestamp");// 随机数String nonce = request.getParameter("nonce");// 随机字符串String echostr = request.getParameter("echostr");//正式微信公众号String token = ConstantUtil.getPropertiesValue("system", "Token");try{// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败if (SignUtil.checkSignature(token,signature, timestamp, nonce)) {log.warn(echostr);return echostr;}}catch(Exception ex){return "Illegal Call";}return "ERROR";}}

ConstantUtil.getPropertiesValue();方法是读取配置文件的方法。

public class SignUtil {/*** 19      * 验证签名* 20      ** 21      * @param signature* 22      * @param timestamp* 23      * @param nonce* 24      * @return* 25*/public static boolean checkSignature(String token,String signature, String timestamp,String nonce) {String[] arr = new String[]{token, timestamp, nonce};// 将token、timestamp、nonce三个参数进行字典序排序//Arrays.sort(arr);sort(arr);StringBuilder content = new StringBuilder();for (int i = 0; i < arr.length; i++) {content.append(arr[i]);}MessageDigest md;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;}/*** 54      * 将字节数组转换为十六进制字符串* 55      ** 56      * @param byteArray* 57      * @return* 58*/private static String byteToStr(byte[] byteArray) {String strDigest = "";for (int i = 0; i < byteArray.length; i++) {strDigest += byteToHexStr(byteArray[i]);}return strDigest;}/*** 68      * 将字节转换为十六进制字符串* 69      ** 70      * @param mByte* 71      * @return* 72*/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;}public static void sort(String a[]) {for (int i = 0; i < a.length - 1; i++) {for (int j = i + 1; j < a.length; j++) {if (a[j].compareTo(a[i]) < 0) {String temp = a[i];a[i] = a[j];a[j] = temp;}}}}
}

到这里Token验证基本完成了,打开内网穿透,填写服务器URL,在测试号管理界面完成验证。

微信第三方服务平台开发(一)相关推荐

  1. 微信平台第三方服务器,浅谈微信第三方服务平台的发展前景

    伴随着移动端的普及,移动互联网也在飞速的发展,同时也有越来越多的小商家开始抓住了移动互联网的这个渠道开展营销活动.而随着微信的不断更新和发展,微信用户也越来越多,而如今如雨后春笋般出现的各类微信第三方 ...

  2. 微信公共服务平台开发(.Net 的实现)13-------网页授权(下 :C#代码的实现 )

    接着上次的理论,我们这次来研究用代码实现"网页授权获取用户基本信息",首先我们需要一个链接指向微信的授权页面,在微信开发平台中已经说了,这个链接必须在微信客户端中打开,那么我们就干 ...

  3. 微信第三方服务平台java授权获取token(一)

    公众平台第三方平台是为了让公众号或小程序运营者,在面向垂直行业需求时,可以一键授权给第三方平台(并且可以同时授权给多家第三方),通过第三方平台来完成业务,开放给所有通过开发者资质认证后的开发者使用. ...

  4. 微信公共服务平台开发(.Net 的实现)2-------获得ACCESSTOKEN

    成为了开发者之后微信平台会给您appid和secret,在订阅号中是没有的,所以因该申请一下服务号 有了ACCESSTOKEN才能做添加菜单,上传/下载图片等功能 private string Get ...

  5. 微信第三方服务平台源码分析——每个Action与模块的对应关系

    Lib\Action    |__Home--------前台页面中的首页,功能介绍,关于我们,帮助中心    |__System------后台管理       |__AdminAction     ...

  6. 微信公众帐号第三方服务平台源码

    微信公众帐号第三方服务平台源码,基于thinkphp3.2版本+DWZ进行开发.下载地址:http://down.qypangu.com 现在这个系统只能算是一个DEMO版,各位下载下来后可以根据自己 ...

  7. 微信开发(4):微信第三方开放平台的搭建(java)

    什么是第三方开放平台 来波官方解释: 我才是官方文档 第三方平台的开放,让公众号或小程序运营者在面向垂直行业需求时,可以通过一键登录授权给第三方开发者,来完成相关能力. 简单的说,就是让公众号授权给第 ...

  8. 微信公众开放平台开发08---纯java 实现微信开发:编写自定义菜单

    微信公众开放平台开发08---纯java 实现微信开发:编写自定义菜单 微信公众开放平台开发08---纯java 实现微信开发:编写自定义菜单  技术qq交流群:JavaDream:251572072 ...

  9. 微信公众开放平台开发06---复习一下servlet

    微信公众开放平台开发06---复习一下servlet  技术qq交流群:JavaDream:251572072  ------------------------------------------- ...

最新文章

  1. 面试:GET和POST两种基本请求方法有什么区别
  2. SAP HANA企业级培训系列课程第一部分
  3. mysql outfile raw_解决 Mysql outfile 的报错问题!
  4. 【Clickhouse】Clickhouse TTL 数据的存活时间
  5. Gmail Labs各功能全球开放
  6. Appium 控件定位链接整理(appiumdriver)
  7. Oracle视图编译错误解决办法
  8. codevs3044 线段树+扫描线
  9. js基础-(一)-基本数据类型
  10. adb无线连接Android手机
  11. BAT智能硬件布局 争搭平台卡位各异
  12. 大数据的监控和数据准确性保证
  13. [RK3399][Android7.1.1]Tethering:修复使用USB共享网络,拔出USB后 USB共享没有自动关闭的问题
  14. [ATF] ARM Trusted firmware 构建选项
  15. oracle 创建自增序列
  16. HMC7044调试说明
  17. eclipse安装TFS插件
  18. In aggregated query without GROUP BY是什么错误
  19. 关于 MTK 双卡 开启/关闭 移动数据 的一些小研究
  20. sqlserver存储过程 返回临时表问题

热门文章

  1. 英语作文考前必背10大类万能句型
  2. python c++情侣网名是什么意思_“果然,他用的是情侣网名!”
  3. mmorpg游戏第2次内测问题总结
  4. Android 8.1 中Systemui中的常见修改(六)NavigationBar加载流程
  5. kubernetes部署 rook ceph
  6. ET篇:做好准备工作并运行master分支的Demo
  7. spring引入多个properties文件
  8. 武林外传—阿沅,这是依赖传递呀!
  9. 市场营销学5——消费者购买行为分析
  10. 卓有成效的管理:你逃不过的功课你要完成它