微信公众号发送图文和图片 , 微信公众号被动回复用户信息

微信公众号发送图文和图片 , 微信公众号被动回复用户信息

周赒
2021-12-02 / 0 评论 / 103 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年12月02日,已超过1099天没有更新,若内容或图片失效,请留言反馈。
微信公众号回复用户信息有两种方式:

  1、被动回复用户消息;
  2、通过客服接口发送消息;(可以通过调用客服接口发送)本文不做阐述,可以看看微信文档,

一、发送图片

  1、可以将图片上传服务器上,代码如下:

/**
 *  上传到本地服务器
 * @param $content
 * @param $type
 * @return array
 *
 */
public static function filePathUrl($content,$type){
    $ext_path = isset(self::$ext_path[$type]) ? self::$ext_path[$type] : '/file' ;
    $local_doc_dir = dirname(__DIR__) . "/web".$ext_path;//本地文件夹
    if (!is_dir($local_doc_dir)){
        mkdir($local_doc_dir,0777,true);//本地如果没有文件夹则创建文件夹
    }
   // $name = uniqid().time().'.jpg' ;
    $name = uniqid().time().'.png' ;
    $res = file_put_contents($local_doc_dir.$name,$content) ;
    if($res){
        return [
            'status' => 1 ,
            'url' => $local_doc_dir.$name ,
        ] ;
    } else {
        return [
            'status' => 0 ,
            'msg' => '上传失败' ,
            'url' => $local_doc_dir.$name ,
        ] ;
    }
}

  2、得到图片的绝对地址通过微信临时素材接口上传到微信服务器得到临时素材的media_id,

/**
 * @todo
 * @param $media_path
 * @param string $type
 * @return mixed
 * @throws \Exception
 *
 */
public static function uploadWeChatWeb($media_path,$type = 'image'){
    $access_token = getWeChatAccessToken(self::weChatAppId, self::weChatAppSecret);
     $url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token={$access_token}";
  if(class_exists('CURLFile')){  //7.0
        $param = [
            'media' => new \CURLFile($media_path) ,
            'access_token' => $access_token,
            'type' => $type,
        ];
    }else{  //5.6以及5.6以下
        $param = array(
            'media' => '@'.$media_path,
            'access_token' => $access_token,
            'type' => $type,
        );
    }
     $json_ret = requestHttp($url,'POST',$param,'',60,1) ;
    $ret = json_decode($json_ret,true) ;
    if($ret){
        $ret['param_data'] = $param ;
        $ret['json_ret'] = $json_ret ;
    } else {
        $ret['param_data'] = $param ;
        $ret['json_ret'] = $json_ret ;
    }
    return $ret ;
}
注意:

  1、media_path 是图片的绝对的地址,不是图片的url ; 这一点需要注意。
  2、php 版本的不同导致代码有所差异,这边的考虑curl 的CURLOPT_SAFE_UPLOAD参数问题
  代码调整:

 if(class_exists('CURLFile')){  //7.0
        $param = [
            'media' => new \CURLFile($media_path) ,
            'access_token' => $access_token,
            'type' => $type,
        ];
    }else{  //5.6以及5.6以下
        $param = array(
            'media' => '@'.$media_path,
            'access_token' => $access_token,
            'type' => $type,
        );
    }

  微信回复的xml 组装: content参数发送文本时时文本内容,发送图片时图片的media_id;有参数不明白的可以阅读微信文档,或者咨询在下

/**
 * 微信单文本信息回复
 * @param $content
 */
private function respond_text($content,$img = 0){
    if($img == 1){
           // 发送图片xml 
            $template = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[%s]]></MsgType>
                    <Image>
                    <MediaId><![CDATA[%s]]></MediaId>
                    </Image>
                  </xml>";
            $info = sprintf($template,$this->from_user,$this->to_user,time(),'image',$content);
    
    } else {
        // 发送文本消息的xml
        $template = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[%s]]></MsgType>
                    <Content><![CDATA[%s]]></Content>
                  </xml>";
        $info = sprintf($template,$this->from_user,$this->to_user,time(),'text',$content);
    }

    exit($info);
}

  通过sprintf 函数将参数与xml字段替换 ; 得到想要的xml文件 ;
  这样接口得到想要的功能 ; 如图
文字回复1

图片回复1

二、发送图文消息

  通过组织图文的xml

/**
 *  发送一条图文信息
 * @param $title  图文标题
 * @param $des   图文的介绍
 * @param $picUrl  图片的url链接地址
 * @param string $url  文章的第三方链接地址url
 *
 */
public static function respondOneNewsText($title,$des,$picUrl,$url){
    $template = "<xml>
                      <ToUserName><![CDATA[%s]]></ToUserName>
                      <FromUserName><![CDATA[%s]]></FromUserName>
                      <CreateTime>%s</CreateTime>
                      <MsgType><![CDATA[%s]]></MsgType>
                      <ArticleCount>1</ArticleCount>
                      <Articles>
                        <item>
                          <Title><![CDATA[%s]]></Title>
                          <Description><![CDATA[%s]]></Description>
                          <PicUrl><![CDATA[%s]]></PicUrl>
                          <Url><![CDATA[%s]]></Url>
                        </item>
                      </Articles>
                </xml>" ;
    $info = sprintf($template,self::$to_user_open_id,self::$form_user_open_id,time(),'news',$title,$des,$picUrl,$url);
    exit($info);
}

  通过sprintf 函数将参数与xml字段替换 ; 得到想要的xml文件 ;
  这样接口得到想要的功能展示 ; 如图
图文回复1

0

评论 (0)

取消