微信消息模板——巨坑

  • Post author:
  • Post category:其他



微信平台分主动消息和被动消息,主动消息是生产服务器主动推送消息给微信平台,被动消息是用户行为导致微信平台推送消息给生产服务器。


  • 主动消息需要:

    • 1,将生产服务器ip加入ip白名单
    • 2,然后根据appid和secret获取token
    • 3,每次主动推送将token&在url上

  • 被动消息:

    • 1,填写生产服务器url路径在公众号配置上
    • 2,获取token绑定



一、消息模板

  • 1,获取微信消息模板api接口链接(巨坑,微信公众号文档上消息模板api链接有问题,正确应该在微信公众号,消息模板设置上,接口文档找)

  • 2,获取消息模板id

  • 3,获取需要发送消息的用户openid(关注该公众号)

  • 4,构造消息模板数据

  • 5,成功标志:

    • (1)收到返回json数据,error=0,
    • (2)微信平台主动推送xml到服务器



二、注意事项

  • 1,微信模板api是公众号,消息模板插件,消息模板接口文档中



  • 2,消息模板语法:

    • (1),数据格式构造,json格式
    • (2),post方式发送
  • 3,用户的openid,一定,一定,一定是公众号appid旗下的,也就是说,一定是要关注了该公众号的用户。



  • 4,巨坑,巨坑,消息模板的openid不是微信唯一openid,是每个公众号对应用户的tofakeid

    • 微信公众平台的所谓“openid”分为两种:

      • [第一种openid]为利用交互的xml中获取:

        <![CDATA[fromUser]]>

        每个用户针对每个微信公众平台唯一,即同一个用户对不同微信公众平台[第一种openid]是不同的;

        个人倾向称之为fakeid,获取不需要授权页面。
      • [第二种openid]为利用微信提供的OAuth2.0接口(高级接口需要为认证的服务号)

        每个用户唯一,也就是说同一个用户对不同微信公众平台的[第二种openid]都是一样的;

        个人倾向称之为真正的openid,获取需要授权页面。

        第一种公众平台开发者文档没有明说,但只要看过文档不难推断;

        第二种所用接口详见:公众平台开发者文档-网页授权获取用户基本信息。


ps:详细脚本代码:

 /**
     * @param $open_id	用户openid
     * @param $template_id	消息模板id
     * @param $miniprogram	消息模板跳转的appid,pagepath页面链接,可根据自我需求删改
     * @param $appid	公众号appid
     * @param $num		申请编号,可根据自我需求删改
     * 发送消息模板
     * @return array
     */
    public  function SendMsg($open_id,$template_id,$miniprogram,$num){
        try {
            $token = $this->get_token();
        } catch (\Exception $e) {
       		 $e->getMessage();
        }
        //发送模板消息url
        $send_url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={$token}";
        $date=date("Y-m-d H:i:s",time());
        $data=[
                "touser"=>$open_id,
                "template_id"=>$template_id,
                'miniprogram'=>$miniprogram,
                "data"=>[
                    "first"=>[
                        "value"=>"吸易商城提醒您,您的消杀片已到期,请及时更换",
                    ],
                    "keyword1"=>[
                        "value"=>"商品更换提醒",
                    ],
                    "keyword2"=>[
                        "value"=>$num,
                    ],
                    "keyword3"=>[
                        "value"=>$date,
                    ],
                    "keyword4"=>[
                        "value"=>'待处理',
                    ],
                    "remark"=>[
                        "value"=>"详情信息,请戳详情了解",
                    ],
                ],
        ];
    
        //$postData = http_build_query($postData); //做一层过滤
        $json_data=json_encode($data);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,            $send_url);
        curl_setopt($ch, CURLOPT_HEADER, 0); //设置header
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt($ch, CURLOPT_POST,           1 );
        curl_setopt($ch, CURLOPT_POSTFIELDS,     $json_data );
        $request=curl_exec ($ch);
        curl_close($ch);
        $request=json_decode($request,true);
        if ($request['errcode']==0){
            return [
                'code'=>ApiCode::CODE_SUCCESS,
                'msg'=>"消息模板发送成功",
            ];
        }
        return [
            'code'=>ApiCode::CODE_ERROR,
            'msg'=>$request,
        ];
    }



版权声明:本文为weixin_43272542原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。