微信开放第三方API接口,

申请地址:

https://mp.weixin.qq.com/advanced/advanced?action=interface&t=advanced/interface&token=1865635074&lang=zh_CN

官方提供PHP开发代码下载: 点此下载

如果你的微信接口页面没有做好,提交保存的时候,会提示:验证Token失败。这个错误是因为,你的接口页面还没有反馈正确的信息给微信接口。微信在教程方面还做得不够成熟,就一个PHP示例,还是有问题的,在下篇文章我会讲到这个错误在哪。微信官方也没有跟大家说清楚怎么才能是token验证成功。下面我将给出示例告诉大家如何通过token验证。

譬如:微信接口页面是http://bbhet.com  默认页面是weixin.php,我们只需要把weixin.php的代码改为, 然后放到你得网站根目录:

官方下载地址 http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html

方法一: 简单的PHP实现Token验证

  1. <?php
  2. //1. 将timestamp , nonce , token 按照字典排序
  3. $timestamp = $_GET['timestamp'];
  4. $nonce = $_GET['nonce'];
  5. $token = "你自定义的Token值 用于验证";
  6. $signature = $_GET['signature'];
  7. $array = array($timestamp,$nonce,$token);
  8. sort($array);
  9. //2.将排序后的三个参数拼接后用sha1加密
  10. $tmpstr = implode('',$array);
  11. $tmpstr = sha1($tmpstr);
  12. //3. 将加密后的字符串与 signature 进行对比, 判断该请求是否来自微信
  13. if($tmpstr == $signature)
  14. {
  15. echo $_GET['echostr'];
  16. exit;
  17. }

方法二: 封装类的代码实现Token验证

  1. <?php
  2. /**
  3. * wechat php test
  4. */
  5. //define your token
  6. define("TOKEN", "weixin");
  7. $wechatObj = new wechatCallbackapiTest();
  8. $wechatObj->valid();
  9. class wechatCallbackapiTest
  10. {
  11. public function valid()
  12. {
  13. $echoStr = $_GET["echostr"];
  14. //valid signature , option
  15. if($this->checkSignature()){
  16. echo $echoStr;
  17. exit;
  18. }
  19. }
  20. public function responseMsg()
  21. {
  22. //get post data, May be due to the different environments
  23. $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
  24. //extract post data
  25. if (!empty($postStr)){
  26. $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  27. $fromUsername = $postObj->FromUserName;
  28. $toUsername = $postObj->ToUserName;
  29. $keyword = trim($postObj->Content);
  30. $time = time();
  31. $textTpl = "<xml>
  32. <ToUserName><![CDATA[%s]]></ToUserName>
  33. <FromUserName><![CDATA[%s]]></FromUserName>
  34. <CreateTime>%s</CreateTime>
  35. <MsgType><![CDATA[%s]]></MsgType>
  36. <Content><![CDATA[%s]]></Content>
  37. <FuncFlag>0</FuncFlag>
  38. </xml>";
  39. if(!empty( $keyword ))
  40. {
  41. $msgType = "text";
  42. $contentStr = "Welcome to wechat world!";
  43. $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  44. echo $resultStr;
  45. }else{
  46. echo "Input something...";
  47. }
  48. }else {
  49. echo "";
  50. exit;
  51. }
  52. }
  53. private function checkSignature()
  54. {
  55. $signature = $_GET["signature"];
  56. $timestamp = $_GET["timestamp"];
  57. $nonce = $_GET["nonce"];
  58. $token = TOKEN;
  59. $tmpArr = array($token, $timestamp, $nonce);
  60. sort($tmpArr);
  61. $tmpStr = implode( $tmpArr );
  62. $tmpStr = sha1( $tmpStr );
  63. if( $tmpStr == $signature ){
  64. return true;
  65. }else{
  66. return false;
  67. }
  68. }
  69. }
  70. ?>
版权声明:本文为博主原创文章,未经博主允许不得转载。

http://www.wxapp-union.com/article-2771-1.html?utm_source=QQqun

