2019-04-12 12:49:30 qq_35713752 阅读数 1650
  • 微信公众号开发6-事件开发管理-微信开发php

    微信公众平台开发之事件开发管理是子恒老师《微信公众平台开发》视频教程的第6部。详细讲解了用php开发微信,对微信公众平台中的常见事件管理开发。内容包含微信关注事件,取消关注事件等等,其它的事件会在相应的章节中详细讲述。欢迎反馈,微信/QQ:68183131

    4754 人正在学习 去看看 秦子恒

微信小程序开发交流qq群   173683895

   承接微信小程序开发。扫码加微信。

基础库 2.3.0 开始新出了一个组件,可以实现从小程序端直接关注公众号的组件,名为:official-account。

该组件的作用是:

公众号关注组件。当用户扫小程序码打开小程序时,开发者可在小程序内配置公众号关注组件,方便用户快捷关注公众号,可嵌套在原生组件内。

Tips

  1. 使用组件前,需前往小程序后台,在“设置”->“接口设置”->“公众号关注组件”中设置要展示的公众号。注:设置的公众号需与小程序主体一致。

  2. 在一个小程序的生命周期内,只有从以下场景进入小程序,才具有展示引导关注公众号组件的能力:

    • 当小程序从扫小程序码场景(场景值1047)打开时
    • 当小程序从聊天顶部场景(场景值1089)中的「最近使用」内打开时,若小程序之前未被销毁,则该组件保持上一次打开小程序时的状态
    • 当从其他小程序返回小程序(场景值1038)时,若小程序之前未被销毁,则该组件保持上一次打开小程序时的状态
  3. 组件限定最小宽度为300px,高度为定值84px。

  4. 每个页面只能配置一个该组件。

  5. 属性名 类型 说明
    bindload EventHandle 组件加载成功时触发
    binderror EventHandle 组件加载失败时触发

    detail 对象

    属性名 类型 说明
    status Number 状态码
    errMsg String 错误信息

    status 有效值

    说明
    -2 网络错误
    -1 数据解析错误
    0 加载成功
    1 小程序关注公众号功能被封禁
    2 关联公众号被封禁
    3 关联关系解除或未选中关联公众号
    4 未开启关注公众号功能
    5 场景值错误
    6 重复创建

    示例代码

    <official-account></official-account>
2019-10-08 11:00:16 qq_38399751 阅读数 28
  • 微信公众号开发6-事件开发管理-微信开发php

    微信公众平台开发之事件开发管理是子恒老师《微信公众平台开发》视频教程的第6部。详细讲解了用php开发微信,对微信公众平台中的常见事件管理开发。内容包含微信关注事件,取消关注事件等等,其它的事件会在相应的章节中详细讲述。欢迎反馈,微信/QQ:68183131

    4754 人正在学习 去看看 秦子恒

一、迁移注意事项

 I、账号迁移申请提交后原账号用户信息无法再通过接口获取

 II、申请提交后,opneid装换接口最多保留15天,超过15天接口失效,无法继续装换openid

III、装换的openid不应都能装换完成,只有关注旧公众号的用户继续关注新公众号,openid才能完成装换,否则无法得到装换的新openid

二、迁移步骤

I、获取旧公众号用户信息

1、通过微信api获取,点击查看官方文档

   附官网说明:

公众号可通过本接口来获取帐号的关注者列表,关注者列表由一串OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的)组成。一次拉取调用最多拉取10000个关注者的OpenID,可以通过多次拉取的方式来满足需求。

接口调用请求说明

http请求方式: GET(请使用https协议)
https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID
参数 是否必须 说明
access_token 调用接口凭证
next_openid 第一个拉取的OPENID,不填默认从头开始拉取

返回说明

正确时返回JSON数据包:

{
    "total":2,
    "count":2,
    "data":{
    "openid":["OPENID1","OPENID2"]},
    "next_openid":"NEXT_OPENID"
}
参数 说明
total 关注该公众账号的总用户数
count 拉取的OPENID个数,最大值为10000
data 列表数据,OPENID的列表
next_openid 拉取列表的最后一个用户的OPENID

错误时返回JSON数据包(示例为无效AppID错误):

{"errcode":40013,"errmsg":"invalid appid"}

附:关注者数量超过10000时

当公众号关注者数量超过10000时,可通过填写next_openid的值,从而多次拉取列表的方式来满足需求。

具体而言,就是在调用接口时,将上一次调用得到的返回中的next_openid值,作为下一次调用中的next_openid值。

示例如下:

