2015-08-31 16:00:29 u010773333 阅读数 7876
  • 微信开发群发多图文消息-微信开发16(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信群发多图文消息开发是子恒老师《子恒说微信开发》视频教程的第16部。详细讲解了用php开发微信群发图文消息。内容包含图文消息前端页面,一个页面插入多个百度UEditor,群发多图文,查询和删除图文消息等等。欢迎反馈,微信号:QQ68183131

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

最近产品经理要做每天推送图文信息的功能,哎,还要超链接传递不同的参数,苦逼呀。。网上查了一些资料,下面讲解一下群发素材

要群发素材,首先要先获得素材,素材都是以图片和文字的形式推送给用户的,所以要首先获得图片和文字

微信的上传媒体接口:https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE

可以用来上传图片,上传成功返回:{"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789},其中media_id就是图片在微信服务器的标识。

上传方法:

       /// <summary>
        /// 上传媒体返回媒体ID
        /// </summary>
        public static string UploadMedia(string access_token, string type, string path)
        {
            // 设置参数
            string url = string.Format("http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token={0}&type={1}", access_token, type);
            return HttpRequestUtil.HttpUploadFile(url, path);
        }

第二步:拼接图文消息素材Json字符串,其中msg就是上述的微信服务器传回来的媒体ID

       /// <summary>
        /// 拼接图文消息素材Json字符串
        /// </summary>
        public static string GetArticlesJsonStr(string access_token,string msg)
        {
            StringBuilder sbArticlesJson = new StringBuilder();

             sbArticlesJson.Append("{\"articles\":[");
                //string media_id = Tools.GetJsonValue(msg, "media_id");
               // string media_id = (msg,"media_id");
                sbArticlesJson.Append("{");
                // sbArticlesJson.Append();
                sbArticlesJson.Append("\"thumb_media_id\":\"" + msg + "\",");
                sbArticlesJson.Append("\"author\":\"" + "王华涛" + "\",");
                sbArticlesJson.Append("\"title\":\"" + "作业已经完成" + "\",");
                sbArticlesJson.Append("\"content_source_url\":\"" + "http://。。。。" + "\",");
                sbArticlesJson.Append("\"content\":\"" + "作业信息" + "\",");
                sbArticlesJson.Append("\"digest\":\"" +"您孩子的作业已经完成" + "\",");
                sbArticlesJson.Append("\"show_cover_pic\":\"1\"}");
                sbArticlesJson.Append("]}");

            return sbArticlesJson.ToString();
        } 

第三步:上传图文消息素材,其中postData就是拼接图文消息素材Json字符串,调用微信接口上传之后获得media_id

        /// <summary>
        /// 上传图文消息素材返回media_id
        /// </summary>
        public static string UploadNews(string access_token, string postData)
        {
            return HttpRequestUtil.PostUrl(string.Format("https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token={0}", access_token), postData);
        }

第四步:图文消息json,添加发送用户openid

      /// <summary>
        /// 图文消息json
        /// </summary>
        public static string CreateNewsJson(string media_id, List<string> openids)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("{\"touser\":[\"");

            foreach(string  openid in openids)    

            {

                 sb.Append(openid);
                sb.Append("\",\"");

            }
            sb.Append("\"],");
            sb.Append("\"msgtype\":\"mpnews\",");
            sb.Append("\"mpnews\":{\"media_id\":\"" + media_id + "\"}");
            sb.Append("}");
            return sb.ToString();
        }
第五步:调用微信发送素材接口,根据OpenID列表群发素材信息

        /// <summary>
        /// 根据OpenID列表群发
        /// </summary>
        public static string Send(string access_token, string postData)
        {
            return HttpRequestUtil.PostUrl(string.Format("https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token={0}", access_token), postData);
        }



2018-07-16 18:14:40 bianyamei 阅读数 275
  • 微信开发群发多图文消息-微信开发16(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信群发多图文消息开发是子恒老师《子恒说微信开发》视频教程的第16部。详细讲解了用php开发微信群发图文消息。内容包含图文消息前端页面,一个页面插入多个百度UEditor,群发多图文,查询和删除图文消息等等。欢迎反馈,微信号:QQ68183131

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

微信订阅号在文章素材中不能加入链,如果我们想使用推广表单,我们可以使用回复图文消息的方式,和文章组合在一起实用又好看.

关注后回复图文消息

if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {
					
					   // 创建图文消息   关注后发送多图文消息
	                NewsMessage newsMessage = new NewsMessage();  
	                newsMessage.setToUserName(fromUserName);  
	                newsMessage.setFromUserName(toUserName);  
	                newsMessage.setCreateTime(new Date().getTime());  
	                newsMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_NEWS);  
	          
	  
	                List<Article> articleList = new ArrayList<Article>();  
					Article article1 = new Article();
					article1.setTitle("");
					article1.setDescription("");
					article1.setPicUrl("");
					article1.setUrl("");
 
					Article article2 = new Article();
					article2.setTitle("");
					article2.setDescription("");
					article2.setPicUrl("");
					article2.setUrl("");
					
					articleList.add(article1);
					articleList.add(article2);
					newsMessage.setArticleCount(articleList.size());
					newsMessage.setArticles(articleList);
					respContent = MessageUtil.messageToXml(newsMessage);
					 return respContent;
				}
				else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {
				}
				
				else if (eventType.equals(MessageUtil.EVENT_TYPE_SCAN)) {
					
				}
		
				else if (eventType.equals(MessageUtil.EVENT_TYPE_LOCATION)) {
					
				}
				
				else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) {
				
				}
				return MessageUtil.messageToXml(textMessage);
			}
			textMessage.setContent(respContent);
		
			respXml = MessageUtil.messageToXml(textMessage);
			}catch (Exception e) {
			e.printStackTrace();
		}
		return respXml;
		}

