最近做一个手机来电及短息转发的应用场景,在实践过程中发现微信并没有开放的接口用于微信接收信息!怎么办呢?我的解决办法就是建立一个微信企业公众平台(https://qy.weixin.qq.com/)使用开放平台发送消息接口,来进行消息转发!在这里不只是实现了将消息转发到自己的微信!也可以通过用户关注给某个用户或者某个组的人发送群发微信消息!美中不足的是上下只有200人!但是和朋友们使用的小应用是够了!我就设计了个朋友们的生日提醒器!在朋友生日的前三天群发消息到朋友们的微信进行提醒。
当然利用相同的方法还可以使用微信公众平台的开发者测试应用!开通了所有的权限!只是不能修改应用名称和人数上限200.大规模的服务应该使用认证后的号码这样就不会有那么多限制了.
<?php
//--------------------------------------------------------------------------------------------------
// This script reads event data from a JSON file and outputs those events which are within the range
// supplied by the "start" and "end" GET parameters.
//
// An optional "timezone" GET parameter will force all ISO8601 date stings to a given timezone.
//
// Requires PHP 5.2.0 or higher.
//--------------------------------------------------------------------------------------------------
/*
参数 必须 说明
touser 否 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
toparty 否 部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
totag 否 标签ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
msgtype 是 消息类型,此时固定为:text (支持消息型应用跟主页型应用)
agentid 是 企业应用的id,整型。可在应用的设置页面查看
content 是 消息内容,最长不超过2048个字节,注意:主页型应用推送的文本消息在微信端最多只显示20个字(包含中英文)
safe 否 表示是否是保密消息,0表示否,1表示是,默认0
*/
// Require our Event class and datetime utilities
//数据库类 medoo 百度了解即可
include_once 'medoo.php';
/*
* 获取access_token
*
*///应用的ID 及 key直接写在了连接里自行修改即可
$url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=这里是应用ID&corpsecret=应用KEY';
$a = array('a' =>'b');
//值为空出错!发送默认无用数据代替
$data = request_post($url,$a);
//echo $data;
$dat = json_decode($data);
$dat = object_array($dat);
//发送消息接口
$surl = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token='.$dat['access_token'];
header("Content-Type:text/html;charset=utf-8");
// 初始化配置MYSQL
$database = new medoo([
'database_type' => 'mysql',
'database_name' => 'mysql库名',
'server' => 'mysql连接域名',
'username' => '用户名',
'password' => '密码',
'charset' => 'utf8'
]);
// 插入数据示例
//数据库中的name表 和 name day tek 三个字段
$datas = $database->select("name", [
"name",//text
"day", // date
"tel" // text
]);
///阴历 阳历转换类
include_once 'class.r.php';
foreach ($datas as $key => $value) {
//var_dump($value);
//echo $value['name'];
//echo $value['day'];
//echo $value['tel'];
$a = $value['day'];
$a=substr($a,4);
$day = date('Y').$a;
$lunar=new Lunar();
$r_array = explode('-', $day);
$month=$lunar->convertLunarToSolar($r_array["0"],$r_array["1"],$r_array["2"]);
$d = $month[0].'-'.$month[1].'-'.$month[2];
$zero1=strtotime (date("y-m-d h:i:s")); //当前时间 ,注意H 是24小时 h是12小时
$zero2=strtotime ($d." 00:00:00"); //过年时间,不能写2014-1-21 24:00:00 这样不对
$guonian=ceil(($zero2-$zero1)/86400); //60s*60min*24h
$zero3=strtotime(date("y-m-d")); //当前时间 ,注意H 是24小时 h是12小时
$zero4=strtotime($value['day']); //过年时间,不能写2014-1-21 24:00:00 这样不对
$guonian2=ceil(($zero4-$zero3)/86400); //60s*60min*24h
$tian = abs(ceil($guonian2/365))+1;
//ID - 9
if ($guonian<=3&&$guonian>=1){
if ($guonian<1){
$guonian="今";
}
//"touser": "36488963", 发送给某个人
//"toparty": "9", 发送给组 ID = 9
$data_string='{
"toparty": "9",
"totag": "@al ",
"msgtype": "text",
"agentid": 0,
"text": {
"content": "'.$value['day'].'-'.$value['name'].'还有'.$guonian.'天就过'.$tian.'岁生日了,生日快乐。"
},
"safe":0
}';
//模拟post
http_post_data($surl,$data_string);
}
}
/*******************
//
// post json to web
//
//
********************/
function http_post_data($url, $data_string) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charset=utf-8',
'Content-Length: ' . strlen($data_string))
);
ob_start();
curl_exec($ch);
$return_content = ob_get_contents();
ob_end_clean();
$return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
return array($return_code, $return_content);
}
/******************
*
*
*
* post array
*
*
*
*********************/
function request_post($url = '', $param = '') {
if (empty($url) || empty($param)) {
return false;
}
$postUrl = $url;
$curlPost = $param;
$ch = curl_init();//初始化curl
curl_setopt($ch, CURLOPT_URL,$postUrl);//抓取指定网页
curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec($ch);//运行curl
curl_close($ch);
return $data;
}
//*对象转数组
function object_array($array) {
if(is_object($array)) {
$array = (array)$array;
} if(is_array($array)) {
foreach($array as $key=>$value) {
$array[$key] = object_array($value);
}
}
return $array;
}