具体思路:
一、打通微信小程序和微信公众号
1、利用不同平台下,相同的unionid来判断是发送到那个用户
2、获取微信小程序openid和unionid >>官方文档
3、获取微信公众号openid和unionid (触发条件是,用户的关注公众号和不在关注)。详情见下面代码
需开启服务器配置的前提下

二、开通开发者账户官方链接,需要另外再付300元
1、保证公众号是服务号
2、保证公众号、小程序绑定在同一开发者账户下
3、保证公众号、小程序相互关联
4、公众号后台开通服务器配置(开通后公众号底部板块需要自定义)公众号自定义导航文档
5、开发者平台是不同于公众号和小程序独立的平台

文件一:url.php

<?php
$loadingTimeStart = microtime(true);
?>
<?php
/*** wechat php test*/
define("TOKEN", "cuangxian2021");//把这里的weixin 改成你的TOKEN
$access_token_mp = $access_token_mp ? $access_token_mp : access_token_mp(); //这里是利用微信appid和secret换取access_token
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
$wechatObj->responseMsg();
class wechatCallbackapiTest
{public function valid(){$echoStr = $_GET["echostr"];if($this->checkSignature()){echo $echoStr;//服务器配置验证成功//exit;}else{//服务器配置验证失败}}public function responseMsg(){global $conn;$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];if($_GET["debug"]=="true"){$postStr = "<xml><ToUserName><![CDATA[gh_aef7f2518443]]></ToUserName>
<FromUserName><![CDATA[oLT1Z6GFAZYXWO-s0bhqfyMk46n0]]></FromUserName>
<CreateTime>1555988221</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[user_get_card]]></Event>
<CardId><![CDATA[pLT1Z6KjXab7hYXSco39gKD8LeCc]]></CardId>
<IsGiveByFriend>0</IsGiveByFriend>
<UserCardCode><![CDATA[146787302551]]></UserCardCode>
<FriendUserName><![CDATA[]]></FriendUserName>
<OuterId>0</OuterId>
<OldUserCardCode><![CDATA[]]></OldUserCardCode>
<IsRestoreMemberCard>0</IsRestoreMemberCard>
<IsRecommendByFriend>0</IsRecommendByFriend>
<SourceScene><![CDATA[SOURCE_SCENE_UNKNOW]]></SourceScene>
<UnionId><![CDATA[oddqd1ViNaH0RgXH-6BcuNbd6hyU]]></UnionId>
</xml>";}if (!empty($postStr)){//引用global $access_token_mp;//主体/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,the best way is to check the validity of xml by yourself */libxml_disable_entity_loader(true);$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);/*转换xml*//*前后加双引号,转成字符串*/$ToUserName = trim($postObj->ToUserName);  //起始ID$FromUserName = trim($postObj->FromUserName);  //触发事件的用户 openid$CreateTime = $postObj->CreateTime;  //时间截$MsgType = trim($postObj->MsgType);  //Msg类型  event[事件]、text[文本]$Event = trim($postObj->Event);  //事件名$EventKey = trim($postObj->EventKey);  //事件里包含的内容//$EventKey = str_replace("qrscene_","", $EventKey);  //清楚字符//$content = trim($postObj->Content);  //微信里面发送的内容$UnionId = trim($postObj->UnionId);//领券用户的UnionId$CardId = trim($postObj->CardId);//卡券ID。$UserCardCode = trim($postObj->UserCardCode);//code序列号。if($MsgType == "event"){if($Event == "subscribe"){//订阅$contentStr = "欢迎关注我们啊啊啊!";kefu_send($FromUserName, "text", $contentStr);/** 【客服接口-发消息】* https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140547* msgtype   文本text 图片image 图文mpnews*/function kefu_send($openid, $msgtype ,$content) {//引用global $access_token_mp;//主体$data = array();$data["touser"] = $openid;$data["msgtype"] = $msgtype;if($msgtype=="text"){$data["text"] = array();$data["text"]["content"] = $content;}elseif($msgtype=="image"){$data["image"] = array();$data["image"]["media_id"] = $content;}elseif($msgtype=="mpnews"){$data["mpnews"] = array();$data["mpnews"]["media_id"] = $content;}elseif($msgtype=="wxcard"){$data["wxcard"] = array();$data["wxcard"]["card_id"] = $content;}$url="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$access_token_mp.""; $dataRes = curl_post($url, json_encode($data,JSON_UNESCAPED_UNICODE));//传输的内容里面有汉字  需要添加(JSON_UNESCAPED_UNICODE)$res = json_decode($dataRes,true);//**********************************************************************************return $res;}//获取用户信息$userInfo_url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token_mp."&openid=".$FromUserName."&lang=zh_CN";$json_info = curl_get($userInfo_url);$info = json_decode($json_info, true);$openid = $info["openid"];$unionid = $info["unionid"];//获取微信公众号unionidif($unionid){$rmu = _get_one('a_member_unionid',$unionid,'unionid');//利用unionid查看当前用户是否存在//数据整合$dataArr=array();  $dataArr["openid_mp"]=$openid;//获取微信公众号openid$dataArr["is_subscribe"]=1;//表示用户已关注公众号if ($rmu){//存在_update('a_member_unionid',$dataArr,$rmu["id"]);//修改为用户已关注公众号}else{$dataArr["unionid"]=$unionid;$dataArr["addTime"]=time();$dataArr["addip"]=formip();_insert('a_member_unionid',$dataArr);//新增一条记录为用户已关注公众号}
//                                  //更新会员信息
//                                  $rm = _get_one('a_member',$unionid,'WXunionid');
//                                  if($rm){//                                      _query("update a_member set WXopenid_mp='{$FromUserName}' where id='{$rm["id"]}'");
//                                  }}}elseif($Event == "unsubscribe"){//退订//修改为用户已取消关注公众号_query("update a_member_unionid set is_subscribe='0' where openid_mp='{$FromUserName}'");}elseif($Event == "CLICK"){//点击}}elseif($MsgType == "text"){ $contentStr = "联系方式:".mainConfig("web_1"); kefu_send($FromUserName, "text", $contentStr);//$content = trim($postObj->Content);//jiLuRiZhi("0006【咨询的内容】\r\n".$content."",$FromUserName);//回复//$contentStr = "联系方式:0551-63520015\r\n服务时间:8:30-18:00";//$this->return_text($postObj,$contentStr);}//记录结束时间global $loadingTimeStart;$loadingTimeEnd = microtime(true);$loadingTimeTotal = $loadingTimeEnd - $loadingTimeStart;}else {echo '';exit;}}//回复文本信息private function return_text($postObj,$contentStr){$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>";$time = time();$resultStr = sprintf($textTpl, $postObj->FromUserName, $postObj->ToUserName, $time, $contentStr);echo $resultStr;//exit;}//验证身份private function checkSignature(){// you must define TOKEN by yourselfif (!defined("TOKEN")) {throw new Exception('TOKEN is not defined!');}$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"];$token = TOKEN;$tmpArr = array($token, $timestamp, $nonce);// use SORT_STRING rulesort($tmpArr, SORT_STRING);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}}
}
?>

三、发送公众号模板通知
发送的前提是:微信小程序和微信公众号的openid以及unionid不为空

<?php//发送模板信息_mpfunction send_template_mp($template){$url= "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" . access_token_mp() . "";$res = curl_post($url,urldecode($template));//登记日志$logStr = "【发送模板消息-提交数据】:\r\n".json_encode($res, true);log_result($logStr,"log_wxmp",date("Ymd")."_template.txt");return $res;}//整合模板数据_mp//$wxapp_template_mp["open"] true//$wxapp_template_mp["open"] 消息模板ID//$rum["WXopenid_mp"] 微信公众号openidif(formip()!="127.0.0.1" && $wxapp_template_mp["open"] && $wxapp_template_mp["template_id"]["order_admin51"]){$sqlxm="select * from a_member_unionid where is_subscribe=1";$arrxm=_get_all($sqlxm);foreach ($arrxm as $rsxm) :   $rum = _get_one("a_member",$rsxm["openid"],"WXopenid");if($rum && $rum["WXopenid_mp"]){$contex = "您有待支付订单已经取消";$template = '{"touser":"'.$rum["WXopenid_mp"].'",      "template_id":"'.$wxapp_template_mp["template_id"]["order_admin51"].'","url":"",  "data":{"first": {"value":"'.$contex.'","color":"#173177"},"keyword1":{"value":"'.$rsDG["danhao"].'","color":"#173177"},"keyword2": {"value":"用户手动取消", "color":"#173177"},"remark":{"value":"请注意查看!","color":"#173177"}}}';$template = json_decode($template, true);$template = json_encode($template);$res = send_template_mp($template);}endforeach ;}     ?>

微信小程序发送微信公众号模板消息相关推荐

