根据企业号开发者文档的发送消息接口消息数据格式,要想向企业号成员发送消息必须用POST方式将JSON数据发送到指定的包含ACCESS_TOKEN的URL。

我想实现的是每隔一段时间间隔,查询数据库之后根据查询结果向特定成员发送消息。

我在自己的linux服务器的shell上通过编写curl命令已经可以成功地POST JSON数据,我自己的手机上也接到了信息,说明我对文档的理解和数据格式没有问题。但是这种方式必须把获取到的ACCESS_TOKEN HARD CODE到命令行中,而且TOKEN是有时限的,所以只能用来测试,不能用于生产环境中。

在生产环境中,我想的解决方案还是编写PHP/JAVASCRIPT程序来发送消息,然后在服务器端用CRON JOB来定时执行该PHP程序。但是由于对POST原理理解的不够到位,具体实现过程中碰到许多问题。

首先,如果只考虑可行性的话,能否用jQuery的ajax方法来实现呢?

在我的实验中,我先用PHP获取了正确的TOKEN,构建了URL,然后将URL值传递给了javascript 变量url,在console中尝试

$.ajax({

type: "POST",

url: url,

data: '{"touser":"Jacklyn","msgtype":"text","agentid":23,"text":{"content":"test message"}}',

success: function(){},

dataType: "json",

contentType : "application/json"

});

console返回了一个cross domain的错误,我理解因为cross domain的问题,我没法看到返回成功或失败的信息

但我的手机上也没有收到任何消息,所以发送应该是失败了。为了查看以上代码究竟发送了什么数据,我用另外一个文件来接收数据:

echo '

';

var_dump($_POST);

echo "

";

?>

但是在$.ajax返回的对象.responsText里可以看到POST的结果是

array(0) {}

如果我把AJAX方法中的datetype和contenttype去掉,在responseText中就能看到正确的数据。所以,第一个问题是,如果$.ajax发送的JSON格式的数据不能被$_POST接收到,在服务器端应如何读取发送的数据呢?

此外,我读了一些关于POST的文档,如果没有理解错的话,实际上POST传递的信息由两部分组成,一是HEADER,一是DATA;我也搜寻了一些关于如何通过PHP POST JSON数据的文章,读的不是很懂,似乎大部分文章都是说要先对HEADER进行一定程度的控制,然后才能POST JSON,这是不是意味着用javascript就无法实现呢?

最后,我用以下函数

function gotoUrl(path, params, method) {

//Null check

method = method || "post"; // Set method to post by default if not specified.

// The rest of this code assumes you are not using a library.

// It can be made less wordy if you use one.

var form = document.createElement("form");

form.setAttribute("method", method);

form.setAttribute("action", path);

//Fill the hidden form

if (typeof params === 'string') {

var hiddenField = document.createElement("input");

hiddenField.setAttribute("type", "hidden");

hiddenField.setAttribute("name", 'data');

hiddenField.setAttribute("value", params);

form.appendChild(hiddenField);

}

else {

for (var key in params) {

if (params.hasOwnProperty(key)) {

var hiddenField = document.createElement("input");

hiddenField.setAttribute("type", "hidden");

hiddenField.setAttribute("name", key);

if(typeof params[key] === 'object'){

hiddenField.setAttribute("value", JSON.stringify(params[key]));

}

else{

hiddenField.setAttribute("value", params[key]);

}

form.appendChild(hiddenField);

}

}

}

document.body.appendChild(form);

form.submit();

}

模拟一个表单提交数据,然后我尝试

gotoUrl(url,'{"touser":"shenkwen","msgtype":"text","agentid":23,"text":{"content":"test message"}}')

给url加上一个debug=1参数的话,可以看到postdata,以上代码的postdata是这样的:

data=%7B%22touser%22%3A%22shenkwen%22%2C%22msgtype%22%3A%22text%22%2C%22agentid%22%3A23%2C%22text%22%3A%7B%22content%22%3A%22test+message%22%7D%7D

看起来是把json字符串urlencode了,这是不是意味着在这个场合中所要求的json数据根本无法用表单方式提交?