公众账号A拥有23000个关注的人,想通过拉取关注接口获取所有关注的人,那么分别请求url如下:https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN 返回结果:
{
  "total":23000,
  "count":10000,
  "data":{"
     openid":[
        "OPENID1",
        "OPENID2",
        ...,
        "OPENID10000"
     ]
   },
   "next_openid":"OPENID10000"
}https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID1返回结果:
{
   "total":23000,
   "count":10000,
   "data":{
     "openid":[
       "OPENID10001",
       "OPENID10002",
       ...,
       "OPENID20000"
     ]
   },
   "next_openid":"OPENID20000"
}https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID2返回结果(关注者列表已返回完时,返回next_openid为空):
{
   "total":23000,
   "count":3000,
   "data":{"
       "openid":[
         "OPENID20001",
         "OPENID20002",
         ...,
         "OPENID23000"
       ]
   },
   "next_openid":"OPENID23000"
}

ps:将openid批量存入数据库或者写入文件存贮即可

2、通过网页工具在线获取用户信息

 

,填写完毕后点击检查问题就会返回用户列表信息

 

II、提交迁移申请

提交迁移公众号申请,如何迁移请查看微信官方文档

III、转换新公众号用户openid

1、接口说明,见文档

附说明:

openid转换接口

账号迁移后,粉丝的openid会变化,微信用户关注不同的公众号,对应的openid是不一样的,迁移成功后,粉丝的openid以目标帐号(即新公众号)对应的OpenID为准。但开发者可以通过开发接口转换openid,开发文档可以参考:

提供一个openid转换的API接口,当帐号迁移后,可以通过该接口:
1. 将原帐号粉丝的openid转换为新帐号的openid。
2. 将有授权关系用户的openid转换为新帐号的openid。
3. 将卡券关联用户的openid转换为新帐号的openid。

◆ 原帐号:准备要迁移的帐号,当审核完成且管理员确认后即被回收。
◆ 新帐号:用来接纳粉丝的帐号。新帐号在整个流程中均能正常使用。

一定要按照下面的步骤来操作。
1. 一定要在原帐号被冻结之前,最好是准备提交审核前,获取原帐号的用户列表。如果没有原帐号的用户列表,用不了转换工具。如果原账号被回收,这时候也没办法调用接口获取用户列表。
如何获取用户列表见这里:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140840