  1. 50行代码实现的艺术签名设计微信小程序,轻松对接公众号,涨粉神器,学习赚钱两不误.微信公众号引流工具.html,python学习小项目.艺术签名设计微信小程序,前端学习小项目有趣的项目

    50行代码实现的艺术签名设计微信小程序,轻松对接公众号,涨粉神器,学习赚钱两不误 先看效果 这个小程序实现艺术签名设计的功能 对接到公众号之后,相当于给你的公众号添加了一个功能,别人关注公众号后,可以 ...

  2. 微信小程序下获取公众号openId

    微信小程序下获取公众号openId 一.为什么我们需要在小程序下面获取公众号的openId呢? 微信公众号和微信小程序我们一般都会开发,有一种场景我们经常会遇到,公众号的消息推送以较成熟,我们希望把小 ...

  3. C#开发微信门户及应用(27)-公众号模板消息管理

    原文:C#开发微信门户及应用(27)-公众号模板消息管理 通过模板消息接口,公众号能向关注其账号的用户发送预设模板的消息.模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中, ...

  4. 微信小程序可以打开公众号文章

    微信今日晚间发布消息,宣布微信小程序基础能力.开发者工具全面升级,新增多项能力. 基础功能方面: 1.小程序新增打开公众号文章功能.可以打开已关联公众号的文章,不过文章内暂不支持赞赏.广告.关注公众号 ...

