1.  
  2. //获取accesstoken 的方法
    public function index(){
  3. $appId = 'wxd0e50fe967dccccc';
  4. $appSecret = 'd7f6be12ce41b60ss0f45054';//虚拟的,不要用
  5. $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret;
  6. $ch = curl_init();//初始化curl
  7. curl_setopt($ch, CURLOPT_URL,$url); //要访问的地址
  8. curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  9. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//跳过证书验证
  10. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
  11. $data = json_decode(curl_exec($ch));
  12. if(curl_errno($ch)){
  13. var_dump(curl_error($ch)); //若错误打印错误信息
  14. }
  15. var_dump($data); //打印信息
  16.  
  17. curl_close($ch);//关闭curl
  18. }

获取accesstoken 的第二种方法,将accesstoken存在text文件中每隔2小时刷新一次

  1. <?php
  2. class TokenUtil {
  3. //获取access_token并保存到token.txt文件中
  4. public static function build_access_token(){
  5. $ch = curl_init(); //初始化一个CURL对象
  6. curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx2e9f8435ebdb2856&secret=288db114f02b2b5cdc249ca75a4bf1cc");//设置你所需要抓取的URL
  7. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设置curl参数,要求结果是否输出到屏幕上,为true的时候是不返回到网页中,假设上面的0换成1的话,那么接下来的$data就需要echo一下。
  8. $data = json_decode(curl_exec($ch));
  9. if($data->access_token){
  10. $token_file = fopen("token.txt","w") or die("Unable to open file!");//打开token.txt文件,没有会新建
  11. fwrite($token_file,$data->access_token);//重写tken.txt全部内容
  12. fclose($token_file);//关闭文件流
  13. }else{
  14. echo $data->errmsg;
  15. }
  16. curl_close($ch);
  17. }
  18.  
  19. //设置定时器,每两小时执行一次build_access_token()函数获取一次access_token
  20. public static function set_interval(){
  21. ignore_user_abort();//关闭浏览器仍然执行
  22. set_time_limit(0);//让程序一直执行下去
  23. $interval = 7200;//每隔一定时间运行
  24. do{
  25. build_access_token();
  26. sleep($interval);//等待时间,进行下一次操作。
  27. }while(true);
  28. }
  29.  
  30. //读取token
  31. public static function read_token(){
  32. $token_file = fopen("token.txt", "r") or die("Unable to open file!");
  33. $rs = fgets($token_file);
  34. fclose($token_file);
  35. return $rs;
  36. }
  37. }
  38. ?>

当然ACCESS_TOKEN是会过期的
自己需要整合这个api自动获取
我们学习过程中做测试可以直接获取粘贴上去。
当然调用这个接口需要配置IP白名单
如果获取过程中出现一串英文,里面有IP地址,就说明你还没配置IP白名单
你需要进入公众号后台安全中心-IP白名单-粘贴提示的IP地址即可

如果你要给指定的openID群发模板消息
例如你公司做教育培训服务的
有3个学生报了你们公司的某课程培训班
你需要在上课前15分钟主动向每个学生的微信推送模板消息通知上课
那么这三个学生需要关注你的服务号
你还要获取到这三个学生的openID
然后存入数组中,遍历数组发送即可。

获取openID的方法
1、配置回调域名
进入公众号,接口权限,找到网页服务,网页获取用户基本信息

进去修改你的域名即可

新建oauth.php

  1. <?php
  2. //获取微信access_token
  3. function getaccess_token(){
  4. $code = $_GET['code'];
  5. $appid = '自己的appid';
  6. $appsecret = '自己的appsecret';
  7. $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&secret={$appsecret}&code={$code}&grant_type=authorization_code";
  8. $ch = curl_init();
  9. curl_setopt($ch, CURLOPT_URL,$url);
  10. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  11. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
  12. $data = curl_exec($ch);
  13. curl_close($ch);
  14. echo $data;
  15. }
  16. getaccess_token();

配置用户要访问的网页
https://open.weixin.qq.com/co...

REDIRECT_URI是回调链接
就是上面的oauth.php的地址
例如你的域名是
www.baidu.com
你把oauth.php上传到根目录
那么URL转码的回调链接就是
http://www.baidu.com/oauth.php

回调链接需要URL转码
给大家提供一个转码工具

http://tool.oschina.net/encod...

最终的回调链接是
http%3A%2F%2Fwww.baidu.com%2Foauth.php

例如的你APPID是:wx66666666666666
整个用户要访问的网页就是
https://open.weixin.qq.com/co...://www.baidu.com/oauth.php&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