微信 php post json,微信企业号:如何POST JSON数据发送消息给企业号成员相关推荐

  1. php 公众号指定人发消息,微信公众号客服接口给指定用户openid发送消息

    微信公众号客服接口给指定用户openid发送消息 2018-09-23 微信开发文档: 客服接口-发消息 接口调用请求说明 http请求方式: POSThttps://api.weixin.qq.co ...

  2. 微信公众号客服接口给指定用户openid发送消息

    微信开发文档: 客服接口-发消息 接口调用请求说明 http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/custom/send?acces ...

  3. 微信公众号利用客服接口主动给用户发送消息的方法

    目前微信并没有放出主动给用户发送消息的接口,但是我们可以使用其多客服接口来达到主动给用户发送消息的目的. 当用户和公众号产生特定动作的交互时(具体动作列表请见下方说明),微信将会把消息数据推送给开发者 ...

  4. 微信公众平台 发送消息-群发接口

    前言:最近做微信开发,弄了一个群发接口,本着不记录肯定会忘记的本事,在这里整理一下.多学习多进步.本文比较啰嗦,可以查看参考文章,我就是从那位大神那里学习到的.本片文章基于Spring开发,Sprin ...

  5. zabbix之微信告警(python版):微信个人报警,微信企业号告警脚本

    微信个人告警脚本 微信个人告警:使用个人微信,发送到微信群组,微信好友 两个脚本执行: 1)能连接网络 2)先执行server.py,扫描登录微信,登录之后没有报错,打开新终端查看端口是否起来了 3) ...

  6. 微信企业号开发(6)--发送消息

    [本文所描述的内容具有一定的时效性,请以实际开发所处环境为准] 今天我们介绍我们日常使用最频繁的发送消息功能,在企业号中,由于移除了诸多的限制,消息的发送量几乎没有限制.但是,在此,特别提醒大家,千万 ...

  7. 微信企业号开发:主动发送消息

    主企业号主动发送消息,也就是企业号主动推送的消息,适合于企业的通知,通告等.因此如果公司有通知,要求通知到所有员工,就应该使用主动发送消息. 格式是json格式,而且微信很灵活,当touser,top ...

  8. php微信 发送信息,PHP微信企业号主动给用户发送消息接口代码

    php微信企业号主动给用户发送消息接口代码 $corpid = "wx690e2a9380e2440dyt"; $secrect = "3g9l6dHy8qjYqYMWX ...

  9. java企业微信发送语言_java微信企业号开发之发送消息(文本、图片、语音)

    上篇文章介绍了开启回调模式,开始回调模式后我们就要实现聊天功能了.平时使用微信聊天可以发送文本消息.语音.图片.视频等,这里只实现了其中的一些功能和大家分享. 一.与微信企业号建立连接1.企业应用调用 ...

最新文章

  1. LeetCode简单题之七进制数
  2. 西安python工资怎么样-python西安薪资
  3. Chipseq数据库的建立
  4. Linux进程和计划任务管理
  5. STM32产品名称命名规则
  6. JavaScript异步
  7. 【kali】kali环境下安装dvwa
  8. c语言编写指针函数求和与两数交换值
  9. android 控件颜色随焦点变化实例
  10. Excel工作表保护在哪里撤销?
  11. LTE网络架构和协议栈
  12. mi5splus android9,小米5SPlus lineage16 安卓9.0 极致省电 纯净 完美root Xposed 经典版
  13. Insyde uefi 隐藏设置_联想台式机10代cpu装win10及bios设置教程(新bios设置)
  14. 电商自营藏猫腻 苏宁国美京东的套路谁最深?
  15. 免费高清图片素材网站
  16. 2017-2018-1 《程序设计与数据结构》课程总结
  17. Choerodon猪齿鱼实践之开发应用服务
  18. 面向金融场景的 Vue.js 移动端组件库 mand-mobile
  19. 识别INSB号码C语言如何讲述,探究机器码,深入研究C语言程序的机制
  20. 云出阿里见月明(上)

热门文章

  1. linux查看是否有用户在使用分区,在Linux服务器中有几种查看分区表的方法
  2. python文本分类评价指标 top1如何计算_python – Keras:如何计算多标签分类的准确......
  3. 风格化图像_【技术综述】人脸风格化核心技术与数据集总结
  4. c语言实验设计报告,C语言实验设计报告.doc
  5. 常考的 21 条 Linux 命令
  6. 皮一皮:夏天来了,蚊子叫了...
  7. 每日一皮:这个食堂好...
  8. 在Docker中运行Spring Boot的高级功能测试
  9. 每秒上万并发下的Spring Cloud参数优化实战
  10. 监控利器之 Prometheus