消息推送配置Token令牌错误@Author GQ 2017年07月26日 本想在微信小程序中接入上传图片到阿里云功能,小程序中查询很多资料还是没能将图片转成流上传, 所以无奈只能借助小程序官方API中客服转发功能上传素材间接实现: ...

 
 
 
<h1 id="微信小程序消息推送配置token令牌错误" style="margin: 0.8em 0px; padding: 0px; box-sizing: border-box; font-weight: 100; line-height: 1.3em;">[微信小程序]消息推送配置Token令牌错误

@Author GQ 2017年07月26日  

本想在微信小程序中接入上传图片到阿里云功能,小程序中查询很多资料还是没能将图片转成流上传,
所以无奈只能借助小程序官方API中客服转发功能上传素材间接实现: 1.将小程序选择的照片上传至微信临时服务器并返回图片url;
2.将url返回给自己的后台,后台通过url获取流再上传至阿里OSS; 想法挺美好,然而一地坑...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Token校验失败,请检查确认 如下图

  • URL:填写自己写的接口路径,需要已经调试好并且发布到正式域名地址下才可以;

    • 注意 : 当点击下方的 提交 按钮时,微信会请求一次数据给你的URL地址
  • Token(令牌): 自己随便起个名字就行英文数字3-32字符;
  • EncodingAESKey: 点随机生成吧,省的自己写;
  • 加密方式: 兼容就行
  • 数据格式: 看个人喜好一般Json

然后就可以看着 消息配置指南 操作了,这里我详细在用大白话说下,官方给的是PHP的代码…

  1. 上面说到微信会请求你填写的URL地址,我们先来看下微信这个GET请求的参数

    请求方式 : GET

参数 描述
signature 微信加密签名(不用管他是怎么来的,反正是很长的一串)
timestamp 时间戳 eg:1501060062
nonce 随机数 eg:2535181275
echostr 随机字符串 eg:14324296167175543775

2. 大概了解了参数我们这个接口就好写多了,我们屡一下这几个参数的处理逻辑;

1) 还记得上面自己填写的token吧3-32字符的那个,这里要用到;

2) 将timestamp nonce token 这三个参数对应的值进行字典排序;什么是字典排序?

3) 排序后将这三个参数对应的值,只要值,拼接成string字符串;

4) 将拼接好的字符串SHA1加密,注意要小写字母,假设返回的string我命名为 secret ;

5) 比较参数 signature 和 secret 值是否相等;

  • 如果相等表示验证成功,并且原封不动的返回 echostr
  • 如果不相等表示验证失败,返回写不写哇,你爱咋咋

将写好的接口发布到服务器上,然后在微信的消息配置页面填好信息,点击 提交 则会提示成功


官方给的PHP,我这二吊子水平用.Net写的代码给大家做参考:

    /// <summary>
/// 微信消息配置
/// </summary>
public class GetWxMsg : IHttpHandler
{
private static Logger logger = LogManager.GetCurrentClassLogger();
public void ProcessRequest(HttpContext context)
{
var signature = context.Request["signature"];
var timestamp = context.Request["timestamp"];
var nonce = context.Request["nonce"];
var echostr = context.Request["echostr"]; logger.Info("微信消息服务器验证传入数据" + string.Format("signature:{0},timestamp:{1},nonce:{2},echostr:{3}", signature, timestamp, nonce, echostr)); var token = "aaaaaaa";//自定义字段(自己填写3-32个字符) //timestamp和token和nonce 字典排序
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("token", token);
dic.Add("nonce", nonce);
dic.Add("timestamp", timestamp);
var list = dic.OrderBy(s => s.Value);
var conbineStr = "";
foreach (var s in list)
{
conbineStr = conbineStr + s.Value;
}
string data = conbineStr;
//sha1加密
string secret = FormsAuthentication.HashPasswordForStoringInConfigFile(conbineStr, "SHA1").ToLower();
var success = signature == secret;
if (success)
{
data = echostr;
}
context.Response.ContentType = "text/plain";
context.Response.Write(data);
}
 
 

微信小程序--消息推送配置Token令牌错误校验失败如何解决的更多相关文章