用户访问的网页也需要URL转码
最终的网址是:
https%3A%2F%2Fopen.weixin.qq.com%2Fconnect%2Foauth2%2Fauthorize%3Fappid%3Dwx66666666666666%26redirect_uri%3Dhttp%3A%2F%2Fwww.baidu.com%2Foauth.php%26response_type%3Dcode%26scope%3DSCOPE%26state%3DSTATE%23wechat_redirect

然后用微信访问上面的最终的网址,就会返回一串JSON数据,里面有openid
要想获得3个学生的openid那么就要这三个学生点进去,获取发给你

下面就是模板消息推送给指定的openid的代码
我就以这三个学生的openid为例

  1. <?php
  2. $ACCESS_TOKEN = "替换你的ACCESS_TOKEN";//ACCESS_TOKEN
  3. //openid数组
  4. $touser = [
  5. 'ouD7BuHpIKRXPIz7pdrwI9IwDRCU',
  6. 'ouD7BuI36wSUZgteyiydmDrldQLU',
  7. 'ouD7BuLejq7R4Vbuyh41bH778cg0'];
  8. //模板消息请求URL
  9. $url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" . $ACCESS_TOKEN;
  10.  
  11. //遍历发送微信消息
  12. foreach ($touser as $value) {
  13. $data = getDataArray($value);
  14. $json_data = json_encode($data);//转化成json数组让微信可以接收
  15. $res = https_request($url, urldecode($json_data));//请求开始
  16. $res = json_decode($res, true);
  17. if ($res['errcode'] == 0 && $res['errcode'] == "ok") {
  18. echo "发送成功!<br/>";
  19. }
  20. }
  21.  
  22. //获取发送数据数组
  23. function getDataArray($value)
  24. {
  25. $data = array(
  26. 'touser' => $value, //要发送给用户的openid
  27. 'template_id' => "mfopDNUlvoBGGsPLB-d_nrfL8Je92xnTq5vk5ZBxL-w",//改成自己的模板id,在微信后台模板消息里查看
  28. 'url' => "http://mp.weixin.qq.com/s/8UWPqHVa8PReWZp-No0ebA", //自己网站链接url
  29. 'data' => array(
  30. 'first' => array(
  31. 'value' => "亲爱的同学,您有考试提醒,请查阅。",
  32. 'color' => "#000"
  33. ),
  34. 'keyword1' => array(
  35. 'value' => "2017下半年教师资格证面试",
  36. 'color' => "#f00"
  37. ),
  38. 'keyword2' => array(
  39. 'value' => "2018-1-6",
  40. 'color' => "#173177"
  41. ),
  42. 'keyword3' => array(
  43. 'value' => "请看您的准考证",
  44. 'color' => "#3d3d3d"
  45. ),
  46. 'keyword4' => array(
  47. 'value' => "教师资格证试讲",
  48. 'color' => "#3d3d3d"
  49. ),
  50. 'keyword5' => array(
  51. 'value' => "答辩,选题,结构化",
  52. 'color' => "#3d3d3d"
  53. ),
  54. 'remark' => array(
  55. 'value' => "\n现在是打印准考证时间,请您在考试前打印准考证,戳进来可以查看详情>>>",
  56. 'color' => "#3d3d3d"
  57. ),
  58. )
  59. );
  60. return $data;
  61. }
  62.  
  63. //curl请求函数,微信都是通过该函数请求
  64. function https_request($url, $data = null)
  65. {
  66. $curl = curl_init();
  67. curl_setopt($curl, CURLOPT_URL, $url);
  68. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  69. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
  70. if (!empty($data)) {
  71. curl_setopt($curl, CURLOPT_POST, 1);
  72. curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
  73. }
  74. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  75. $output = curl_exec($curl);
  76. curl_close($curl);
  77. return $output;
  78. }
  79.  
  80. ?>

新建test.php
拷贝代码
修改你的
ACCESS_TOKEN
修改你的学生的3个openid
修改你的模板ID
模板ID是什么?
就是你要推送的那个卡片的模板
例如支付成功模板,上课通知模板,发货模板....