关键词回复图文消息

if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
		  
	                // 接收用户发送的文本消息内容  
	               // String content = requestMap.get("Content");  
	  
	                // 创建图文消息  
	                NewsMessage newsMessage = new NewsMessage();  
	                newsMessage.setToUserName(fromUserName);  
	                newsMessage.setFromUserName(toUserName);  
	                newsMessage.setCreateTime(new Date().getTime());  
	                newsMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_NEWS);  
	                // newsMessage.setFuncFlag(0);  
	  
	                List<Article> articleList = new ArrayList<Article>();  
						// 多图文消息
						if ("XXX".contains(content)) {
							Article article1 = new Article();
							article1.setTitle("");
							article1.setDescription("");
							article1.setPicUrl("");
							article1.setUrl("");
		 
							Article article2 = new Article();
							article2.setTitle("");
							article2.setDescription("");
							article2.setPicUrl("");
							article2.setUrl("");
							
							articleList.add(article1);
							articleList.add(article2);
							
							newsMessage.setArticleCount(articleList.size());
							newsMessage.setArticles(articleList);
							respContent = MessageUtil.messageToXml(newsMessage);
							return respContent;
				}
                    return MessageUtil.messageToXml(textMessage);
	

关键词回复图文消息和订阅后推送图文消息,实现方式是一样的.

消息回复中如果你不想回复任何内容,又不想出现服务器出现故障,请稍后再试,你可以返回空字符串return "";腾讯就知道你不想回复任何内容了.

整体代码:


/**
 * 
 * @author bym @date 2018年7月4日
 */
