


WeChat public platform development (97) Graphic message_PHP tutorial
Keywords: WeChat public platform Development modelGraphic and text messages
Author: Fangbei Studio
Original text: http://www.cnblogs .com/txw1958/p/weixin-97-news.html
In this WeChat public platform development tutorial, we will introduce how to flexibly use the image and text messaging function. We will only introduce graphic messages in passive reply messages. The graphic messages sent by customer service messages and advanced group messaging interfaces are basically the same as the graphic messages introduced in this article.
This article is divided into the following four parts:
1. Definition of graphic messages
In the WeChat public platform message, the XML structure of the graphic message in the passive response message is as follows.
<span><</span><span>xml</span><span>></span> <span><</span><span>ToUserName</span><span>></span><span><![CDATA[</span><span>toUser</span><span>]]></span><span></</span><span>ToUserName</span><span>></span> <span><</span><span>FromUserName</span><span>></span><span><![CDATA[</span><span>fromUser</span><span>]]></span><span></</span><span>FromUserName</span><span>></span> <span><</span><span>CreateTime</span><span>></span>12345678<span></</span><span>CreateTime</span><span>></span> <span><</span><span>MsgType</span><span>></span><span><![CDATA[</span><span>news</span><span>]]></span><span></</span><span>MsgType</span><span>></span> <span><</span><span>ArticleCount</span><span>></span>2<span></</span><span>ArticleCount</span><span>></span> <span><</span><span>Articles</span><span>></span> <span><</span><span>item</span><span>></span> <span><</span><span>Title</span><span>></span><span><![CDATA[</span><span>title1</span><span>]]></span><span></</span><span>Title</span><span>></span> <span><</span><span>Description</span><span>></span><span><![CDATA[</span><span>description1</span><span>]]></span><span></</span><span>Description</span><span>></span> <span><</span><span>PicUrl</span><span>></span><span><![CDATA[</span><span>picurl</span><span>]]></span><span></</span><span>PicUrl</span><span>></span> <span><</span><span>Url</span><span>></span><span><![CDATA[</span><span>url</span><span>]]></span><span></</span><span>Url</span><span>></span> <span></</span><span>item</span><span>></span> <span><</span><span>item</span><span>></span> <span><</span><span>Title</span><span>></span><span><![CDATA[</span><span>title</span><span>]]></span><span></</span><span>Title</span><span>></span> <span><</span><span>Description</span><span>></span><span><![CDATA[</span><span>description</span><span>]]></span><span></</span><span>Description</span><span>></span> <span><</span><span>PicUrl</span><span>></span><span><![CDATA[</span><span>picurl</span><span>]]></span><span></</span><span>PicUrl</span><span>></span> <span><</span><span>Url</span><span>></span><span><![CDATA[</span><span>url</span><span>]]></span><span></</span><span>Url</span><span>></span> <span></</span><span>item</span><span>></span> <span></</span><span>Articles</span><span>></span> <span></</span><span>xml</span><span>></span>
The parameter description is as follows.
Parameter | Is it necessary | Explanation | |||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ToUserName | Yes | Receiver account (received OpenID) | |||||||||||||||||||||||||||||||||
FromUserName | Yes |
|
|||||||||||||||||||||||||||||||||
CreateTime | Yes | Message creation time (integer) | |||||||||||||||||||||||||||||||||
MsgType | Yes | news | |||||||||||||||||||||||||||||||||
ArticleCount | Yes | The number of graphic and text messages is limited to 10 messages | |||||||||||||||||||||||||||||||||
Articles | Yes | For multiple graphic and text messages, the first item is a large image by default. Note that if the number of graphic and text messages exceeds 10, there will be no response | |||||||||||||||||||||||||||||||||
Title | No | Picture and text message title | |||||||||||||||||||||||||||||||||
Description | No | Picture and text message description | |||||||||||||||||||||||||||||||||
PicUrl | No | Image link supports JPG and PNG formats. The best effect is 360*200 for large images and 200*200 for small images | |||||||||||||||||||||||||||||||||
Url | No | Click on the graphic message to jump to the link |
从中可以知道,图文消息的类型为news,图文消息个数最大为10(注意在编辑模式中,可以设置最大条数为8)。超过10条,微信将不再响应。
多图文消息中会有大图和小图的区别,第一个item中的图片为大图,其他item中的图片为小图。
二、图文消息的实现
根据上述定义,我们定义图文消息的回复代码实现如下:
<span>//</span><span>回复图文消息</span> <span>private</span> <span>function</span> transmitNews(<span>$object</span>, <span>$newsArray</span><span>) { </span><span>if</span>(!<span>is_array</span>(<span>$newsArray</span><span>)){ </span><span>return</span><span>; } </span><span>$itemTpl</span> = "<span> <item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item> </span>"<span>; </span><span>$item_str</span> = ""<span>; </span><span>foreach</span> (<span>$newsArray</span> <span>as</span> <span>$item</span><span>){ </span><span>$item_str</span> .= <span>sprintf</span>(<span>$itemTpl</span>, <span>$item</span>['Title'], <span>$item</span>['Description'], <span>$item</span>['PicUrl'], <span>$item</span>['Url'<span>]); } </span><span>$xmlTpl</span> = "<span><xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>%s</ArticleCount> <Articles> </span><span>$item_str</span><span></Articles> </xml></span>"<span>; </span><span>$result</span> = <span>sprintf</span>(<span>$xmlTpl</span>, <span>$object</span>->FromUserName, <span>$object</span>->ToUserName, <span>time</span>(), <span>count</span>(<span>$newsArray</span><span>)); </span><span>return</span> <span>$result</span><span>; }</span>
上述代码中,先将各item连接形成item_str,再将item_str赋值到xml模板中,组装一个图文消息。组装时,将object中的发送、接收方互换位置,计算出图文项的个数。
而在构造图文消息并使用图文回复的代码如下所示
<span>if</span> (<span>strstr</span>(<span>$keyword</span>, "单图文"<span>)){ </span><span>$content</span> = <span>array</span><span>(); </span><span>$content</span>[] = <span>array</span>("Title"=>"单图文标题", "Description"=>"单图文内容", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); }</span><span>else</span> <span>if</span> (<span>strstr</span>(<span>$keyword</span>, "图文") || <span>strstr</span>(<span>$keyword</span>, "多图文"<span>)){ </span><span>$content</span> = <span>array</span><span>(); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文2标题", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文3标题", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); } </span><span>if</span>(<span>is_array</span>(<span>$content</span><span>)){ </span><span>if</span> (<span>isset</span>(<span>$content</span>[0]['PicUrl'<span>])){ </span><span>$result</span> = <span>$this</span>->transmitNews(<span>$object</span>, <span>$content</span><span>); }</span><span>else</span> <span>if</span> (<span>isset</span>(<span>$content</span>['MusicUrl'<span>])){ </span><span>$result</span> = <span>$this</span>->transmitMusic(<span>$object</span>, <span>$content</span><span>); } }</span><span>else</span><span>{ </span><span>$result</span> = <span>$this</span>->transmitText(<span>$object</span>, <span>$content</span><span>); }</span>
一个完整的体验代码可参考 微信公众平台开发接口PHP SDK完整版
三、图文消息的类型
图文消息从item的个数上来分,可以分为单图文消息和多图文消息,其中单图文消息中item数为1,多图文消息中item数从2~10都包括。
虽然图文消息只有两种类型,但其实可以通过设置不同的参数构造出更多的展示效果。
单图文消息
单图文消息就是一个图文消息。
下面代码定义一个基本的图文消息
<span>$content</span> = <span>array</span><span>(); </span><span>$content</span>[] = <span>array</span>("Title" =>"大学英语四六级成绩查询", "Description" =>"点击图片进入", "PicUrl" =>"http://365jia.cn/uploads/13/0301/5130c2ff93618.jpg", "Url" =>"http://israel.sinaapp.com/cet/index.php?openid=".<span>$object</span>->FromUserName);
它的回复效果如图所示。其特点是标题粗体显示,内容字体则为灰色显示,如果有图片,则同时显示日期。
再看一下不定义图片和链接时的情况,代码如下
<span>$aqiArray</span> = <span>array</span><span>(); </span><span>$aqiArray</span>[] = <span>array</span>("Title" =><span>$cityAir</span>[0]['area']."空气质量", "Description" =>"空气质量指数(AQI):".<span>$cityAir</span>[0]['aqi']."\n". "空气质量等级:".<span>$cityAir</span>[0]['quality']."\n". "细颗粒物(PM2.5):".<span>$cityAir</span>[0]['pm2_5']."\n". "可吸入颗粒物(PM10):".<span>$cityAir</span>[0]['pm10']."\n". "一氧化碳(CO):".<span>$cityAir</span>[0]['co']."\n". "二氧化氮(NO2):".<span>$cityAir</span>[0]['no2']."\n". "二氧化硫(SO2):".<span>$cityAir</span>[0]['so2']."\n". "臭氧(O3):".<span>$cityAir</span>[0]['o3']."\n". "更新时间:".<span>preg_replace</span>("/([a-zA-Z])/i", " ", <span>$cityAir</span>[0]['time_point'<span>]); </span>"PicUrl" =>"", "Url" =>"");
其效果如下所示。
可以看到,这时,由于没有图片,所以也不显示日期了,另外没有带链接,所以“查看全文”也不显示了。
多图文
多图文消息一个最大的特点就是:描述内容不会在返回中显示,所以没有必要定义描述了。
下面是一个基本的多图文消息的定义
<span>$content</span> = <span>array</span><span>(); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文2标题", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文3标题", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
其实现效果如下
如果觉得首图太大,占地方,也可以不填写。
比如这样的代码
<span>$content</span> = <span>array</span><span>(); </span><span>$content</span>[] = <span>array</span>("Title" =>"微信公众平台开发教程", "Description" =>"", "PicUrl" =>"", "Url" =>""<span>); </span><span>$content</span>[] = <span>array</span>("Title" =>"【基础入门】免费\n1. 申请服务器资源\n2. 启用开发模式\n3. 消息类型详解\n4. 获取接收消息\n5. 回复不同消息", "Description" =>"", "PicUrl" =>"http://e.hiphotos.bdimg.com/wisegame/pic/item/9e1f4134970a304e1e398c62d1c8a786c9175c0a.jpg", "Url" =>"http://m.cnblogs.com/99079/3153567.html?full=1"<span>); </span><span>$content</span>[] = <span>array</span>("Title" =>"【初级教程】双11六折促销\n1.小黄鸡机器人\n2.英语类公众账号开发", "Description" =>"", "PicUrl" =>"http://g.hiphotos.bdimg.com/wisegame/pic/item/3166d0160924ab186196512537fae6cd7b890b24.jpg", "Url" =>"http://israel.duapp.com/taobao/index.php?id=1");
其效果如下所示
$content = array();
$content[] = array("Title" =>"欢迎关注方倍工作室","Description" =>"", "PicUrl" =>"", "Url" =>"");
$content[] = array("Title" =>"【1】新闻 天气 空气 股票 彩票 星座\n".
"【2】快递 人品 算命 解梦 附近 苹果\n".
"【3】公交 火车 汽车 航班 路况 违章\n".
"【4】翻译 百科 双语 听力 成语 历史\n".
"【5】团购 充值 菜谱 贺卡 景点 冬吴\n".
"【6】情侣相 夫妻相 亲子相 女人味\n".
"【7】相册 游戏 笑话 答题 点歌 树洞\n".
"【8】微社区 四六级 华强北 世界杯\n\n".
"更多精彩,即将亮相,敬请期待!";, "Description" =>"", "PicUrl" =>"", "Url" =>"");
$content[] = array("Title" =>"回复对应数字查看使用方法\n发送 0 返回本菜单", "Description" =>"", "PicUrl" =>"", "Url" =>"");
其效果如下所示
四、图文消息的回复
因为图文消息有更好的视觉效果,很多朋友都想要实现图文消息的回复。主要有以下几种情况
1. 关注时回复图文消息
放到订阅事件下就行了,代码如下
<span>//</span><span>接收事件消息</span> <span>private</span> <span>function</span> receiveEvent(<span>$object</span><span>) { </span><span>$content</span> = ""<span>; </span><span>switch</span> (<span>$object</span>-><span>Event) { </span><span>case</span> "subscribe": <span>$content</span> = <span>array</span><span>(); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文2标题", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文3标题", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>break</span><span>; </span><span>case</span> "unsubscribe": <span>$content</span> = "取消关注"<span>; </span><span>break</span><span>; } </span><span>if</span>(<span>is_array</span>(<span>$content</span><span>)){ </span><span>if</span> (<span>isset</span>(<span>$content</span>[0<span>])){ </span><span>$result</span> = <span>$this</span>->transmitNews(<span>$object</span>, <span>$content</span><span>); }</span><span>else</span> <span>if</span> (<span>isset</span>(<span>$content</span>['MusicUrl'<span>])){ </span><span>$result</span> = <span>$this</span>->transmitMusic(<span>$object</span>, <span>$content</span><span>); } }</span><span>else</span><span>{ </span><span>$result</span> = <span>$this</span>->transmitText(<span>$object</span>, <span>$content</span><span>); } </span><span>return</span> <span>$result</span><span>; }</span>
2. 发送关键字回复图文消息
通过判断关键字既可实现,
<span>//</span><span>接收文本消息</span> <span>private</span> <span>function</span> receiveText(<span>$object</span><span>) { </span><span>$keyword</span> = <span>trim</span>(<span>$object</span>-><span>Content); </span><span>if</span> (<span>strstr</span>(<span>$keyword</span>, "单图文"<span>)){ </span><span>$content</span> = <span>array</span><span>(); </span><span>$content</span>[] = <span>array</span>("Title"=>"单图文标题", "Description"=>"单图文内容", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); }</span><span>else</span> <span>if</span> (<span>strstr</span>(<span>$keyword</span>, "图文") || <span>strstr</span>(<span>$keyword</span>, "多图文"<span>)){ </span><span>$content</span> = <span>array</span><span>(); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文2标题", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文3标题", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); }</span><span>else</span><span>{ </span><span>$content</span> = <span>date</span>("Y-m-d H:i:s",<span>time</span>())."\n技术支持 方倍工作室"<span>; } </span><span>if</span>(<span>is_array</span>(<span>$content</span><span>)){ </span><span>if</span> (<span>isset</span>(<span>$content</span>[0]['PicUrl'<span>])){ </span><span>$result</span> = <span>$this</span>->transmitNews(<span>$object</span>, <span>$content</span><span>); }</span><span>else</span> <span>if</span> (<span>isset</span>(<span>$content</span>['MusicUrl'<span>])){ </span><span>$result</span> = <span>$this</span>->transmitMusic(<span>$object</span>, <span>$content</span><span>); } }</span><span>else</span><span>{ </span><span>$result</span> = <span>$this</span>->transmitText(<span>$object</span>, <span>$content</span><span>); } }</span>
3. 点击菜单时回复图文消息
在菜单点击事件中响应即可
<span>//</span><span>接收事件消息</span> <span>private</span> <span>function</span> receiveEvent(<span>$object</span><span>) { </span><span>$content</span> = ""<span>; </span><span>switch</span> (<span>$object</span>-><span>Event) { </span><span>case</span> "subscribe": <span>$content</span> = "欢迎关注方倍工作室 "<span>; </span><span>break</span><span>; </span><span>case</span> "CLICK": <span>switch</span> (<span>$object</span>-><span>EventKey) { </span><span>case</span> "COMPANY": <span>$content</span> = <span>array</span><span>(); </span><span>$content</span>[] = <span>array</span>("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958"<span>); </span><span>break</span><span>; </span><span>default</span>: <span>$content</span> = "点击菜单:".<span>$object</span>-><span>EventKey; </span><span>break</span><span>; } </span><span>break</span><span>; } </span><span>if</span>(<span>is_array</span>(<span>$content</span><span>)){ </span><span>if</span> (<span>isset</span>(<span>$content</span>[0<span>])){ </span><span>$result</span> = <span>$this</span>->transmitNews(<span>$object</span>, <span>$content</span><span>); }</span><span>else</span> <span>if</span> (<span>isset</span>(<span>$content</span>['MusicUrl'<span>])){ </span><span>$result</span> = <span>$this</span>->transmitMusic(<span>$object</span>, <span>$content</span><span>); } }</span><span>else</span><span>{ </span><span>$result</span> = <span>$this</span>->transmitText(<span>$object</span>, <span>$content</span><span>); } </span><span>return</span> <span>$result</span><span>; }</span>
4. 回复多个图文消息
由于回复消息一次只能回复一条,因此要回复多个图文消息,就需要使用其他接口。这需要已经认证的服务号才能拥有权限。
可以回复图文消息的接口有客服接口及高级群发接口,如果被动回复不够,就可使用客服接口来发送。
===========================================================
How to follow Fangbei Studio’s WeChat public platform account:
1. WeChat address book-add friend-search public account-search for “Fangbei Studio”
2. WeChat address book-add friend-search Number - enter "pondbaystudio"
3. Use WeChat to scan the QR code below