php三方网站使用微信公众号推送文章的更多相关文章

  1. 笔记:《机器学习训练秘籍》——吴恩达deeplearningai微信公众号推送文章

    说明 该文为笔者在微信公众号:吴恩达deeplearningai 所推送<机器学习训练秘籍>系列文章的学习笔记,公众号二维码如下,1到15课课程链接点这里 该系列文章主要是吴恩达先生在机器 ...

  2. svg微信公众号推文实现点击显示答案

    svg微信公众号推文实现点击显示答案 大家都知道微信公众号推文不能写js 所以不能加点击事件 其实是对的 确实不能写js 但是点击事件可以用svg写  svg代码可不会隐蔽 下面我直接贴代码 < ...

  3. $Django 支付宝支付,微信服务号推送消息 (测试需要把应用程序部署到服务器上)

    一 支付宝支付 大概 支付宝支付 正式环境:需要用营业执照去申请商户号,appid 测试环境:沙箱环境:https://openhome.alipay.com/platform/appDaily.ht ...

  4. 爬虫技术:从sougou网站访问微信公众号的过程

    一:分析过程:fidder + chrome开发者工具 1:输入nba跳转的页面,每页显示10条相关公众号的信息 2:分析网站得到每条标题的详情页链接地址在: 3,请求上图中的url,会返回一段js代 ...

  5. 通过微信服务号推送Zabbix告警

    近期看到一篇通过微信实现Zabbix告警的文章,但实践时发现,无法成功发送消息. 分析原因,应该是微信公众平台加强了登录验证,在登录时会需要管理员进行扫描二维码操作才能成功登陆后台: 而之前文章中的A ...

  6. JAVA微信公众号网页开发——将文章群发到微信公众号中(文章使用富文本,包含图片)

    SendTextToAllUserAct.java package com.weixin.sendmessage; import org.apache.commons.lang.StringUtils ...

  7. 微信公众号、H5、APP三者各有什么优势?

    昨天给大家分享了一个现在很热的H5,众所周知,当下H5手机网站.微信公众号.APP这三种载体都越来越火了,而且三者都有各自的一些优势和劣势. HTML5(H5) H5之所以能引发如此广泛的效应,根本在 ...

  8. Python+Tornado开发微信公众号

    本文已同步到专业技术网站 www.sufaith.com, 该网站专注于前后端开发技术与经验分享, 包含Web开发.Nodejs.Python.Linux.IT资讯等板块. 本教程针对的是已掌握Pyt ...

  9. .net微信公众号开发——消息与事件

    作者:王先荣    本文介绍如何处理微信公众号开发中的消息与事件,包括:(1)消息(事件)概况:(2)验证消息的真实性:(3)解析消息:(4)被动回复消息:(5)发送其他消息.    开源项目地址:h ...

随机推荐

  1. 51. spring boot属性文件之多环境配置【从零开始学Spring Boot】

    原本这个章节是要介绍<log4j多环境不同日志级别的控制的>但是没有这篇文章做基础的话,学习起来还是有点难度的,所以我们先一起了解下spring boot属性文件之多环境配置,当然文章中也 ...

  2. mongodb replica set 添加/删除节点方法--http://www.ii123.com/jc/bc/bczh/258948.html

    replica set多服务器主从,添加,删除节点,肯定会经常遇到的.下面详细说明一下,添加,删除节点的2种方法. 一,利用rs.reconfig,来添加,删除节点 1,添加节点  代码如下   re ...

  3. hdu3461

    题意描述:有一个类似滚轮式的密码锁放在一排共n个,有m种操作每次操作一个区间,且此次操作后的所有密码相同,问最多能形成多少种密码 解决:将区间分为可变部分和不可变部分,没当有可变部分时候总区间数要减去 ...

  4. Code(poj 17801)

    求出一个长度为10^n+n-1的序列,其中包含了所有的n位数(一共10^n个数,从00000(n个0)~10^n-1) /* 典型的欧拉回路题目 对于n=4为密码想要序列最短 那么 1234 234? ...

  5. [poj2425]A Chess Game_博弈论

    A Chess Game poj-2425 题目大意:题目链接 注释:略. 想法:这个题就是为什么必须要用记忆化搜索.因为压根就不知道后继是谁. 我们通过SG定理可知:当前游戏的SG值等于所有子游戏的 ...

  6. 洛谷—— P2149 [SDOI2009]Elaxia的路线

    https://www.luogu.org/problem/show?pid=2149 题目描述 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两 ...

  7. [bzoj 1047][HAOI2007]理想正方形(单调队列)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 分析: 第一感觉二维线段树当然没问题但是挺慢的. 注意到要求的正方形形中的最大最小边长是 ...

  8. 洛谷 P1993 小K的农场

    P1993 小K的农场 题目描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三种形式描述: 农场a比农场b ...

  9. Ubuntu 16.04安装Insight实现汇编的调试

    由于Ubuntu从9.04开始就把Insight从APT源中删除,所以使用APT无法安装,而且<Assembly Language Step By Step, for Linux!>此书讲 ...

  10. ExtJs--09--javascript对象的方法的3种写法 prototype通过原型设置方法效率最好

    /** * javascript对象的方法的3种写法 推荐第三种 运行效率最好 */ function P(name , age){ this.name = name ; this.age = age ...