public class CoreService {
	/** 生成订阅时的图文消息
	 * 
	 * @param fromUserName
	 * @param toUserName
	 * @return */
	public static String processRequest(HttpServletRequest request) {
	
		String respXml = null;
	
		String respContent = "请求处理异常,请稍候尝试!";
		try {
			
			Map<String, String> requestMap = MessageUtil.parseXml(request);
			
			String fromUserName = requestMap.get("FromUserName");
			String toUserName = requestMap.get("ToUserName");
			String msgType = requestMap.get("MsgType");
			String content = requestMap.get("Content");
			TextMessage textMessage = new TextMessage();
			textMessage.setToUserName(fromUserName);
			textMessage.setFromUserName(toUserName);
			textMessage.setCreateTime(new Date().getTime());
			textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
			
			if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
				  
	                // 接收用户发送的文本消息内容  
	               // String content = requestMap.get("Content");  
	  
	                // 创建图文消息  
	                NewsMessage newsMessage = new NewsMessage();  
	                newsMessage.setToUserName(fromUserName);  
	                newsMessage.setFromUserName(toUserName);  
	                newsMessage.setCreateTime(new Date().getTime());  
	                newsMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_NEWS);  
	                // newsMessage.setFuncFlag(0);  
	  
	                List<Article> articleList = new ArrayList<Article>();  
						// 多图文消息
						if ("XXX".contains(content)) {
							Article article1 = new Article();
							article1.setTitle("");
							article1.setDescription("");
							article1.setPicUrl("");
							article1.setUrl("");
		 
							Article article2 = new Article();
							article2.setTitle("");
							article2.setDescription("");
							article2.setPicUrl("");
							article2.setUrl("");

							articleList.add(article1);
							articleList.add(article2);
	
							newsMessage.setArticleCount(articleList.size());
							newsMessage.setArticles(articleList);
							respContent = MessageUtil.messageToXml(newsMessage);
							return respContent;
					}
				   return MessageUtil.messageToXml(textMessage);
	
			}else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {
			
				String eventType = requestMap.get("Event");
			
				if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {
					
					   // 创建图文消息   关注后发送多图文消息
	                NewsMessage newsMessage = new NewsMessage();  
	                newsMessage.setToUserName(fromUserName);  
	                newsMessage.setFromUserName(toUserName);  
	                newsMessage.setCreateTime(new Date().getTime());  
	                newsMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_NEWS);  
	          
	  
	                List<Article> articleList = new ArrayList<Article>();  
					Article article1 = new Article();
					article1.setTitle("");
					article1.setDescription("");
					article1.setPicUrl("");
					article1.setUrl("");
 
					Article article2 = new Article();
					article2.setTitle("");
					article2.setDescription(包");
					article2.setPicUrl("");
					article2.setUrl("");
					
					articleList.add(article1);
					articleList.add(article2);
					newsMessage.setArticleCount(articleList.size());
					newsMessage.setArticles(articleList);
					respContent = MessageUtil.messageToXml(newsMessage);			  
					       return respContent;
				}
				else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {
					UserDao.delUser(fromUserName);
				}
				
				else if (eventType.equals(MessageUtil.EVENT_TYPE_SCAN)) {
					
				}
		
				else if (eventType.equals(MessageUtil.EVENT_TYPE_LOCATION)) {
					
				}
				
				else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) {
				
				}
				
				return MessageUtil.messageToXml(textMessage);
			}
			textMessage.setContent(respContent);
		
			respXml = MessageUtil.messageToXml(textMessage);
			}catch (Exception e) {
			e.printStackTrace();
		}
		return respXml;
		}
}

 