What’s still popular is the ease of use, flexibility and a strong ecosystem. 1) Ease of use and simple syntax make it the first choice for beginners. 2) Closely integrated with web development, excellent interaction with HTTP requests and database. 3) The huge ecosystem provides a wealth of tools and libraries. 4) Active community and open source nature adapts them to new needs and technology trends.

PHP and Python are both high-level programming languages that are widely used in web development, data processing and automation tasks. 1.PHP is often used to build dynamic websites and content management systems, while Python is often used to build web frameworks and data science. 2.PHP uses echo to output content, Python uses print. 3. Both support object-oriented programming, but the syntax and keywords are different. 4. PHP supports weak type conversion, while Python is more stringent. 5. PHP performance optimization includes using OPcache and asynchronous programming, while Python uses cProfile and asynchronous programming.

PHP is mainly procedural programming, but also supports object-oriented programming (OOP); Python supports a variety of paradigms, including OOP, functional and procedural programming. PHP is suitable for web development, and Python is suitable for a variety of applications such as data analysis and machine learning.

PHP originated in 1994 and was developed by RasmusLerdorf. It was originally used to track website visitors and gradually evolved into a server-side scripting language and was widely used in web development. Python was developed by Guidovan Rossum in the late 1980s and was first released in 1991. It emphasizes code readability and simplicity, and is suitable for scientific computing, data analysis and other fields.

PHP is suitable for web development and rapid prototyping, and Python is suitable for data science and machine learning. 1.PHP is used for dynamic web development, with simple syntax and suitable for rapid development. 2. Python has concise syntax, is suitable for multiple fields, and has a strong library ecosystem.

PHP remains important in the modernization process because it supports a large number of websites and applications and adapts to development needs through frameworks. 1.PHP7 improves performance and introduces new features. 2. Modern frameworks such as Laravel, Symfony and CodeIgniter simplify development and improve code quality. 3. Performance optimization and best practices further improve application efficiency.

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP type prompts to improve code quality and readability. 1) Scalar type tips: Since PHP7.0, basic data types are allowed to be specified in function parameters, such as int, float, etc. 2) Return type prompt: Ensure the consistency of the function return value type. 3) Union type prompt: Since PHP8.0, multiple types are allowed to be specified in function parameters or return values. 4) Nullable type prompt: Allows to include null values and handle functions that may return null values.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

Dreamweaver Mac version
Visual web development tools

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software