  5. 微信小程序跳转公众号图文内容

    显示公众号推文 <web-view src="http://....."></web-view> <!--小程序要绑定公众号--> web-vi ...

  6. 微信小程序跳转公众号

    长按识别跳转 步骤: 新建一个页面使用web-view组件的src链接到公众号编辑好的一篇带有公众号的二维码的文章 微信规则只有小程序关联的公众号里的文章可以长按识别二维码 <template& ...

  7. 移动手机网站H5页面如何一键打开拉起微信小程序快速关注公众号功能?

    为了方便自己或公司H5网站页面上,能够让用户一键点击按钮,拉起打开微信小程序.实现让用户快速使用微信小程序功能.让用户快捷方便的关注公众号.快速添加微信客服等功能.可以利用H5链接微信环境外打开微信小 ...

  8. 微信小程序跳转公众号文章 web-view方式

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.在微信公众号里面关联小程序 二.在小程序里面关注微信公众号 三.使用公众号来发布文章 前言 提示:这里可以添加本文 ...

  9. 发送微信小程序卡片到公众号

    微信服务号下可以主动给用户推送小程序卡片,但是得用户授权接受消息才可以,小程序卡片点击即可跳转到小程序中对应的页面 前提是服务号要与小程序绑定,且是同一主体. 1.发送卡片工具类 @Component ...

  10. 微信小程序跳转公众号(引导关注)之 使用公众号消息

    1.首先 在微信公众号后台发送一条消息,这条消息你可以定向发送给自己看到就行.如图: 内容里面放生产的公众号二维码:微信会提示你是否生产这个跳转连接,还是只是放二维码 2:第二步 在小程序里面使用 s ...

最新文章

  1. NIO Socket编程实例
  2. myeclipse修改编译器版本的方法 .
  3. Xamarin Android开发实战(上册)
  4. python和c语言有什么关系-Python与C语言有什么区别?
  5. 信贷风控知识问答库(持续更新)
  6. IT从业者都应关注的软件行业的变化
  7. php怎么根据接口文档实现功能,CodeIgniter+swagger实现 PHP API接口文档自动生成功能...
  8. wxWidgets:wxEraseEvent类用法
  9. Node.js 应用故障排查手册 —— 利用 CPU 分析调优吞吐量
  10. 简单实用的PS亮度蒙版工具:Lumenzia Mac版
  11. ubantu 黑屏_死机黑屏专题上线啦,早鸟只要299,看完薪水翻一番
  12. Python让繁琐工作自动化——chapter12 处理Excel电子表格
  13. PHP Cookbook读书笔记 – 第11章Session和持久化
  14. ws2812b灯带容易坏_WS2812B灯带STC驱动
  15. PS RGB通道抠图方法
  16. Hive实现同比环比计算
  17. 平板电脑可以用手写的计算机软件,手写平板电脑哪款好 手写平板电脑有哪些推荐...
  18. TILDE: A Temporally Invariant Learned DEtector学习笔记
  19. glassfish插件_Eclipse4.2.2安装GlassFish插件
  20. Android获取硬件设备详细信息

热门文章

  1. Word中插入图表目录
  2. wps怎么插入目录,快速插入目录的操作步骤
  3. 【谷歌浏览器】国内如何配置谷歌浏览器使用
  4. SpringBoot实现抽奖大转盘
  5. 微信公众号(服务号)授权登录
  6. 数据分析案例(4)京东数据分析项目
  7. 机房冷风吹-linux基础环境搭建(基础篇)
  8. 测试苹果手机主板软件,iphone手机硬件检测工具使用方法
  9. WebCralwer_java
  10. Selenium使用之——键盘操作方法