2019-05-29 10:55:24 wang__zz 阅读数 648
  • 微信开发群发多图文消息-微信开发16(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信群发多图文消息开发是子恒老师《子恒说微信开发》视频教程的第16部。详细讲解了用php开发微信群发图文消息。内容包含图文消息前端页面,一个页面插入多个百度UEditor,群发多图文,查询和删除图文消息等等。欢迎反馈,微信号:QQ68183131

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

PHP 微信小程序客服回复图片之图片素材上传

开场捋一下逻辑:无论小程序客服还是公众号的回复,开发时你会发现当你想要它自动回复图片功能时,则需先将你要回复的图片上传到微信的后台素材库,然后拿到上传成功后给你返回的素材码,然后就需要你去拿着这个素材码去调用接口给用户发送消息了,不多BB,看代码




public $accessToken = 'xaakjajlsdjakjdajkasjdlasjdasda';        // 微信accessToken 	

public $wxUpload   = 'http://api.weixin.qq.com/cgi-bin/media/upload'; //上传素材到微信服务器接口

$filePath =  ./public/wechat_img.png';    //需要上传图片的路径
  
    //上传图片素材
    //解析图片文件名
    public function wxMedia($filePath ,$mediaKey = '')
    {
        $accessToken = $this->getAccessToken();
        $url = $this->wxUpload.'?access_token='.$accessToken.'&type=image';
        if (class_exists ( '\CURLFile' )) {//关键是判断curlfile,官网推荐php5.5或更高的版本使用curlfile来实例文件
            $filedata = array (
                'fieldname' => new \CURLFile ( realpath ( $file_path ), 'image/jpg' )
            );
        } else {
            $filedata = array (
                'fieldname' => '@' . realpath ( $file_path )   
            );
        }
        $result  = $this->upload($url,$filedata,$file_path,$mediaKey);
        return $result;
    }


    //上传素材到微信小程序服务器
    /*
     * $url 上传素材接口
     * $filedata  解析后图片信息
     * $file_path 图片原本路径
     * */
    public  function upload($url, $filedata, $file_path) {
        $curl = curl_init ();
        if (class_exists ( '/CURLFile' )) {//php5.5跟php5.6中的CURLOPT_SAFE_UPLOAD的默认值不同
            curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, true );
        } else {
            if (defined ( 'CURLOPT_SAFE_UPLOAD' )) {
                curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, false );
            }
        }
        curl_setopt ( $curl, CURLOPT_URL, $url );
        curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, FALSE );
        curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, FALSE );
        if (! empty ( $filedata )) {
            curl_setopt ( $curl, CURLOPT_POST, 1 );
            curl_setopt ( $curl, CURLOPT_POSTFIELDS, $filedata );
        }
        curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );
        $output = curl_exec ( $curl );
        curl_close ( $curl );
        $output = json_decode($output,true);
        if (!isset($output['media_id'])) {
            throw exception(var_export($output, true), 500);
        }
        unlink($file_path);     //此时就已经上传图片素材成功即可删除本地图片或者不删除
        return $output['media_id'];
    }



### 这里贴一段组装回复素材信息的代码
        $fromUsername = $postObj['FromUserName'];   //发送者openid
        $data=array(
            "touser"    => $fromUsername,
            "msgtype"   => "image",
            "image"     => array("media_id"=>$mediaid)   //将刚才获取到的media_id 放入这里面就可以了
        );
        $json = json_encode($data,JSON_UNESCAPED_UNICODE);  //php5.4+   
        $res  = $this->requestApi($json);     //回复的格式建议无需加密,推荐json格式, 在这里吐槽一下微信客服推送的文档,回复XML各种报错-.-
        return $res;