  1. Java实现 微信小程序 + 消息推送

    实现效果: 下面要显示五个字段 接下来,参照官方文档,一步步实现: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open- ...

  2. 微信小程序消息推送,前端操作

    <form bindsubmit="getFormId" report-submit="true"> <button form-type=&q ...

  3. 微信小程序消息通知-打卡考勤

    微信小程序消息通知-打卡考勤 效果: 稍微改一下js就行,有不必要的错误,我就不改了,哈哈! index.js //index.js const app = getApp() // 填写微信小程序ap ...

  4. 【微信小程序开发】页面配置

    app下的app.json文件是全局配置. app下的每一个page中,也可以配置.json文件. page中配置的内容是对应app中window配置项下的内容. page中的配置将覆盖window中 ...

  5. 微信小程序警告设置 enable-flex 属性以使 flexbox 布局生效的解决办法

    微信小程序警告设置 enable-flex 属性以使 flexbox 布局生效的解决办法 具体情况: scroll-view 滚动,设置 display:flex 不生效并警告设置 enable-fl ...

  6. .NET CORE 微信小程序消息验证的坑

    进入微信小程序,点击开发->选择消息推送->扫码授权,填写必要参数 进入接口开发: /// <summary> /// 验证小程序 /// </summary> / ...

  7. Java企业微信开发_05_消息推送之发送消息(主动)

    一.本节要点 1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接 ...

  8. Java企业微信开发_04_消息推送之发送消息(主动)

    源码请见: Java企业微信开发_00_源码及资源汇总贴 一.本节要点 1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息 ...

  9. 微信小程序Server端环境配置

    主要内容:1. SSL免费证书申请步骤2. Nginx HTTPS 配置3. TLS 1.2 升级过程 微信小程序要求使用 https 发送请求,那么Web服务器就要配置成支持 https,需要先申请 ...

随机推荐

  1. 第三百四十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—通过自定义中间件全局随机更换代理IP

    第三百四十八节,Python分布式爬虫打造搜索引擎Scrapy精讲—通过自定义中间件全局随机更换代理IP 设置代理ip只需要,自定义一个中间件,重写process_request方法, request ...

  2. Spring JDBC更新数据

    以下示例将展示如何使用Spring jdbc执行更新数据库表的记录,这里演示如何更新student表中指定条件的记录. 语法: String updateQuery = "update St ...

  3. 114ic电子元器件网

    http://www.114ic.cn/datasheet-pdf/TPA0211DGN-163932.html

  4. (源)VC助手VA破解使用指南

    一般情况下,你下载的破解版的VC助手,要么自带的有一个名为VA_X.dll的文件,要么是有一个可运行的破解程序,根据不同的情况进行如下操作,只要你下载的安装文件没有问题,就能正确打上破解补丁.网上有一 ...

  5. 每天一个linux命令:Linux 目录结构

    对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统至关只要,下面 ...

  6. Win10无法使用内置管理员用户打开edge解决方案

    https://jingyan.baidu.com/article/4f7d5712d23f1b1a2119274b.html

  7. table中td的内容换行。

    table设置样式: table-layout: fixed; td设置: word-wrap: break-word;

  8. java 项目 存入mysql后 变问号 MySql 5.6 (X64) 解压版 1067错误与编码问题的解决方案

    [参考]MySQL 5.7.19 忘记密码 重置密码 my.ini示例 服务启动后停止 环境 Java环境JDK1.8  安装好了 mysql-5.6.38-winx64  idea2016(64) ...

  9. 【翻译自mos文章】在RHEL7/OL7上安装Oracle 12.1.0.2的server端或者client时,报须要&quot;compat-libstdc++&quot;包

    在RHEL7/OL7上安装Oracle 12.1.0.2的server端或者client时,报须要"compat-libstdc++"包 来源于: Installation of ...

  10. Android 混淆代码有关问题总结

    Android 混淆代码问题总结 Android 混淆代码: 最快的方式: 1. 首先更新Android的SDK至最新版本,重新建立1个工程,把源码和资源及其他文件拷到新的工程里面. 2. 工程目录底 ...