2. 转换openid的API接口如下,可在帐号迁移审核完成后开始调用,并最多保留15天。若帐号迁移没完成,调用时无返回结果或报错。帐号迁移15天后,该转换接口将会失效、无法拉取到数据。
◆ URL:http://api.weixin.qq.com/cgi-bin/changeopenid?access_token=xxxxx
此处token为新帐号的token
◆ 请求方式:post
◆ 请求数据:
{
"from_appid":"xxxxxxxx",//此处为原帐号的appid
"openid_list":["oEmYbwN-n24jxvk4Sox81qedINkQ","oEmYbwH9uVd4RKJk7ZZg6S
zL6tTo"]//需要转换的openid,即第1步中拉取的原帐号用户列表,这些必须是旧账号目前关注的才行,否则会出错;一次最多100个,不能多。
}
◆ 输出数据:
{
"errcode": 0,
"errmsg": "ok",
"result_list": [
{
"ori_openid": "oEmYbwN-n24jxvk4Sox81qedINkQ",
"new_openid": "o2FwqwI9xCsVadFah_HtpPfaR-X4",
"err_msg": "ok"
},
{
"ori_openid": "oEmYbwH9uVd4RKJk7ZZg6SzL6tTo",
"err_msg": "ori_openid error"//这个openid目前没有关注旧公众号
}
]
}
◆ 错误码:
63178:from_appid参数错误,和调用的账号并没有迁移关系
Ori_openid error:openid目前没有关注旧公众号。或者是将from_appid搞错了,用成了新帐号的appid。

 

ps:转换openid限制比较多,一次最多处理100条,合理把握时间

 

 

 

2018-04-19 16:54:03 ws932734384 阅读数 26439
  • 微信公众号开发6-事件开发管理-微信开发php

    微信公众平台开发之事件开发管理是子恒老师《微信公众平台开发》视频教程的第6部。详细讲解了用php开发微信,对微信公众平台中的常见事件管理开发。内容包含微信关注事件,取消关注事件等等,其它的事件会在相应的章节中详细讲述。欢迎反馈,微信/QQ:68183131

    4754 人正在学习 去看看 秦子恒

        本人最近要做微信公众号网页开发的项目,其中有个需求是判断用户是否关注公众号,由于之前没有接触过微信授权的东西,所以提前开始做调研。在度娘上看了好多博客、百度知道、百度经验、知乎问答等,还仔细阅读了微信公众平台开发文档,大致了解到:

        微信网页授权分两种,第一种是snsapi_base(静默授权,用户无感知),第二种是snsapi_userinfo(第一次授权需要用户点击登录确认)。静默授权只需要两步就能拿到开发者需要的openID,而第二种授权方式,一共需要四步,可以拉取到用户信息(昵称、头像等)。具体过程这里不在赘述,参阅微信开发者文档。


        但是,本人发现一个不好的事情,获取到的用户信息里,并没有度娘告诉我的用于判断用户是否关注公众号的字段 subscribe 。然后,继续查阅博客、百度知道、百度经验、知乎问答,其中,有一篇博客让我如获至宝,下面是博客的截图:


        然后我就天真的相信,只有在unionID机制下,获取到的用户信息里才会有 subscribe 字段。后来,查看微信公众平台开发文档,其中有一段:


        那么,只有把公众号绑定到微信开放平台上才能使用unionID机制。所以自己就注册了一个微信开放平台,要绑定公众号的时候发现,只有完成开发者资质认证才能绑定。但是认证需要:



        以上只是一部分。这哪儿是我一个开发能做的事儿啊,所以向项目经理说明了情况,又向技术中心老大申请……,经过了一系列繁杂又不太顺利的流程。最后,让我来注册,需要什么材料找行政要。

        当然,在协调的过程中,我也没闲着,咨询了做过微信网页授权的同事,自己也继续翻阅微信开发文档(相当烂)、在本地尝试授权,获取用户信息,最终发现:不需要unionID机制,也能获取用户基本信息,拿到 subscribe 字段。那么正题来了!


微信网页授权并获取用户基本信息(是否关注公众号、头像、昵称等)步骤:  

          1、用户同意授权,获取code(使用静默授权即可)

               参阅 微信网页授权 第一步

            2、通过code换取  网页授权access_token  和 openID(此处的access_token为网页授权过程专用)

                参阅 微信网页授权 第二步

            3、使用AppId和AppSecret:获取access_token

                参阅  获取access_token

            4、使用openID和access_token获取用户基本信息

                参阅 获取用户基本信息(包括UnionID机制)

最终获取到的用户基本信息如下图:

        


        好了,到这里终于拿到了我需要的判断用户是否关注公众号的字段: subscribe 。


        饶了这么大圈子,有些感触:微信公众平台开发文档不容易看懂,unionID机制到底是啥,绑定了开放平台才叫unionID机制吗,那我现在这种调接口的方法(并没有绑定微信开放平台)属于unionID机制吗。

        再多说一句,其实这些逻辑,绝大部分是在后端完成的(access_token、appsecret安全等级都比较高)。所以,作为前端,只要调接口==》回调地址,再调接口==》得到用户基本信息。

2017-12-13 21:02:47 qq_26245325 阅读数 16825
  • 微信公众号开发6-事件开发管理-微信开发php

    微信公众平台开发之事件开发管理是子恒老师《微信公众平台开发》视频教程的第6部。详细讲解了用php开发微信,对微信公众平台中的常见事件管理开发。内容包含微信关注事件,取消关注事件等等,其它的事件会在相应的章节中详细讲述。欢迎反馈,微信/QQ:68183131

    4754 人正在学习 去看看 秦子恒

用户关注公众号回调

参考资料

  1. 微信公众平台
  2. 微信公众号开发文档

基本信息

  1. AppID:开发者ID,微信公众号的唯一标识
  2. AppSecret:开发者密码,操作微信公众号的验证
  3. IP白名单:获取access_token时,需要IP白名单才可以获取
  4. OpenID:微信用户在当前公众号的唯一标识
  5. UnionID:微信用户在当前开放平台账号的所有公众号和应用情景下的唯一标识
  6. 服务器配置:
    (1)地址:配置以后,用户对公众号的操作(关注、发消息),微信会转到该链接
    (2)令牌:用作生成签名
    (3)密钥:消息加密
    开发-配置
    官方文档教程

7.验证服务器地址,6(1) 配置时要在链接下,原样输出微信发送GET请求的参数echostr,验证成功过后,才能配置完成。


公众号关注后的推送

  1. 在上一步的服务器地址中,加入以下代码
    (1) 接口加密,官方PHP-DEMO
include_once "wxBizMsgCrypt.php";
// 第三方发送消息给公众平台
$encodingAesKey = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG";
$token = "pamtest";
$timeStamp = "1409304348";
$nonce = "xxxxxx";
$appId = "wxb11529c136998cb6";
$text = "<xml><ToUserName><![CDATA[oia2Tj我是中文jewbmiOUlr6X-1crbLOvLw]]></ToUserName><FromUserName><![CDATA[gh_7f083739789a]]></FromUserName><CreateTime>1407743423</CreateTime><MsgType><![CDATA[video]]></MsgType><Video><MediaId><![CDATA[eYJ1MbwPRJtOvIEabaxHs7TX2D-HV71s79GUxqdUkjm6Gs2Ed1KF3ulAOA9H1xG0]]></MediaId><Title><![CDATA[testCallBackReplyVideo]]></Title><Description><![CDATA[testCallBackReplyVideo]]></Description></Video></xml>";


$pc = new WXBizMsgCrypt($token, $encodingAesKey, $appId);
$encryptMsg = '';
$errCode = $pc->encryptMsg($text, $timeStamp, $nonce, $encryptMsg);
if ($errCode == 0) {
    print("加密后: " . $encryptMsg . "\n");
} else {
    print($errCode . "\n");
}

$xml_tree = new DOMDocument();
$xml_tree->loadXML($encryptMsg);
$array_e = $xml_tree->getElementsByTagName('Encrypt');
$array_s = $xml_tree->getElementsByTagName('MsgSignature');
$encrypt = $array_e->item(0)->nodeValue;
$msg_sign = $array_s->item(0)->nodeValue;

$format = "<xml><ToUserName><![CDATA[toUser]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>";
$from_xml = sprintf($format, $encrypt);

// 第三方收到公众号平台发送的消息
$msg = '';
$errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);
if ($errCode == 0) {
    print("解密后: " . $msg . "\n");
} else {
    print($errCode . "\n");
}