2019-01-01 21:47:46 zuoantianwa 阅读数 2446
  • 微信开发群发多图文消息-微信开发16(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信群发多图文消息开发是子恒老师《子恒说微信开发》视频教程的第16部。详细讲解了用php开发微信群发图文消息。内容包含图文消息前端页面,一个页面插入多个百度UEditor,群发多图文,查询和删除图文消息等等。欢迎反馈,微信号:QQ68183131

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

Hello2BizUser的方法失效了之后,如何设置微信公众号关注后自动回复图文消息和自定义链接?

导言

Hello2BizUser的方法失效了之后,如何设置微信公众号关注后自动回复图文消息和自定义链接?通过网站:open.vip666.cloud,简单2步,让公众号自动回复图文内容。
不需要懂得抓包、编程、开发。
文盲也能使用的方法!

正文

第一步:在微信公众平台准备好素材,打开网站并授权

1、素材

01

2、授权

02

第二步:选择相应素材

03

完成!

P.S.:点击回复内容跳转到自定义网址。

04

准备素材时将准备好的自定义网址填入“摘要”栏目即可。

2016-11-06 15:52:46 tianjingang1 阅读数 257
  • 微信开发群发多图文消息-微信开发16(PHP)

    会员免费看,http://edu.csdn.net/lecturer/842 右侧可办理会员卡。微信群发多图文消息开发是子恒老师《子恒说微信开发》视频教程的第16部。详细讲解了用php开发微信群发图文消息。内容包含图文消息前端页面,一个页面插入多个百度UEditor,群发多图文,查询和删除图文消息等等。欢迎反馈,微信号:QQ68183131

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

第一步:从本地(windows)上传一张图片到 /var/www/html/weixin.bk里面

第二步:新建getid.php文件

第三步:打开微信公众平台开发者文档里面的素材管理->新增临时素材,复制里面的http请求链接:

https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE
把该链接写成:https://api.weixin.qq.com/cgi-bin/media/upload?access_token='.$token.'&type=image';

即:$url2="https://api.weixin.qq.com/cgi-bin/media/upload?access_token='.$token.'&type=image'";

此链接里面的$token可通过以下方式获取到:

$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx1cabc9a3ae73ca08&secret=d30dcaa2e2358607a27c6911bfb5abe5";

$str=file_get_contents($url);

$arr=json_decode($str,true);
//print_r($arr);
$token=$arr['access_token'];

然后把TYPE改为image即可.

第四步:

在getid.php页面里$url2下面定义一个数组:

$data=array(
    "file"=>"@111.jpg"
  );

此处111.jpg为前面所上传的图片名字

然后在数组$data下面进行curl模拟提交

 //curl模拟提交
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url2); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
//curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
$tmpInfo = curl_exec($curl); // 执行操作
curl_close($curl); // 关闭CURL会话
var_dump($tmpInfo); // 返回数据

之后在浏览器访问getid.php文件,会得到以下结果:

string(118) "{"type":"image","media_id":"sA_5u87QpppWr3MzlSrpq_5T1pulVTewjqyFtjxd6WyF7cniPeWOTm9v6RukefBu","created_at":1478419664}"

第五步:打开wx_sample.php文件,打开开发文档里面->消息管理->发送消息-被动回复消息,复制回复图片消息下面的xml格式的代码,放到wx_sample.php里if(!empty( $keyword ))上面 $textTpl下面并定义为$imgTpl,将每个标签中间CDATA里面的内容替换为%s,如下面所示:

$imgTpl="<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[%s]]></MsgType>
                        <Image>
                        <MediaId><![CDATA[%s]]></MediaId>
                        </Image>
                        </xml>";

第六步:将if(!empty( $keyword ))判断重新写为:

if(!empty( $keyword ))
                {
                    if($keyword=="你好"){
                       $msgType = "image";
                       //所上传服务器的图片mediaId
                       $mediaId="gYRKl249iM705jLVp13ydA1qt5vlVsz4ZIxFCQbc9MA5Hag6BZ7CmvtK4diNT1kW";
                       //注意sprintf里面第一个值$imgTpl和最后一个值$mediaId
                       $resultStr = sprintf($imgTpl, $fromUsername, $toUsername, $time, $msgType, $mediaId);
                       echo $resultStr;
                    }else{

                      //此处为图灵机器人自动回复功能,链接里面的key为图灵机器人首页里的APIkey。

                       $msgType = "text";
                       $url="http://www.tuling123.com/openapi/api?key=ddfe877ab0e3ded0d61acabd5eca86ac&info=".$keyword;
                       $data=file_get_contents($url);
                       $arr=json_decode($data);
                       $contentStr = $arr->text;
                       $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                       echo $resultStr;
                    }    
                }else{
                    $msgType = "text";
                    $contentStr = "欢迎您的关注!";
                    $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                    echo $resultStr;
                }




微信公众号开发

阅读数 167

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