(2) 关注、发送消息的推送 官方文档

$xmlStr = $GLOBALS['HTTP_RAW_POST_DATA'];
if(!empty($xmlStr )){
   // 解析该xml字符串,利用simpleXML
   libxml_disable_entity_loader(true);
   //禁止xml实体解析,防止xml注入
   $requestXml = simplexml_load_string($xmlStr , 'SimpleXMLElement', LIBXML_NOCDATA);
   //判断该消息的类型,通过元素MsgType
   switch ($requestXml ->MsgType){
       case 'event':
           //判断具体的时间类型(关注、取消、点击)
           $event = $requestXml->Event;
           if ($event=='subscribe') { // 关注事件
               //查看用户是否首次关注
               $content = '欢迎关注!';
               if(isset($requestXml->EventKey)) {
                       // 扫特定二维码关注会携带相对应的参数,具体见下一篇
               }

           }elseif ($event=='CLICK') {//菜单点击事件
           }elseif ($event=='VIEW') {//连接跳转事件
           }
           break;
     case 'text'://文本消息
        break;
     case 'image'://图片消息
        break;
     case 'voice'://语音消息
        break;
     case 'video'://视频消息
        break;
     case 'shortvideo'://短视频消息
        break;
     case 'location'://位置消息
        break;
     case 'link'://链接消息
        break;
   }
}

(3)接受关注的数据格式
这里写图片描述

(4) 回复消息

//基本消息模板
private $mMsgTemplate = [
        'text' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[%s]]></Content></xml>',//文本回复XML模板
        'image' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[image]]></MsgType><Image><MediaId><![CDATA[%s]]></MediaId></Image></xml>',//图片回复XML模板
        'music' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[music]]></MsgType><Music><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><MusicUrl><![CDATA[%s]]></MusicUrl><HQMusicUrl><![CDATA[%s]]></HQMusicUrl><ThumbMediaId><![CDATA[%s]]></ThumbMediaId></Music></xml>',//音乐模板
        'news' => '<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>%s</ArticleCount><Articles>%s</Articles></xml>',// 新闻主体
        'news_item' => '<item><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item>',//某个新闻模板
    ];
//回复
echo sprintf($this->mMsgTemplate ['text'], $requestXml->FromUserName, $requestXml ->ToUserName, time(), $msgContent);
2017-11-19 08:38:19 towtotow 阅读数 2304
  • 微信公众号开发6-事件开发管理-微信开发php

    微信公众平台开发之事件开发管理是子恒老师《微信公众平台开发》视频教程的第6部。详细讲解了用php开发微信,对微信公众平台中的常见事件管理开发。内容包含微信关注事件,取消关注事件等等,其它的事件会在相应的章节中详细讲述。欢迎反馈,微信/QQ:68183131

    4754 人正在学习 去看看 秦子恒

取消关注事件是指用户不再关注公众号,

这里微信也会发送事件消息到你填写的网址上。


66.jpg


这样你就可以进行相应的业务处理,

比如把用户的状态设置为不关注,

但是这里你不能再给这个用户发送信息了…

微信公众号取消关注事件要做的处理视频教程在线观看

http://edu.csdn.net/course/detail/2962/48739

没有更多推荐了,返回首页