<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>微信公众号 &#8211; 个人随笔</title>
	<atom:link href="/classify/%E7%A7%BB%E5%8A%A8%E7%AB%AF%E5%BC%80%E5%8F%91/%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description></description>
	<lastBuildDate>Tue, 29 Mar 2022 15:26:11 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.1</generator>

<image>
	<url>/wp-content/uploads/2022/01/cropped-截屏2022-01-01-18.57.09-32x32.png</url>
	<title>微信公众号 &#8211; 个人随笔</title>
	<link>/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>微信公众号（一）服务号与订阅号、编辑模式和开发模式、接口开发、TOKEN、微信六大接口、阿里云服务器</title>
		<link>/%e7%a7%bb%e5%8a%a8%e7%ab%af%e5%bc%80%e5%8f%91/5626.html</link>
					<comments>/%e7%a7%bb%e5%8a%a8%e7%ab%af%e5%bc%80%e5%8f%91/5626.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 15:22:41 +0000</pubDate>
				<category><![CDATA[微信公众号]]></category>
		<category><![CDATA[移动端开发]]></category>
		<category><![CDATA[TOKEN]]></category>
		<category><![CDATA[微信六大接口]]></category>
		<category><![CDATA[接口开发]]></category>
		<category><![CDATA[服务号与订阅号]]></category>
		<category><![CDATA[编辑模式和开发模式]]></category>
		<category><![CDATA[阿里云服务器]]></category>
		<guid isPermaLink="false">/?p=5626</guid>

					<description><![CDATA[移动端开发（微信开发）day1 一、微信公众平台概述 1、历史起源 2011年1月21日，腾讯推出微信（张小龙 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>移动端开发（微信开发）day1</h1>
<h1><a id="post-5626-_Toc450923180"></a>一、微信公众平台概述</h1>
<h2><a id="post-5626-_Toc438049747"></a><a id="post-5626-_Toc450923181"></a><a id="post-5626-_Toc445307507"></a>1、历史起源 </h2>
<ul>
<li>
    2011年1月21日，腾讯推出微信（张小龙）
  </li>
<li>
    2011年8月，用户达到1500万 。到2011年底，微信用户已超过5000万
  </li>
<li>
    2012年8月20日，腾讯推出微信公众平台功能，同年11月开放第三方接口
  </li>
<li>
    2013年1月微信突破3亿，海外版wechat用户也达到7000万
  </li>
<li>
    2013年10月24日，腾讯微信的用户数量已经超过了6亿，每日活跃用户1亿
  </li>
</ul>
<h2><a id="post-5626-_Toc438049748"></a><a id="post-5626-_Toc445307508"></a><a id="post-5626-_Toc450923182"></a>2、微信公众平台 </h2>
<ul>
<li>
    微信公众平台：给个人、企业和组织提供业务服务与用户管理能力的服务平台，如：
  </li>
</ul>
<p>
  查看关注用户，回复用户消息，推送文章消息给用户等
</p>
<ul>
<li>
    平台地址：<a href="https://mp.weixin.qq.com/">https://mp.weixin.qq.com/</a>
  </li>
</ul>
<h2><a id="post-5626-_Toc450923183"></a><a id="post-5626-_Toc438049749"></a><a id="post-5626-_Toc445307509"></a>3、微信与微信公众平台区别（★） </h2>
<ul>
<li>
    微信：是一款跨平台的通讯工具。支持单人、多人参与。通过手机网络发送语音、
  </li>
</ul>
<p>
  图片、视频和文字。
</p>
<ul>
<li>
    微信公众平台：管理公众号的系统/平台，可以查看关注用户，推送消息给用户
  </li>
</ul>
<h2><a id="post-5626-_Toc438049751"></a><a id="post-5626-_Toc450923185"></a><a id="post-5626-_Toc445307511"></a>4、微信公众号</h2>
<p><img fetchpriority="high" decoding="async" width="610" height="322" src="/wp-content/uploads/2018/05/word-image-5101.png" class="wp-image-5627" srcset="/wp-content/uploads/2018/05/word-image-5101.png 610w, /wp-content/uploads/2018/05/word-image-5101-300x158.png 300w" sizes="(max-width: 610px) 100vw, 610px" /></p>
<h1><a id="post-5626-_Toc438049752"></a><a id="post-5626-_Toc445307512"></a><a id="post-5626-_Toc450923186"></a>二、概念</h1>
<h2><a id="post-5626-_Toc438049754"></a><a id="post-5626-_Toc450923188"></a><a id="post-5626-_Toc445307514"></a>1、微信公众号：订阅号与服务号的区别 </h2>
<ul>
<li><strong>订阅号：</strong>针对的是个人和媒体，每天只能发送一条信息，默认有自定义菜单（不可
  </li>
</ul>
<p>
  以自定义跳转地址），不支持微信认证（注：目前订阅号不支持升级服务号）
</p>
<ul>
<li><strong>服务号：</strong>针对的是企业或组织，每月只能发送4条信息，默认有自定义的菜单，认
  </li>
</ul>
<p>
  证（300/年），认证完成可以使用高级接口（如：微信支付，用户管理等）
</p>
<p><img decoding="async" width="388" height="80" src="/wp-content/uploads/2018/05/word-image-5102.png" class="wp-image-5628" srcset="/wp-content/uploads/2018/05/word-image-5102.png 388w, /wp-content/uploads/2018/05/word-image-5102-300x62.png 300w" sizes="(max-width: 388px) 100vw, 388px" /><br />
<img decoding="async" width="1032" height="489" src="/wp-content/uploads/2018/05/word-image-5103.png" class="wp-image-5629" srcset="/wp-content/uploads/2018/05/word-image-5103.png 1032w, /wp-content/uploads/2018/05/word-image-5103-300x142.png 300w, /wp-content/uploads/2018/05/word-image-5103-768x364.png 768w, /wp-content/uploads/2018/05/word-image-5103-1024x485.png 1024w" sizes="(max-width: 1032px) 100vw, 1032px" /><br />
<img loading="lazy" decoding="async" width="634" height="455" src="/wp-content/uploads/2018/05/word-image-5104.png" class="wp-image-5630" srcset="/wp-content/uploads/2018/05/word-image-5104.png 634w, /wp-content/uploads/2018/05/word-image-5104-300x215.png 300w" sizes="(max-width: 634px) 100vw, 634px" /></p>
<h2><a id="post-5626-_Toc450923189"></a>微信平台的两种运营模式（★）</h2>
<ul>
<li>
    说明：在微信公众平台注册成功后可以获得一个微信公众号（订阅/服务
  </li>
</ul>
<p>
  等），该公众号可以分享给用户关注，并且后期登录公众平台可以进去管
</p>
<p>
  理（如：查看关注用户，回复关注用户消息，推送消息给关注用户等）
</p>
<ul>
<li>
    编辑模式运营：通过之前注册的公众平台管理公众号
  </li>
<li>
    开发模式运营：不用原来注册的平台管理公众号，而是自己独立开发
  </li>
</ul>
<p>
  脚下留心：开发者模式和编辑模式相互排斥
</p>
<h2><a id="post-5626-_Toc450923190"></a>编辑模式适用场景</h2>
<ul>
<li>
    不具备开发能力的运营者
  </li>
<li>
    主要是进行品牌宣传、新闻媒体、自助客服的公众帐号
  </li>
<li>
    运营初期，不需要特别多的功能
  </li>
<li>
    开发模式系统升级、故障等特殊情况
  </li>
</ul>
<h1>三、公众平台注册</h1>
<h2>1、打开官网</h2>
<p>
  官网：<a href="https://mp.weixin.qq.com/">https://mp.weixin.qq.com/</a>
</p>
<p><img loading="lazy" decoding="async" width="1200" height="509" src="/wp-content/uploads/2018/05/word-image-5105.png" class="wp-image-5631" srcset="/wp-content/uploads/2018/05/word-image-5105.png 1200w, /wp-content/uploads/2018/05/word-image-5105-300x127.png 300w, /wp-content/uploads/2018/05/word-image-5105-768x326.png 768w, /wp-content/uploads/2018/05/word-image-5105-1024x434.png 1024w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<h2>2、填写基本资料</h2>
<p><img loading="lazy" decoding="async" width="824" height="722" src="/wp-content/uploads/2018/05/word-image-5106.png" class="wp-image-5632" srcset="/wp-content/uploads/2018/05/word-image-5106.png 824w, /wp-content/uploads/2018/05/word-image-5106-300x263.png 300w, /wp-content/uploads/2018/05/word-image-5106-768x673.png 768w" sizes="(max-width: 824px) 100vw, 824px" /></p>
<h2>3、验证邮箱，选择账号类型</h2>
<p><img loading="lazy" decoding="async" width="1217" height="611" src="/wp-content/uploads/2018/05/word-image-5107.png" class="wp-image-5633" srcset="/wp-content/uploads/2018/05/word-image-5107.png 1217w, /wp-content/uploads/2018/05/word-image-5107-300x151.png 300w, /wp-content/uploads/2018/05/word-image-5107-768x386.png 768w, /wp-content/uploads/2018/05/word-image-5107-1024x514.png 1024w" sizes="(max-width: 1217px) 100vw, 1217px" /><br />
<img loading="lazy" decoding="async" width="633" height="293" src="/wp-content/uploads/2018/05/word-image-5108.png" class="wp-image-5634" srcset="/wp-content/uploads/2018/05/word-image-5108.png 633w, /wp-content/uploads/2018/05/word-image-5108-300x139.png 300w" sizes="(max-width: 633px) 100vw, 633px" /></p>
<p><img loading="lazy" decoding="async" width="1163" height="716" src="/wp-content/uploads/2018/05/word-image-5109.png" class="wp-image-5635" srcset="/wp-content/uploads/2018/05/word-image-5109.png 1163w, /wp-content/uploads/2018/05/word-image-5109-300x185.png 300w, /wp-content/uploads/2018/05/word-image-5109-768x473.png 768w, /wp-content/uploads/2018/05/word-image-5109-1024x630.png 1024w" sizes="(max-width: 1163px) 100vw, 1163px" /><br />
<img loading="lazy" decoding="async" width="950" height="501" src="/wp-content/uploads/2018/05/word-image-5110.png" class="wp-image-5636" srcset="/wp-content/uploads/2018/05/word-image-5110.png 950w, /wp-content/uploads/2018/05/word-image-5110-300x158.png 300w, /wp-content/uploads/2018/05/word-image-5110-768x405.png 768w" sizes="(max-width: 950px) 100vw, 950px" /></p>
<h2>4、选择【订阅号】后，信息录入</h2>
<p>
  填写身份证姓名和身份证卡号
</p>
<p><img loading="lazy" decoding="async" width="993" height="530" src="/wp-content/uploads/2018/05/word-image-5111.png" class="wp-image-5637" srcset="/wp-content/uploads/2018/05/word-image-5111.png 993w, /wp-content/uploads/2018/05/word-image-5111-300x160.png 300w, /wp-content/uploads/2018/05/word-image-5111-768x410.png 768w" sizes="(max-width: 993px) 100vw, 993px" /><br />
<img loading="lazy" decoding="async" width="839" height="406" src="/wp-content/uploads/2018/05/word-image-5112.png" class="wp-image-5638" srcset="/wp-content/uploads/2018/05/word-image-5112.png 839w, /wp-content/uploads/2018/05/word-image-5112-300x145.png 300w, /wp-content/uploads/2018/05/word-image-5112-768x372.png 768w" sizes="(max-width: 839px) 100vw, 839px" /></p>
<h2>5、公众号信息</h2>
<p><img loading="lazy" decoding="async" width="1071" height="559" src="/wp-content/uploads/2018/05/word-image-5113.png" class="wp-image-5639" srcset="/wp-content/uploads/2018/05/word-image-5113.png 1071w, /wp-content/uploads/2018/05/word-image-5113-300x157.png 300w, /wp-content/uploads/2018/05/word-image-5113-768x401.png 768w, /wp-content/uploads/2018/05/word-image-5113-1024x534.png 1024w" sizes="(max-width: 1071px) 100vw, 1071px" /><br />
<img loading="lazy" decoding="async" width="774" height="455" src="/wp-content/uploads/2018/05/word-image-5114.png" class="wp-image-5640" srcset="/wp-content/uploads/2018/05/word-image-5114.png 774w, /wp-content/uploads/2018/05/word-image-5114-300x176.png 300w, /wp-content/uploads/2018/05/word-image-5114-768x451.png 768w" sizes="(max-width: 774px) 100vw, 774px" /></p>
<h2>6、注册成功页</h2>
<p>
  通过网址【<a href="https://mp.weixin.qq.com/">https://mp.weixin.qq.com/</a>】登录，也可以进入该页面
</p>
<p><img loading="lazy" decoding="async" width="1256" height="520" src="/wp-content/uploads/2018/05/word-image-5115.png" class="wp-image-5641" srcset="/wp-content/uploads/2018/05/word-image-5115.png 1256w, /wp-content/uploads/2018/05/word-image-5115-300x124.png 300w, /wp-content/uploads/2018/05/word-image-5115-768x318.png 768w, /wp-content/uploads/2018/05/word-image-5115-1024x424.png 1024w" sizes="(max-width: 1256px) 100vw, 1256px" /></p>
<h1><a id="post-5626-_Toc450923191"></a>四、编辑模式运营（了解）</h1>
<h2>1、编辑模式和开发模式切换</h2>
<p><img loading="lazy" decoding="async" width="1178" height="513" src="/wp-content/uploads/2018/05/word-image-5116.png" class="wp-image-5642" srcset="/wp-content/uploads/2018/05/word-image-5116.png 1178w, /wp-content/uploads/2018/05/word-image-5116-300x131.png 300w, /wp-content/uploads/2018/05/word-image-5116-768x334.png 768w, /wp-content/uploads/2018/05/word-image-5116-1024x446.png 1024w" sizes="(max-width: 1178px) 100vw, 1178px" /></p>
<p>
  脚下留心：切换开发模式后编辑模式将禁用
</p>
<p><img loading="lazy" decoding="async" width="1140" height="304" src="/wp-content/uploads/2018/05/word-image-5117.png" class="wp-image-5643" srcset="/wp-content/uploads/2018/05/word-image-5117.png 1140w, /wp-content/uploads/2018/05/word-image-5117-300x80.png 300w, /wp-content/uploads/2018/05/word-image-5117-768x205.png 768w, /wp-content/uploads/2018/05/word-image-5117-1024x273.png 1024w" sizes="(max-width: 1140px) 100vw, 1140px" /></p>
<h2>2、编辑模式功能</h2>
<h3>1）群发功能</h3>
<p><img loading="lazy" decoding="async" width="947" height="656" src="/wp-content/uploads/2018/05/word-image-5118.png" class="wp-image-5644" srcset="/wp-content/uploads/2018/05/word-image-5118.png 947w, /wp-content/uploads/2018/05/word-image-5118-300x208.png 300w, /wp-content/uploads/2018/05/word-image-5118-768x532.png 768w" sizes="(max-width: 947px) 100vw, 947px" /><br />
<img loading="lazy" decoding="async" width="653" height="210" src="/wp-content/uploads/2018/05/word-image-5119.png" class="wp-image-5645" srcset="/wp-content/uploads/2018/05/word-image-5119.png 653w, /wp-content/uploads/2018/05/word-image-5119-300x96.png 300w" sizes="(max-width: 653px) 100vw, 653px" /><br />
<img loading="lazy" decoding="async" width="1147" height="557" src="/wp-content/uploads/2018/05/word-image-5120.png" class="wp-image-5646" srcset="/wp-content/uploads/2018/05/word-image-5120.png 1147w, /wp-content/uploads/2018/05/word-image-5120-300x146.png 300w, /wp-content/uploads/2018/05/word-image-5120-768x373.png 768w, /wp-content/uploads/2018/05/word-image-5120-1024x497.png 1024w" sizes="(max-width: 1147px) 100vw, 1147px" /></p>
<h3>2）回复功能 &#8211; 被关注添加自动回复</h3>
<p>
  关注公共账号，平台发送的关注信息或欢迎语，我们通常称之为<strong>订阅回复</strong>或<strong>关注回复</strong>。
</p>
<p><img loading="lazy" decoding="async" width="1110" height="480" src="/wp-content/uploads/2018/05/word-image-5121.png" class="wp-image-5647" srcset="/wp-content/uploads/2018/05/word-image-5121.png 1110w, /wp-content/uploads/2018/05/word-image-5121-300x130.png 300w, /wp-content/uploads/2018/05/word-image-5121-768x332.png 768w, /wp-content/uploads/2018/05/word-image-5121-1024x443.png 1024w" sizes="(max-width: 1110px) 100vw, 1110px" /></p>
<h3>3）回复功能 &#8211; 关键词自动回复</h3>
<p><img loading="lazy" decoding="async" width="535" height="163" src="/wp-content/uploads/2018/05/word-image-5122.png" class="wp-image-5648" srcset="/wp-content/uploads/2018/05/word-image-5122.png 535w, /wp-content/uploads/2018/05/word-image-5122-300x91.png 300w" sizes="(max-width: 535px) 100vw, 535px" /></p>
<p>
  当我们<strong>设定的关键词</strong>与<strong>用户发送的关键词</strong>相匹配时，系统自动回复执行消息。
</p>
<p><img loading="lazy" decoding="async" width="1046" height="576" src="/wp-content/uploads/2018/05/word-image-5123.png" class="wp-image-5649" srcset="/wp-content/uploads/2018/05/word-image-5123.png 1046w, /wp-content/uploads/2018/05/word-image-5123-300x165.png 300w, /wp-content/uploads/2018/05/word-image-5123-768x423.png 768w, /wp-content/uploads/2018/05/word-image-5123-1024x564.png 1024w" sizes="(max-width: 1046px) 100vw, 1046px" /></p>
<p><strong>未全匹配</strong>：当用户发送的内容包含当前关键词，系统自动回复。
</p>
<p><strong>已全匹配</strong>：当用户发送的内容与当前关键词完全匹配，系统自动回复
</p>
<p><img loading="lazy" decoding="async" width="951" height="540" src="/wp-content/uploads/2018/05/word-image-5124.png" class="wp-image-5650" srcset="/wp-content/uploads/2018/05/word-image-5124.png 951w, /wp-content/uploads/2018/05/word-image-5124-300x170.png 300w, /wp-content/uploads/2018/05/word-image-5124-768x436.png 768w" sizes="(max-width: 951px) 100vw, 951px" /><br />
<img loading="lazy" decoding="async" width="957" height="567" src="/wp-content/uploads/2018/05/word-image-5125.png" class="wp-image-5651" srcset="/wp-content/uploads/2018/05/word-image-5125.png 957w, /wp-content/uploads/2018/05/word-image-5125-300x178.png 300w, /wp-content/uploads/2018/05/word-image-5125-768x455.png 768w" sizes="(max-width: 957px) 100vw, 957px" /></p>
<p><strong>︴思考：如何修改已经存在的规则</strong>
</p>
<p><img loading="lazy" decoding="async" width="998" height="447" src="/wp-content/uploads/2018/05/word-image-5126.png" class="wp-image-5652" srcset="/wp-content/uploads/2018/05/word-image-5126.png 998w, /wp-content/uploads/2018/05/word-image-5126-300x134.png 300w, /wp-content/uploads/2018/05/word-image-5126-768x344.png 768w" sizes="(max-width: 998px) 100vw, 998px" /></p>
<h3>4）回复功能 &#8211; 消息自动回复</h3>
<p>
  当用户发送的关键词与我们设定的关键词不匹配时，系统自动回复此信息。
</p>
<p><img loading="lazy" decoding="async" width="1070" height="489" src="/wp-content/uploads/2018/05/word-image-5127.png" class="wp-image-5653" srcset="/wp-content/uploads/2018/05/word-image-5127.png 1070w, /wp-content/uploads/2018/05/word-image-5127-300x137.png 300w, /wp-content/uploads/2018/05/word-image-5127-768x351.png 768w, /wp-content/uploads/2018/05/word-image-5127-1024x468.png 1024w" sizes="(max-width: 1070px) 100vw, 1070px" /></p>
<p>
  温馨提示：
</p>
<p>
  1、消息自动回复：1个小时内回复1—2条内容；
</p>
<p>
  2、暂不支持设置图文、网页地址消息回复；
</p>
<p>
  3、消息自动回复只能设置一条信息回复。
</p>
<p><img loading="lazy" decoding="async" width="668" height="460" src="/wp-content/uploads/2018/05/word-image-5128.png" class="wp-image-5654" srcset="/wp-content/uploads/2018/05/word-image-5128.png 668w, /wp-content/uploads/2018/05/word-image-5128-300x207.png 300w, /wp-content/uploads/2018/05/word-image-5128-220x150.png 220w" sizes="(max-width: 668px) 100vw, 668px" /></p>
<h2><a id="post-5626-_Toc450923192"></a>︴案例：简单号码薄</h2>
<h3>1）功能需求和效果</h3>
<p>
  用户关注后或输【？】自动弹出自定义回复文本信息如下：
</p>
<p>
  回复1特种服务号码
</p>
<p>
  回复2通讯服务号码
</p>
<p>
  回复3银行服务号码
</p>
<p>
  回复4用户反馈
</p>
<p><img loading="lazy" decoding="async" width="1035" height="345" src="/wp-content/uploads/2018/05/word-image-5129.png" class="wp-image-5655" srcset="/wp-content/uploads/2018/05/word-image-5129.png 1035w, /wp-content/uploads/2018/05/word-image-5129-300x100.png 300w, /wp-content/uploads/2018/05/word-image-5129-768x256.png 768w, /wp-content/uploads/2018/05/word-image-5129-1024x341.png 1024w" sizes="(max-width: 1035px) 100vw, 1035px" /></p>
<h3>2）回复1 </h3>
<p>
  常用特种服务号码：
</p>
<p>
  匪警：110
</p>
<p>
  火警：119
</p>
<p>
  急救中心：120
</p>
<p><img loading="lazy" decoding="async" width="1035" height="467" src="/wp-content/uploads/2018/05/word-image-5130.png" class="wp-image-5656" srcset="/wp-content/uploads/2018/05/word-image-5130.png 1035w, /wp-content/uploads/2018/05/word-image-5130-300x135.png 300w, /wp-content/uploads/2018/05/word-image-5130-768x347.png 768w, /wp-content/uploads/2018/05/word-image-5130-1024x462.png 1024w" sizes="(max-width: 1035px) 100vw, 1035px" /></p>
<h3>3）回复2 </h3>
<p>
  常用通讯服务号码：
</p>
<p>
  中移动：10086
</p>
<p>
  中电信：10000
</p>
<p>
  中联通：10010
</p>
<p><img loading="lazy" decoding="async" width="1061" height="468" src="/wp-content/uploads/2018/05/word-image-5131.png" class="wp-image-5657" srcset="/wp-content/uploads/2018/05/word-image-5131.png 1061w, /wp-content/uploads/2018/05/word-image-5131-300x132.png 300w, /wp-content/uploads/2018/05/word-image-5131-768x339.png 768w, /wp-content/uploads/2018/05/word-image-5131-1024x452.png 1024w" sizes="(max-width: 1061px) 100vw, 1061px" /></p>
<h3>4）回复3</h3>
<p>
  银行服务号码
</p>
<p>
  建设银行：95533
</p>
<p>
  工商银行：99588
</p>
<p>
  农业银行：95599
</p>
<p><img loading="lazy" decoding="async" width="1027" height="420" src="/wp-content/uploads/2018/05/word-image-5132.png" class="wp-image-5658" srcset="/wp-content/uploads/2018/05/word-image-5132.png 1027w, /wp-content/uploads/2018/05/word-image-5132-300x123.png 300w, /wp-content/uploads/2018/05/word-image-5132-768x314.png 768w, /wp-content/uploads/2018/05/word-image-5132-1024x419.png 1024w" sizes="(max-width: 1027px) 100vw, 1027px" /></p>
<h3>5）回复4</h3>
<p>
  尊敬的用户，为了更好的为您服务，请将系统的不足之处反馈给我们。
</p>
<p>
  反馈格式：@+建议内容
</p>
<p>
  例如：@希望增加***号码
</p>
<p>
  回复：感谢您的宝贵建议，我们会努力为您提供更好的服务！
</p>
<p><img loading="lazy" decoding="async" width="1031" height="285" src="/wp-content/uploads/2018/05/word-image-5133.png" class="wp-image-5659" srcset="/wp-content/uploads/2018/05/word-image-5133.png 1031w, /wp-content/uploads/2018/05/word-image-5133-300x83.png 300w, /wp-content/uploads/2018/05/word-image-5133-768x212.png 768w, /wp-content/uploads/2018/05/word-image-5133-1024x283.png 1024w" sizes="(max-width: 1031px) 100vw, 1031px" /></p>
<h3>5）关注：</h3>
<p>
  欢迎关注简易号码簿！
</p>
<p>
  在这里，我们为您提供常用号码查询服务。您可以通过文本菜单交互或关键字搜索的方式查找号码。
</p>
<p>
  快回复？开始体验吧！
</p>
<p><img loading="lazy" decoding="async" width="960" height="457" src="/wp-content/uploads/2018/05/word-image-5134.png" class="wp-image-5660" srcset="/wp-content/uploads/2018/05/word-image-5134.png 960w, /wp-content/uploads/2018/05/word-image-5134-300x143.png 300w, /wp-content/uploads/2018/05/word-image-5134-768x366.png 768w" sizes="(max-width: 960px) 100vw, 960px" /></p>
<h2>︴案例：自定义菜单</h2>
<h3>1）说明</h3>
<ul>
<li>
    自定义菜单一级菜单3个二级菜单5个（共15个菜单）
  </li>
<li>
    微信自定义菜单，默认是有24小时的缓冲期，所以无法实时预览（注：可以通过取消关注并再次关注，解决此问题）
  </li>
</ul>
<h3>2）需求：精仿传智播客官方微信</h3>
<p><img loading="lazy" decoding="async" width="499" height="584" src="/wp-content/uploads/2018/05/word-image-5135.png" class="wp-image-5661" srcset="/wp-content/uploads/2018/05/word-image-5135.png 499w, /wp-content/uploads/2018/05/word-image-5135-256x300.png 256w" sizes="(max-width: 499px) 100vw, 499px" /></p>
<h3>3）步骤</h3>
<p><img loading="lazy" decoding="async" width="854" height="559" src="/wp-content/uploads/2018/05/word-image-5136.png" class="wp-image-5662" srcset="/wp-content/uploads/2018/05/word-image-5136.png 854w, /wp-content/uploads/2018/05/word-image-5136-300x196.png 300w, /wp-content/uploads/2018/05/word-image-5136-768x503.png 768w" sizes="(max-width: 854px) 100vw, 854px" /></p>
<h1><a id="post-5626-_Toc450923193"></a>五、开发者模式运营（重要）</h1>
<h2><a id="post-5626-_Toc450923194"></a>1、概念</h2>
<h3>1）编辑模式原理图 </h3>
<p>
  当用户发送消息时,直接发送到微信服务器上,经过微信服务器的处理,则返回给客户端.
</p>
<p><img loading="lazy" decoding="async" width="668" height="338" src="/wp-content/uploads/2018/05/word-image-5137.png" class="wp-image-5663" srcset="/wp-content/uploads/2018/05/word-image-5137.png 668w, /wp-content/uploads/2018/05/word-image-5137-300x152.png 300w" sizes="(max-width: 668px) 100vw, 668px" /></p>
<h3>2）开发者模式原理图 </h3>
<p><img loading="lazy" decoding="async" width="1011" height="432" src="/wp-content/uploads/2018/05/word-image-5138.png" class="wp-image-5664" srcset="/wp-content/uploads/2018/05/word-image-5138.png 1011w, /wp-content/uploads/2018/05/word-image-5138-300x128.png 300w, /wp-content/uploads/2018/05/word-image-5138-768x328.png 768w" sizes="(max-width: 1011px) 100vw, 1011px" /></p>
<p>
  请求：用户发送消息 -&gt;（XML报文）-&gt;  微信服务器  -&gt;（XML报文）-&gt; 自定义服务器
</p>
<p>
  响应：用户发送消息 &lt;-（XML报文）&lt;-  微信服务器  &lt;-（XML报文）&lt;- 自定义服务器
</p>
<h2>2、准备自定义服务器（SAE云 或者 阿里云）</h2>
<h3>1）SAE云（默认有PHP环境）</h3>
<ul>
<li><strong>步骤1</strong>：打开官网注册进入用户中心
  </li>
</ul>
<p><a href="http://www.sinacloud.com/">http://www.sinacloud.com/</a>
</p>
<ul>
<li><strong>步骤2</strong>：创建应用（相当于创建虚拟主机）
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="967" height="559" src="/wp-content/uploads/2018/05/word-image-5139.png" class="wp-image-5665" srcset="/wp-content/uploads/2018/05/word-image-5139.png 967w, /wp-content/uploads/2018/05/word-image-5139-300x173.png 300w, /wp-content/uploads/2018/05/word-image-5139-768x444.png 768w" sizes="(max-width: 967px) 100vw, 967px" /><br />
<img loading="lazy" decoding="async" width="646" height="482" src="/wp-content/uploads/2018/05/word-image-5140.png" class="wp-image-5666" srcset="/wp-content/uploads/2018/05/word-image-5140.png 646w, /wp-content/uploads/2018/05/word-image-5140-300x224.png 300w" sizes="(max-width: 646px) 100vw, 646px" /><br />
<img loading="lazy" decoding="async" width="974" height="501" src="/wp-content/uploads/2018/05/word-image-5141.png" class="wp-image-5667" srcset="/wp-content/uploads/2018/05/word-image-5141.png 974w, /wp-content/uploads/2018/05/word-image-5141-300x154.png 300w, /wp-content/uploads/2018/05/word-image-5141-768x395.png 768w" sizes="(max-width: 974px) 100vw, 974px" /><br />
<img loading="lazy" decoding="async" width="897" height="638" src="/wp-content/uploads/2018/05/word-image-5142.png" class="wp-image-5668" srcset="/wp-content/uploads/2018/05/word-image-5142.png 897w, /wp-content/uploads/2018/05/word-image-5142-300x213.png 300w, /wp-content/uploads/2018/05/word-image-5142-768x546.png 768w" sizes="(max-width: 897px) 100vw, 897px" /><br />
<img loading="lazy" decoding="async" width="719" height="606" src="/wp-content/uploads/2018/05/word-image-5143.png" class="wp-image-5669" srcset="/wp-content/uploads/2018/05/word-image-5143.png 719w, /wp-content/uploads/2018/05/word-image-5143-300x253.png 300w" sizes="(max-width: 719px) 100vw, 719px" /><br />
<img loading="lazy" decoding="async" width="1161" height="623" src="/wp-content/uploads/2018/05/word-image-5144.png" class="wp-image-5670" srcset="/wp-content/uploads/2018/05/word-image-5144.png 1161w, /wp-content/uploads/2018/05/word-image-5144-300x161.png 300w, /wp-content/uploads/2018/05/word-image-5144-768x412.png 768w, /wp-content/uploads/2018/05/word-image-5144-1024x549.png 1024w" sizes="(max-width: 1161px) 100vw, 1161px" /><br />
<img loading="lazy" decoding="async" width="1230" height="676" src="/wp-content/uploads/2018/05/word-image-5145.png" class="wp-image-5671" srcset="/wp-content/uploads/2018/05/word-image-5145.png 1230w, /wp-content/uploads/2018/05/word-image-5145-300x165.png 300w, /wp-content/uploads/2018/05/word-image-5145-768x422.png 768w, /wp-content/uploads/2018/05/word-image-5145-1024x563.png 1024w" sizes="(max-width: 1230px) 100vw, 1230px" /></p>
<ul>
<li><strong>步骤3</strong>：服务器代码管理（svn版本控制软件）
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1187" height="682" src="/wp-content/uploads/2018/05/word-image-5146.png" class="wp-image-5672" srcset="/wp-content/uploads/2018/05/word-image-5146.png 1187w, /wp-content/uploads/2018/05/word-image-5146-300x172.png 300w, /wp-content/uploads/2018/05/word-image-5146-768x441.png 768w, /wp-content/uploads/2018/05/word-image-5146-1024x588.png 1024w" sizes="(max-width: 1187px) 100vw, 1187px" /><br />
<img loading="lazy" decoding="async" width="1265" height="656" src="/wp-content/uploads/2018/05/word-image-5147.png" class="wp-image-5673" srcset="/wp-content/uploads/2018/05/word-image-5147.png 1265w, /wp-content/uploads/2018/05/word-image-5147-300x156.png 300w, /wp-content/uploads/2018/05/word-image-5147-768x398.png 768w, /wp-content/uploads/2018/05/word-image-5147-1024x531.png 1024w" sizes="(max-width: 1265px) 100vw, 1265px" /><br />
<img loading="lazy" decoding="async" width="608" height="415" src="/wp-content/uploads/2018/05/word-image-5148.png" class="wp-image-5674" srcset="/wp-content/uploads/2018/05/word-image-5148.png 608w, /wp-content/uploads/2018/05/word-image-5148-300x205.png 300w, /wp-content/uploads/2018/05/word-image-5148-220x150.png 220w" sizes="(max-width: 608px) 100vw, 608px" /></p>
<p>
  脚下留心：仓库目录下必须有以1命名的文件下
</p>
<p><img loading="lazy" decoding="async" width="975" height="415" src="/wp-content/uploads/2018/05/word-image-5149.png" class="wp-image-5675" srcset="/wp-content/uploads/2018/05/word-image-5149.png 975w, /wp-content/uploads/2018/05/word-image-5149-300x128.png 300w, /wp-content/uploads/2018/05/word-image-5149-768x327.png 768w" sizes="(max-width: 975px) 100vw, 975px" /><br />
<img loading="lazy" decoding="async" width="1006" height="466" src="/wp-content/uploads/2018/05/word-image-5150.png" class="wp-image-5676" srcset="/wp-content/uploads/2018/05/word-image-5150.png 1006w, /wp-content/uploads/2018/05/word-image-5150-300x139.png 300w, /wp-content/uploads/2018/05/word-image-5150-768x356.png 768w" sizes="(max-width: 1006px) 100vw, 1006px" /></p>
<ul>
<li><strong>步骤4</strong>：浏览器代码
  </li>
</ul>
<p>
  #常看创建应用设置的二级域名是什么，每个人填写的不一样）
</p>
<p><a href="http://phpopenfather.applinzi.com/index.php" class="broken_link">http://php0225.applinzi.com/test.php</a>
</p>
<p><img loading="lazy" decoding="async" width="473" height="184" src="/wp-content/uploads/2018/05/word-image-5151.png" class="wp-image-5677" srcset="/wp-content/uploads/2018/05/word-image-5151.png 473w, /wp-content/uploads/2018/05/word-image-5151-300x117.png 300w" sizes="(max-width: 473px) 100vw, 473px" /><br />
<img loading="lazy" decoding="async" width="973" height="236" src="/wp-content/uploads/2018/05/word-image-5152.png" class="wp-image-5678" srcset="/wp-content/uploads/2018/05/word-image-5152.png 973w, /wp-content/uploads/2018/05/word-image-5152-300x73.png 300w, /wp-content/uploads/2018/05/word-image-5152-768x186.png 768w" sizes="(max-width: 973px) 100vw, 973px" /></p>
<h3>2）创建阿里云服务器（需要自己安装PHP环境）</h3>
<ul>
<li><strong>步骤1</strong>：打开官网注册并点击顶部控制台，进入控制台页点击左侧菜单购买服务器
  </li>
</ul>
<p><a href="https://www.aliyun.com/">https://www.aliyun.com/</a>
</p>
<p><img loading="lazy" decoding="async" width="473" height="99" src="/wp-content/uploads/2018/05/word-image-5153.png" class="wp-image-5679" srcset="/wp-content/uploads/2018/05/word-image-5153.png 473w, /wp-content/uploads/2018/05/word-image-5153-300x63.png 300w" sizes="(max-width: 473px) 100vw, 473px" /><br />
<img loading="lazy" decoding="async" width="855" height="448" src="/wp-content/uploads/2018/05/word-image-5154.png" class="wp-image-5680" srcset="/wp-content/uploads/2018/05/word-image-5154.png 855w, /wp-content/uploads/2018/05/word-image-5154-300x157.png 300w, /wp-content/uploads/2018/05/word-image-5154-768x402.png 768w" sizes="(max-width: 855px) 100vw, 855px" /></p>
<ul>
<li><strong>步骤2</strong>：选择购买指定节点服务器
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1365" height="280" src="/wp-content/uploads/2018/05/word-image-5155.png" class="wp-image-5681" srcset="/wp-content/uploads/2018/05/word-image-5155.png 1365w, /wp-content/uploads/2018/05/word-image-5155-300x62.png 300w, /wp-content/uploads/2018/05/word-image-5155-768x158.png 768w, /wp-content/uploads/2018/05/word-image-5155-1024x210.png 1024w" sizes="(max-width: 1365px) 100vw, 1365px" /></p>
<ul>
<li><strong>步骤3</strong>：选择计费方式（ps. 该方式需要账号有100元）
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="751" height="518" src="/wp-content/uploads/2018/05/word-image-5156.png" class="wp-image-5682" srcset="/wp-content/uploads/2018/05/word-image-5156.png 751w, /wp-content/uploads/2018/05/word-image-5156-300x207.png 300w" sizes="(max-width: 751px) 100vw, 751px" /><br />
<img loading="lazy" decoding="async" width="585" height="556" src="/wp-content/uploads/2018/05/word-image-5157.png" class="wp-image-5683" srcset="/wp-content/uploads/2018/05/word-image-5157.png 585w, /wp-content/uploads/2018/05/word-image-5157-300x285.png 300w" sizes="(max-width: 585px) 100vw, 585px" /><br />
<img loading="lazy" decoding="async" width="578" height="624" src="/wp-content/uploads/2018/05/word-image-5158.png" class="wp-image-5684" srcset="/wp-content/uploads/2018/05/word-image-5158.png 578w, /wp-content/uploads/2018/05/word-image-5158-278x300.png 278w" sizes="(max-width: 578px) 100vw, 578px" /></p>
<ul>
<li><strong>步骤4</strong>：服务器购买清单
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="946" height="548" src="/wp-content/uploads/2018/05/word-image-5159.png" class="wp-image-5685" srcset="/wp-content/uploads/2018/05/word-image-5159.png 946w, /wp-content/uploads/2018/05/word-image-5159-300x174.png 300w, /wp-content/uploads/2018/05/word-image-5159-768x445.png 768w" sizes="(max-width: 946px) 100vw, 946px" /></p>
<ul>
<li><strong>步骤5</strong>：获取服务器公网IP地址
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="682" height="317" src="/wp-content/uploads/2018/05/word-image-5160.png" class="wp-image-5686" srcset="/wp-content/uploads/2018/05/word-image-5160.png 682w, /wp-content/uploads/2018/05/word-image-5160-300x139.png 300w" sizes="(max-width: 682px) 100vw, 682px" /><br />
<img loading="lazy" decoding="async" width="930" height="283" src="/wp-content/uploads/2018/05/word-image-5161.png" class="wp-image-5687" srcset="/wp-content/uploads/2018/05/word-image-5161.png 930w, /wp-content/uploads/2018/05/word-image-5161-300x91.png 300w, /wp-content/uploads/2018/05/word-image-5161-768x234.png 768w" sizes="(max-width: 930px) 100vw, 930px" /></p>
<h3>配置阿里云（LAMP环境）</h3>
<ul>
<li>
    安装apache服务
  </li>
</ul>
<p>
  步骤1：安装
</p>
<p><img loading="lazy" decoding="async" width="598" height="168" src="/wp-content/uploads/2018/05/word-image-5162.png" class="wp-image-5688" srcset="/wp-content/uploads/2018/05/word-image-5162.png 598w, /wp-content/uploads/2018/05/word-image-5162-300x84.png 300w" sizes="(max-width: 598px) 100vw, 598px" /><br />
<img loading="lazy" decoding="async" width="508" height="229" src="/wp-content/uploads/2018/05/word-image-5163.png" class="wp-image-5689" srcset="/wp-content/uploads/2018/05/word-image-5163.png 508w, /wp-content/uploads/2018/05/word-image-5163-300x135.png 300w" sizes="(max-width: 508px) 100vw, 508px" /></p>
<p>
  步骤2：启动（注：第一次需要修改下配置文件）
</p>
<p><img loading="lazy" decoding="async" width="608" height="150" src="/wp-content/uploads/2018/05/word-image-5164.png" class="wp-image-5690" srcset="/wp-content/uploads/2018/05/word-image-5164.png 608w, /wp-content/uploads/2018/05/word-image-5164-300x74.png 300w" sizes="(max-width: 608px) 100vw, 608px" /><br />
<img loading="lazy" decoding="async" width="492" height="109" src="/wp-content/uploads/2018/05/word-image-5165.png" class="wp-image-5691" srcset="/wp-content/uploads/2018/05/word-image-5165.png 492w, /wp-content/uploads/2018/05/word-image-5165-300x66.png 300w" sizes="(max-width: 492px) 100vw, 492px" /><br />
<img loading="lazy" decoding="async" width="536" height="55" src="/wp-content/uploads/2018/05/word-image-5166.png" class="wp-image-5692" srcset="/wp-content/uploads/2018/05/word-image-5166.png 536w, /wp-content/uploads/2018/05/word-image-5166-300x31.png 300w" sizes="(max-width: 536px) 100vw, 536px" /></p>
<p>
  步骤3：输入ip访问
</p>
<p><img loading="lazy" decoding="async" width="973" height="385" src="/wp-content/uploads/2018/05/word-image-5167.png" class="wp-image-5693" srcset="/wp-content/uploads/2018/05/word-image-5167.png 973w, /wp-content/uploads/2018/05/word-image-5167-300x119.png 300w, /wp-content/uploads/2018/05/word-image-5167-768x304.png 768w" sizes="(max-width: 973px) 100vw, 973px" /></p>
<p>
  步骤4：修改网页访问
</p>
<p><img loading="lazy" decoding="async" width="811" height="121" src="/wp-content/uploads/2018/05/word-image-5168.png" class="wp-image-5694" srcset="/wp-content/uploads/2018/05/word-image-5168.png 811w, /wp-content/uploads/2018/05/word-image-5168-300x45.png 300w, /wp-content/uploads/2018/05/word-image-5168-768x115.png 768w" sizes="(max-width: 811px) 100vw, 811px" /></p>
<ul>
<li>
    安装php
  </li>
</ul>
<p>
  步骤1：安装
</p>
<p>
  yum -y install php php-mysql
</p>
<p><img loading="lazy" decoding="async" width="589" height="121" src="/wp-content/uploads/2018/05/word-image-5169.png" class="wp-image-5695" srcset="/wp-content/uploads/2018/05/word-image-5169.png 589w, /wp-content/uploads/2018/05/word-image-5169-300x62.png 300w" sizes="(max-width: 589px) 100vw, 589px" /><br />
<img loading="lazy" decoding="async" width="575" height="230" src="/wp-content/uploads/2018/05/word-image-5170.png" class="wp-image-5696" srcset="/wp-content/uploads/2018/05/word-image-5170.png 575w, /wp-content/uploads/2018/05/word-image-5170-300x120.png 300w" sizes="(max-width: 575px) 100vw, 575px" /></p>
<p>
  yum -y install gd php-gd gd-devel php-xml php-common php-curl php-mbstring php-ldap php-pear php-xmlrpc php-imap
</p>
<p><img loading="lazy" decoding="async" width="1119" height="170" src="/wp-content/uploads/2018/05/word-image-5171.png" class="wp-image-5697" srcset="/wp-content/uploads/2018/05/word-image-5171.png 1119w, /wp-content/uploads/2018/05/word-image-5171-300x46.png 300w, /wp-content/uploads/2018/05/word-image-5171-768x117.png 768w, /wp-content/uploads/2018/05/word-image-5171-1024x156.png 1024w" sizes="(max-width: 1119px) 100vw, 1119px" /><br />
<img loading="lazy" decoding="async" width="656" height="270" src="/wp-content/uploads/2018/05/word-image-5172.png" class="wp-image-5698" srcset="/wp-content/uploads/2018/05/word-image-5172.png 656w, /wp-content/uploads/2018/05/word-image-5172-300x123.png 300w" sizes="(max-width: 656px) 100vw, 656px" /></p>
<p>
  步骤2：重启apache，创建php文件测试
</p>
<p><img loading="lazy" decoding="async" width="740" height="493" src="/wp-content/uploads/2018/05/word-image-5173.png" class="wp-image-5699" srcset="/wp-content/uploads/2018/05/word-image-5173.png 740w, /wp-content/uploads/2018/05/word-image-5173-300x200.png 300w" sizes="(max-width: 740px) 100vw, 740px" /><br />
<img loading="lazy" decoding="async" width="637" height="338" src="/wp-content/uploads/2018/05/word-image-5174.png" class="wp-image-5700" srcset="/wp-content/uploads/2018/05/word-image-5174.png 637w, /wp-content/uploads/2018/05/word-image-5174-300x159.png 300w" sizes="(max-width: 637px) 100vw, 637px" /></p>
<ul>
<li>
    安装MySQL
  </li>
</ul>
<p>
  步骤1：安装
</p>
<p>
  yum -y install mysql mysql-server mysql-devel
</p>
<p><img loading="lazy" decoding="async" width="707" height="220" src="/wp-content/uploads/2018/05/word-image-5175.png" class="wp-image-5701" srcset="/wp-content/uploads/2018/05/word-image-5175.png 707w, /wp-content/uploads/2018/05/word-image-5175-300x93.png 300w" sizes="(max-width: 707px) 100vw, 707px" /><br />
<img loading="lazy" decoding="async" width="916" height="249" src="/wp-content/uploads/2018/05/word-image-5176.png" class="wp-image-5703" srcset="/wp-content/uploads/2018/05/word-image-5176.png 916w, /wp-content/uploads/2018/05/word-image-5176-300x82.png 300w, /wp-content/uploads/2018/05/word-image-5176-768x209.png 768w" sizes="(max-width: 916px) 100vw, 916px" /></p>
<p>
  步骤2：启动服务（service mysqld start）
</p>
<p><img loading="lazy" decoding="async" width="591" height="311" src="/wp-content/uploads/2018/05/word-image-5177.png" class="wp-image-5704" srcset="/wp-content/uploads/2018/05/word-image-5177.png 591w, /wp-content/uploads/2018/05/word-image-5177-300x158.png 300w" sizes="(max-width: 591px) 100vw, 591px" /></p>
<p>
  步骤3：登录，更改密码（注：默认密码为空）
</p>
<p><img loading="lazy" decoding="async" width="667" height="378" src="/wp-content/uploads/2018/05/word-image-5178.png" class="wp-image-5705" srcset="/wp-content/uploads/2018/05/word-image-5178.png 667w, /wp-content/uploads/2018/05/word-image-5178-300x170.png 300w" sizes="(max-width: 667px) 100vw, 667px" /></p>
<p><strong>update mysql.user set password=password(&#8216;admin888&#8242;) where User=&#8217;root&#8217;;</strong>
</p>
<p><strong>flush privileges;</strong>
</p>
<p><img loading="lazy" decoding="async" width="579" height="428" src="/wp-content/uploads/2018/05/word-image-5179.png" class="wp-image-5706" srcset="/wp-content/uploads/2018/05/word-image-5179.png 579w, /wp-content/uploads/2018/05/word-image-5179-300x222.png 300w" sizes="(max-width: 579px) 100vw, 579px" /></p>
<h2>3、微信接口开发</h2>
<h3>1）下载微信PHP SDK</h3>
<p><img loading="lazy" decoding="async" width="1200" height="531" src="/wp-content/uploads/2018/05/word-image-5180.png" class="wp-image-5707" srcset="/wp-content/uploads/2018/05/word-image-5180.png 1200w, /wp-content/uploads/2018/05/word-image-5180-300x133.png 300w, /wp-content/uploads/2018/05/word-image-5180-768x340.png 768w, /wp-content/uploads/2018/05/word-image-5180-1024x453.png 1024w" sizes="(max-width: 1200px) 100vw, 1200px" /><br />
<img loading="lazy" decoding="async" width="1134" height="549" src="/wp-content/uploads/2018/05/word-image-5181.png" class="wp-image-5708" srcset="/wp-content/uploads/2018/05/word-image-5181.png 1134w, /wp-content/uploads/2018/05/word-image-5181-300x145.png 300w, /wp-content/uploads/2018/05/word-image-5181-768x372.png 768w, /wp-content/uploads/2018/05/word-image-5181-1024x496.png 1024w" sizes="(max-width: 1134px) 100vw, 1134px" /><br />
<img loading="lazy" decoding="async" width="984" height="525" src="/wp-content/uploads/2018/05/word-image-5182.png" class="wp-image-5709" srcset="/wp-content/uploads/2018/05/word-image-5182.png 984w, /wp-content/uploads/2018/05/word-image-5182-300x160.png 300w, /wp-content/uploads/2018/05/word-image-5182-768x410.png 768w" sizes="(max-width: 984px) 100vw, 984px" /></p>
<p>
  下载地址：
</p>
<p><a href="http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.20140819.zip">http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.20140819.zip</a>
</p>
<h3>2）微信接口初体验</h3>
<ul>
<li>
    步骤1：下载微信官方SDK
  </li>
</ul>
<p><a href="http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.20140819.zip">http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.20140819.zip</a>
</p>
<p>
  SDK就是别人开发好的功能或者接口，一般工作中下载第三方SDK输入APPID和APPKEY即可完
</p>
<p>
  成对应功能。
</p>
<ul>
<li>
    步骤2：更改微信SDK，上传服务器（代码如下）
  </li>
</ul>
<p>
  wx.php
</p>
<p>
  &lt;?php
</p>
<p>
  /**
</p>
<p>
    * wechat php test
</p>
<p>
    */
</p>
<p>
  //define your token
</p>
<p>
  define(&#8220;TOKEN&#8221;, &#8220;itcast&#8221;);  //脚下留心：token必须和微信公众平台保持一致
</p>
<p>
  $wechatObj = new wechatCallbackapiTest();
</p>
<p><strong>$wechatObj-&gt;valid();</strong>
</p>
<p>
  class wechatCallbackapiTest
</p>
<p>
  {
</p>
<p>
  	public function valid()
</p>
<p>
      {
</p>
<p>
          $echoStr = $_GET[&#8220;echostr&#8221;];
</p>
<p>
          //valid signature , option
</p>
<p>
          if($this-&gt;checkSignature()){
</p>
<p>
          	echo $echoStr;
</p>
<p>
          	exit;
</p>
<p>
          }
</p>
<p>
      }
</p>
<p>
      public function responseMsg()
</p>
<p>
      {
</p>
<p>
  		//get post data, May be due to the different environments
</p>
<p>
  		$postStr = $GLOBALS[&#8220;HTTP_RAW_POST_DATA&#8221;];
</p>
<p>
        	//extract post data
</p>
<p>
  		if (!empty($postStr)){
</p>
<p>
                  /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
</p>
<p>
                     the best way is to check the validity of xml by yourself */
</p>
<p>
                  libxml_disable_entity_loader(true);
</p>
<p>
                	$postObj = simplexml_load_string($postStr, &#8216;SimpleXMLElement&#8217;, LIBXML_NOCDATA);
</p>
<p>
                  $fromUsername = $postObj-&gt;FromUserName;
</p>
<p>
                  $toUsername = $postObj-&gt;ToUserName;
</p>
<p>
                  $keyword = trim($postObj-&gt;Content);
</p>
<p>
                  $time = time();
</p>
<p>
                  $textTpl = &#8220;&lt;xml&gt;
</p>
<p>
  							&lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
</p>
<p>
  							&lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
</p>
<p>
  							&lt;CreateTime&gt;%s&lt;/CreateTime&gt;
</p>
<p>
  							&lt;MsgType&gt;&lt;![CDATA[%s]]&gt;&lt;/MsgType&gt;
</p>
<p>
  							&lt;Content&gt;&lt;![CDATA[%s]]&gt;&lt;/Content&gt;
</p>
<p>
  							&lt;FuncFlag&gt;0&lt;/FuncFlag&gt;
</p>
<p>
  							&lt;/xml&gt;&#8221;;
</p>
<p>
  				if(!empty( $keyword ))
</p>
<p>
                  {
</p>
<p>
                		$msgType = &#8220;text&#8221;;
</p>
<p>
                  	$contentStr = &#8220;滚!&#8221;;
</p>
<p>
                  	$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
</p>
<p>
                  	echo $resultStr;
</p>
<p>
                  }else{
</p>
<p>
                  	echo &#8220;Input something&#8230;&#8221;;
</p>
<p>
                  }
</p>
<p>
          }else {
</p>
<p>
          	echo &#8220;&#8221;;
</p>
<p>
          	exit;
</p>
<p>
          }
</p>
<p>
      }
</p>
</p>
<p>
  	private function checkSignature()
</p>
<p>
  	{
</p>
<p>
          // you must define TOKEN by yourself
</p>
<p>
          if (!defined(&#8220;TOKEN&#8221;)) {
</p>
<p>
              throw new Exception(&#8216;TOKEN is not defined!&#8217;);
</p>
<p>
          }
</p>
</p>
<p>
          $signature = $_GET[&#8220;signature&#8221;];
</p>
<p>
          $timestamp = $_GET[&#8220;timestamp&#8221;];
</p>
<p>
          $nonce = $_GET[&#8220;nonce&#8221;];
</p>
</p>
<p>
  		$token = TOKEN;
</p>
<p>
  		$tmpArr = array($token, $timestamp, $nonce);
</p>
<p>
          // use SORT_STRING rule
</p>
<p>
  		sort($tmpArr, SORT_STRING);
</p>
<p>
  		$tmpStr = implode( $tmpArr );
</p>
<p>
  		$tmpStr = sha1( $tmpStr );
</p>
</p>
<p>
  		if( $tmpStr == $signature ){
</p>
<p>
  			return true;
</p>
<p>
  		}else{
</p>
<p>
  			return false;
</p>
<p>
  		}
</p>
<p>
  	}
</p>
<p>
  }
</p>
<p>
  ?&gt;
</p>
<ul>
<li>
    步骤3：开启开发者模式（校验token）
  </li>
</ul>
<p>
  打开微信公众号管理平台 -&gt; 点击左侧菜单（开发-&gt;基本配置） -&gt; 开启开发者模式
</p>
<p><img loading="lazy" decoding="async" width="933" height="582" src="/wp-content/uploads/2018/05/word-image-5183.png" class="wp-image-5710" srcset="/wp-content/uploads/2018/05/word-image-5183.png 933w, /wp-content/uploads/2018/05/word-image-5183-300x187.png 300w, /wp-content/uploads/2018/05/word-image-5183-768x479.png 768w" sizes="(max-width: 933px) 100vw, 933px" /></p>
<ul>
<li>
    步骤4：修改SDK（关闭校验，开启响应用户请求）
  </li>
</ul>
<p>
  wx.php
</p>
<p>
  &lt;?php
</p>
<p>
  /**
</p>
<p>
    * wechat php test
</p>
<p>
    */
</p>
<p>
  //define your token
</p>
<p>
  define(&#8220;TOKEN&#8221;, &#8220;itcast&#8221;);  //脚下留心：token必须和微信公众平台保持一致
</p>
<p>
  $wechatObj = new wechatCallbackapiTest();
</p>
<p><strong>//$wechatObj-&gt;valid();</strong>
</p>
<p><strong>$wechatObj-&gt;responseMsg();</strong>
</p>
<p>
  class wechatCallbackapiTest
</p>
<p>
  {
</p>
<p>
  	public function valid()
</p>
<p>
      {
</p>
<p>
          $echoStr = $_GET[&#8220;echostr&#8221;];
</p>
<p>
          //valid signature , option
</p>
<p>
          if($this-&gt;checkSignature()){
</p>
<p>
          	echo $echoStr;
</p>
<p>
          	exit;
</p>
<p>
          }
</p>
<p>
      }
</p>
<p>
      public function responseMsg()
</p>
<p>
      {
</p>
<p>
  		//get post data, May be due to the different environments
</p>
<p>
  		$postStr = $GLOBALS[&#8220;HTTP_RAW_POST_DATA&#8221;];
</p>
<p>
        	//extract post data
</p>
<p>
  		if (!empty($postStr)){
</p>
<p>
                  /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
</p>
<p>
                     the best way is to check the validity of xml by yourself */
</p>
<p>
                  libxml_disable_entity_loader(true);
</p>
<p>
                	$postObj = simplexml_load_string($postStr, &#8216;SimpleXMLElement&#8217;, LIBXML_NOCDATA);
</p>
<p>
                  $fromUsername = $postObj-&gt;FromUserName;
</p>
<p>
                  $toUsername = $postObj-&gt;ToUserName;
</p>
<p>
                  $keyword = trim($postObj-&gt;Content);
</p>
<p>
                  $time = time();
</p>
<p>
                  $textTpl = &#8220;&lt;xml&gt;
</p>
<p>
  							&lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
</p>
<p>
  							&lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
</p>
<p>
  							&lt;CreateTime&gt;%s&lt;/CreateTime&gt;
</p>
<p>
  							&lt;MsgType&gt;&lt;![CDATA[%s]]&gt;&lt;/MsgType&gt;
</p>
<p>
  							&lt;Content&gt;&lt;![CDATA[%s]]&gt;&lt;/Content&gt;
</p>
<p>
  							&lt;FuncFlag&gt;0&lt;/FuncFlag&gt;
</p>
<p>
  							&lt;/xml&gt;&#8221;;
</p>
<p>
  				if(!empty( $keyword ))
</p>
<p>
                  {
</p>
<p>
                		$msgType = &#8220;text&#8221;;
</p>
<p>
                  	$contentStr = &#8220;滚!&#8221;;
</p>
<p>
                  	$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
</p>
<p>
                  	echo $resultStr;
</p>
<p>
                  }else{
</p>
<p>
                  	echo &#8220;Input something&#8230;&#8221;;
</p>
<p>
                  }
</p>
<p>
          }else {
</p>
<p>
          	echo &#8220;&#8221;;
</p>
<p>
          	exit;
</p>
<p>
          }
</p>
<p>
      }
</p>
</p>
<p>
  	private function checkSignature()
</p>
<p>
  	{
</p>
<p>
          // you must define TOKEN by yourself
</p>
<p>
          if (!defined(&#8220;TOKEN&#8221;)) {
</p>
<p>
              throw new Exception(&#8216;TOKEN is not defined!&#8217;);
</p>
<p>
          }
</p>
</p>
<p>
          $signature = $_GET[&#8220;signature&#8221;];
</p>
<p>
          $timestamp = $_GET[&#8220;timestamp&#8221;];
</p>
<p>
          $nonce = $_GET[&#8220;nonce&#8221;];
</p>
</p>
<p>
  		$token = TOKEN;
</p>
<p>
  		$tmpArr = array($token, $timestamp, $nonce);
</p>
<p>
          // use SORT_STRING rule
</p>
<p>
  		sort($tmpArr, SORT_STRING);
</p>
<p>
  		$tmpStr = implode( $tmpArr );
</p>
<p>
  		$tmpStr = sha1( $tmpStr );
</p>
</p>
<p>
  		if( $tmpStr == $signature ){
</p>
<p>
  			return true;
</p>
<p>
  		}else{
</p>
<p>
  			return false;
</p>
<p>
  		}
</p>
<p>
  	}
</p>
<p>
  }
</p>
<p>
  ?&gt;
</p>
<h2>4、微信接口分析</h2>
<h3>函数认识</h3>
<ul>
<li>
    函数：simplexml_load_string
  </li>
<li>
    作用：将xml字符串载入到对象中
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="396" height="526" src="/wp-content/uploads/2018/05/word-image-5184.png" class="wp-image-5711" srcset="/wp-content/uploads/2018/05/word-image-5184.png 396w, /wp-content/uploads/2018/05/word-image-5184-226x300.png 226w" sizes="(max-width: 396px) 100vw, 396px" /></p>
<ul>
<li>
    函数：sprintf()
  </li>
<li>
    作用：将字符串中的百分号替换成变量
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="496" height="152" src="/wp-content/uploads/2018/05/word-image-5185.png" class="wp-image-5712" srcset="/wp-content/uploads/2018/05/word-image-5185.png 496w, /wp-content/uploads/2018/05/word-image-5185-300x92.png 300w" sizes="(max-width: 496px) 100vw, 496px" /></p>
<h3>接口代码注释</h3>
<p>
  &lt;?php
</p>
<p>
  /**
</p>
<p>
    * wechat php test
</p>
<p>
    */
</p>
<p>
  //define your token
</p>
<p>
  //定义TOKEN秘钥，用于微信服务器和自定义服务器之间的校验
</p>
<p>
  define(&#8220;TOKEN&#8221;, &#8220;itcast&#8221;);
</p>
<p>
  //创建一个wechatObj对象
</p>
<p>
  $wechatObj = new wechatCallbackapiTest();
</p>
<p>
  //调用valid方法，用于微信开发验证和回复
</p>
<p>
  //$wechatObj-&gt;valid();
</p>
<p>
  //
</p>
<p>
  $wechatObj-&gt;responseMsg();
</p>
<p>
  class wechatCallbackapiTest
</p>
<p>
  {
</p>
<p>
  	public function valid()
</p>
<p>
      {
</p>
<p>
  		// 接受随机字符串
</p>
<p>
          $echoStr = $_GET[&#8220;echostr&#8221;];
</p>
<p>
          //valid signature , option
</p>
<p>
          if($this-&gt;checkSignature()){
</p>
<p>
          	echo $echoStr;
</p>
<p>
          	exit;
</p>
<p>
          }
</p>
<p>
      }
</p>
<p>
      public function responseMsg()
</p>
<p>
      {
</p>
<p>
  		//get post data, May be due to the different environments
</p>
<p>
  		//$GLOBALS[&#8220;HTTP_RAW_POST_DATA&#8221;]功能与$_POST功能类似，主要用于接收HTTP中的POST请求
</p>
<p>
  		//但是$GLOBALS[&#8220;HTTP_RAW_POST_DATA&#8221;]可以接收XML数据
</p>
<p>
  		$postStr = $GLOBALS[&#8220;HTTP_RAW_POST_DATA&#8221;];
</p>
<p>
        	//extract post data
</p>
<p>
  		if (!empty($postStr)){
</p>
<p>
                  /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
</p>
<p>
                     the best way is to check the validity of xml by yourself */
</p>
<p>
  				//安全处理：禁止引用外部xml实体， 防止XXE漏洞
</p>
<p>
              // <a href="http://www.thinkphp.cn/topic/37740.html" class="broken_link">http://www.thinkphp.cn/topic/37740.html</a>
</p>
<p>
                  libxml_disable_entity_loader(true);
</p>
<p>
  				// simplexml_load_string() 函数把 XML 字符串载入对象中
</p>
<p>
                	$postObj = simplexml_load_string($postStr, &#8216;SimpleXMLElement&#8217;, LIBXML_NOCDATA);
</p>
<p>
                  $fromUsername = $postObj-&gt;FromUserName;	// 发送方帐号（一个OpenID）
</p>
<p>
                  $toUsername = $postObj-&gt;ToUserName;		// 开发者微信号
</p>
<p>
                  $keyword = trim($postObj-&gt;Content);     // 文本消息内容
</p>
<p>
                  $time = time();
</p>
<p>
  				// 文本消息XML模板
</p>
<p>
                  $textTpl = &#8220;&lt;xml&gt;
</p>
<p>
  							&lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
</p>
<p>
  							&lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
</p>
<p>
  							&lt;CreateTime&gt;%s&lt;/CreateTime&gt;
</p>
<p>
  							&lt;MsgType&gt;&lt;![CDATA[%s]]&gt;&lt;/MsgType&gt;
</p>
<p>
  							&lt;Content&gt;&lt;![CDATA[%s]]&gt;&lt;/Content&gt;
</p>
<p>
  							&lt;FuncFlag&gt;0&lt;/FuncFlag&gt;
</p>
<p>
  							&lt;/xml&gt;&#8221;;
</p>
<p>
  				if(!empty( $keyword ))
</p>
<p>
                  {
</p>
<p>
                		$msgType = &#8220;text&#8221;;
</p>
<p>
                  	$contentStr = &#8220;Welcome to wechat world!&#8221;;
</p>
</p>
<p>
  					// 给XML模板填充数据
</p>
<p>
                  	$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $toUsername.&#8217;__&#8217;.$fromUsername);
</p>
<p>
                  	echo $resultStr;
</p>
<p>
                  }else{
</p>
<p>
                  	echo &#8220;Input something&#8230;&#8221;;
</p>
<p>
                  }
</p>
<p>
          }else {
</p>
<p>
          	echo &#8220;&#8221;;
</p>
<p>
          	exit;
</p>
<p>
          }
</p>
<p>
      }
</p>
</p>
<p>
  	// 验证数字签名
</p>
<p>
  	private function checkSignature()
</p>
<p>
  	{
</p>
<p>
          // you must define TOKEN by yourself
</p>
<p>
  		// 校验TOKEN秘钥
</p>
<p>
          if (!defined(&#8220;TOKEN&#8221;)) {
</p>
<p>
              throw new Exception(&#8216;TOKEN is not defined!&#8217;);
</p>
<p>
          }
</p>
</p>
<p>
  		// 接受数字签名
</p>
<p>
          $signature = $_GET[&#8220;signature&#8221;];
</p>
<p>
  		// 接受时间戳
</p>
<p>
          $timestamp = $_GET[&#8220;timestamp&#8221;];
</p>
<p>
  		// 接受随机数
</p>
<p>
          $nonce = $_GET[&#8220;nonce&#8221;];
</p>
</p>
<p>
  		// 定义$token 获取TOKEN秘钥
</p>
<p>
  		$token = TOKEN;
</p>
<p>
  		// token、timestamp、nonce组成数组
</p>
<p>
  		$tmpArr = array($token, $timestamp, $nonce);
</p>
<p>
          // use SORT_STRING rule
</p>
<p>
  		//数组排序
</p>
<p>
  		sort($tmpArr, SORT_STRING);
</p>
<p>
  		// 划分成字符串
</p>
<p>
  		$tmpStr = implode( $tmpArr );
</p>
<p>
  		// 通过哈希算法进行加密
</p>
<p>
  		$tmpStr = sha1( $tmpStr );
</p>
</p>
<p>
  		// 与当前发送过来的数字签名进行比对，成功返回true，否则返回false
</p>
<p>
  		if( $tmpStr == $signature ){
</p>
<p>
  			return true;
</p>
<p>
  		}else{
</p>
<p>
  			return false;
</p>
<p>
  		}
</p>
<p>
  	}
</p>
<p>
  }
</p>
<p>
  ?&gt;
</p>
<h1>六、微信的6大接收接口</h1>
<h2>︴思考：如何区分数据类型（文本、图片、语音、视频、地理、链接消息）</h2>
<p><img loading="lazy" decoding="async" width="936" height="624" src="/wp-content/uploads/2018/05/word-image-5186.png" class="wp-image-5713" srcset="/wp-content/uploads/2018/05/word-image-5186.png 936w, /wp-content/uploads/2018/05/word-image-5186-300x200.png 300w, /wp-content/uploads/2018/05/word-image-5186-768x512.png 768w" sizes="(max-width: 936px) 100vw, 936px" /></p>
<h2>2、使用php代码判断代码判断用户发送的消息类型</h2>
<p>
  需求：用户发送图片则响应图片消息，视频响应视频消息，文本响应文本消息
</p>
<p>
  发现：通过xml报文中的msgTtype可以判断类型
</p>
<p><img loading="lazy" decoding="async" width="1032" height="608" src="/wp-content/uploads/2018/05/word-image-5187.png" class="wp-image-5714" srcset="/wp-content/uploads/2018/05/word-image-5187.png 1032w, /wp-content/uploads/2018/05/word-image-5187-300x177.png 300w, /wp-content/uploads/2018/05/word-image-5187-768x452.png 768w, /wp-content/uploads/2018/05/word-image-5187-1024x603.png 1024w" sizes="(max-width: 1032px) 100vw, 1032px" /></p>
<p>
  &lt;?php
</p>
<p>
  /**
</p>
<p>
    * wechat php test
</p>
<p>
    */
</p>
<p>
  //定义token
</p>
<p>
  define(&#8220;TOKEN&#8221;, &#8220;itcast&#8221;);
</p>
<p>
  //创建wechatObj对象
</p>
<p>
  $wechatObj = new wechatCallbackapiTest();
</p>
<p>
  //校验token
</p>
<p>
  //$wechatObj-&gt;valid();  仅开启开发者模式使用一下后期不需要使用
</p>
<p>
  //调用方法响应用户数据
</p>
<p>
  $wechatObj-&gt;responseMsg();
</p>
<p>
  class wechatCallbackapiTest
</p>
<p>
  {
</p>
<p>
  	public function valid()
</p>
<p>
      {
</p>
<p>
      	//随机字符串
</p>
<p>
          $echoStr = $_GET[&#8220;echostr&#8221;];
</p>
<p>
          //校验token
</p>
<p>
          if($this-&gt;checkSignature()){
</p>
<p>
          	echo $echoStr;
</p>
<p>
          	exit;
</p>
<p>
          }
</p>
<p>
      }
</p>
<p>
      public function responseMsg()
</p>
<p>
      {
</p>
<p>
  		//get post data, May be due to the different environments
</p>
<p>
  		//和POST一样获取数据，只不过他可以获取xml数据
</p>
<p>
  		//接受微信服务器提交过来的xml报文
</p>
<p>
  		$postStr = $GLOBALS[&#8220;HTTP_RAW_POST_DATA&#8221;];
</p>
<p>
        	//extract post data
</p>
<p>
  		if (!empty($postStr)) {
</p>
<p>
                  /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
</p>
<p>
                     the best way is to check the validity of xml by yourself */
</p>
<p>
                  //安全处理：禁止引用外部xml实体， 防止XXE漏洞
</p>
<p>
                  // http://www.thinkphp.cn/topic/37740.html
</p>
<p>
                  libxml_disable_entity_loader(true);
</p>
<p>
                  //将xml数据转化为对象
</p>
<p>
                	$postObj = simplexml_load_string($postStr, &#8216;SimpleXMLElement&#8217;, LIBXML_NOCDATA);
</p>
<p>
                  $fromUsername = $postObj-&gt;FromUserName;   //那个用户发送的
</p>
<p>
                  $toUsername = $postObj-&gt;ToUserName;		  //发送给那个用户
</p>
<p>
                  $keyword = trim($postObj-&gt;Content);		  //发送的内容（可能是图片、文字、视频等）
</p>
<p>
                  $time = time();
</p>
<p>
                  $textTpl = &#8220;&lt;xml&gt;
</p>
<p>
  							&lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
</p>
<p>
  							&lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
</p>
<p>
  							&lt;CreateTime&gt;%s&lt;/CreateTime&gt;
</p>
<p>
  							&lt;MsgType&gt;&lt;![CDATA[%s]]&gt;&lt;/MsgType&gt;
</p>
<p>
  							&lt;Content&gt;&lt;![CDATA[%s]]&gt;&lt;/Content&gt;
</p>
<p>
  							&lt;FuncFlag&gt;0&lt;/FuncFlag&gt;
</p>
<p>
  							&lt;/xml&gt;&#8221;; //被动回复文本xml报文
</p>
</p>
<p>
                  //根据消息xml报文的MsgType参数判断请求文件类型
</p>
<p>
              	switch ($postObj-&gt;MsgType) {
</p>
<p>
                      case &#8216;text&#8217;:
</p>
<p>
                          $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, &#8220;text&#8221;, &#8216;文本消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      case &#8216;image&#8217;:
</p>
<p>
                          $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, &#8220;text&#8221;, &#8216;图片消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      case &#8216;voice&#8217;:
</p>
<p>
                          $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, &#8220;text&#8221;, &#8216;语法消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      case &#8216;video&#8217;:
</p>
<p>
                          $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, &#8220;text&#8221;, &#8216;视频消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      case &#8216;shortvideo&#8217;:
</p>
<p>
                          $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, &#8220;text&#8221;, &#8216;小视频消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      case &#8216;location&#8217;:
</p>
<p>
                          $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, &#8220;text&#8221;, &#8216;位置消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      case &#8216;link&#8217;:
</p>
<p>
                          $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, &#8220;text&#8221;, &#8216;链接消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      default:
</p>
<p>
                          $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, &#8220;text&#8221;, &#8216;滚！&#8217;);
</p>
<p>
                          break;
</p>
<p>
                  }
</p>
<p>
              	echo $resultStr;
</p>
<p>
          }else {
</p>
<p>
          	echo &#8220;&#8221;;
</p>
<p>
          	exit;
</p>
<p>
          }
</p>
<p>
      }
</p>
</p>
<p>
  	private function checkSignature()
</p>
<p>
  	{
</p>
<p>
          //检测token是否定义
</p>
<p>
          if (!defined(&#8220;TOKEN&#8221;)) {
</p>
<p>
              throw new Exception(&#8216;TOKEN is not defined!&#8217;);
</p>
<p>
          }
</p>
</p>
<p>
          //微信加密签名，signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
</p>
<p>
          $signature = $_GET[&#8220;signature&#8221;];
</p>
<p>
          //时间戳
</p>
<p>
          $timestamp = $_GET[&#8220;timestamp&#8221;];
</p>
<p>
          //随机数
</p>
<p>
          $nonce = $_GET[&#8220;nonce&#8221;];
</p>
<p>
          //将一个常量的值赋给$token变量
</p>
<p>
  		$token = TOKEN;
</p>
<p>
  		//将token、时间戳、随机数放到一个数组中
</p>
<p>
  		$tmpArr = array($token, $timestamp, $nonce);
</p>
<p>
          //给数组排序
</p>
<p>
  		sort($tmpArr, SORT_STRING);
</p>
<p>
  		//将数组转化为字符串
</p>
<p>
  		$tmpStr = implode( $tmpArr );
</p>
<p>
  		//哈希加密
</p>
<p>
  		$tmpStr = sha1( $tmpStr );
</p>
</p>
<p>
  		if( $tmpStr == $signature ){
</p>
<p>
  			return true;
</p>
<p>
  		}else{
</p>
<p>
  			return false;
</p>
<p>
  		}
</p>
<p>
  	}
</p>
<p>
  }
</p>
<p>
  ?&gt;
</p>
<h2>■ 代码（封装优化）</h2>
<p><img loading="lazy" decoding="async" width="1189" height="592" src="/wp-content/uploads/2018/05/word-image-5188.png" class="wp-image-5715" srcset="/wp-content/uploads/2018/05/word-image-5188.png 1189w, /wp-content/uploads/2018/05/word-image-5188-300x149.png 300w, /wp-content/uploads/2018/05/word-image-5188-768x382.png 768w, /wp-content/uploads/2018/05/word-image-5188-1024x510.png 1024w" sizes="(max-width: 1189px) 100vw, 1189px" /></p>
<p>
  &lt;?php
</p>
<p>
  /**
</p>
<p>
    * wechat php test
</p>
<p>
    */
</p>
<p>
  //定义token
</p>
<p>
  define(&#8220;TOKEN&#8221;, &#8220;itcast&#8221;);
</p>
<p>
  //创建wechatObj对象
</p>
<p>
  $wechatObj = new wechatCallbackapiTest();
</p>
<p>
  //校验token
</p>
<p>
  //$wechatObj-&gt;valid();  仅开启开发者模式使用一下后期不需要使用
</p>
<p>
  //调用方法响应用户数据
</p>
<p>
  $wechatObj-&gt;responseMsg();
</p>
<p>
  class wechatCallbackapiTest
</p>
<p>
  {
</p>
<p>
  	public function valid()
</p>
<p>
      {
</p>
<p>
      	//随机字符串
</p>
<p>
          $echoStr = $_GET[&#8220;echostr&#8221;];
</p>
<p>
          //校验token
</p>
<p>
          if($this-&gt;checkSignature()){
</p>
<p>
          	echo $echoStr;
</p>
<p>
          	exit;
</p>
<p>
          }
</p>
<p>
      }
</p>
<p>
      public function responseMsg()
</p>
<p>
      {
</p>
<p>
  		//get post data, May be due to the different environments
</p>
<p>
  		//和POST一样获取数据，只不过他可以获取xml数据
</p>
<p>
  		//接受微信服务器提交过来的xml报文
</p>
<p>
  		$postStr = $GLOBALS[&#8220;HTTP_RAW_POST_DATA&#8221;];
</p>
<p>
        	//extract post data
</p>
<p>
  		if (!empty($postStr)) {
</p>
<p>
                  /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
</p>
<p>
                     the best way is to check the validity of xml by yourself */
</p>
<p>
                  //安全处理：禁止引用外部xml实体， 防止XXE漏洞
</p>
<p>
                  // http://www.thinkphp.cn/topic/37740.html
</p>
<p>
                  libxml_disable_entity_loader(true);
</p>
<p>
                  //将xml数据转化为对象
</p>
<p>
                	$postObj = simplexml_load_string($postStr, &#8216;SimpleXMLElement&#8217;, LIBXML_NOCDATA);
</p>
<p>
                  $fromUsername = $postObj-&gt;FromUserName;   //发送者：那个用户发送的
</p>
<p>
                  $toUsername = $postObj-&gt;ToUserName;		  //接受者：发送给那个用户
</p>
<p>
                  $keyword = trim($postObj-&gt;Content);		  //发送的内容（可能是图片、文字、视频等）
</p>
</p>
<p>
                  //根据消息xml报文的MsgType参数判断请求文件类型
</p>
<p>
              	switch ($postObj-&gt;MsgType) {
</p>
<p>
                      case &#8216;text&#8217;:
</p>
<p>
                          $this-&gt;sendText($fromUsername, $toUsername, &#8216;文本消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      case &#8216;image&#8217;:
</p>
<p>
                          $this-&gt;sendText($fromUsername, $toUsername, &#8216;图片消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      case &#8216;voice&#8217;:
</p>
<p>
                          $this-&gt;sendText($fromUsername, $toUsername, &#8216;语音消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      case &#8216;video&#8217;:
</p>
<p>
                          $this-&gt;sendText($fromUsername, $toUsername, &#8216;视频消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      case &#8216;shortvideo&#8217;:
</p>
<p>
                          $this-&gt;sendText($fromUsername, $toUsername, &#8216;小视频消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      case &#8216;location&#8217;:
</p>
<p>
                          $this-&gt;sendText($fromUsername, $toUsername, &#8216;位置消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      case &#8216;link&#8217;:
</p>
<p>
                          $this-&gt;sendText($fromUsername, $toUsername, &#8216;链接消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      default:
</p>
<p>
                          $this-&gt;sendText($fromUsername, $toUsername, &#8216;滚！&#8217;);
</p>
<p>
                          break;
</p>
<p>
                  }
</p>
<p>
          }else {
</p>
<p>
          	echo &#8220;&#8221;;
</p>
<p>
          	exit;
</p>
<p>
          }
</p>
<p>
      }
</p>
<p>
   <strong>   /**</strong>
</p>
<p><strong>     * @param stirng $fromUsername 接受消息的用户</strong>
</p>
<p><strong>     * @param stirng $toUsername   发送消息的用户</strong>
</p>
<p><strong>     * @param stirng $content      内容</strong>
</p>
<p><strong>     */</strong>
</p>
<p><strong>    private function sendText($fromUsername, $toUsername, $content)</strong>
</p>
<p><strong>    {</strong>
</p>
<p><strong>        $time = time(); </strong>
</p>
<p><strong>        $textTpl = &#8220;&lt;xml&gt;</strong>
</p>
<p><strong>                    &lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;</strong>
</p>
<p><strong>                    &lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;</strong>
</p>
<p><strong>                    &lt;CreateTime&gt;%s&lt;/CreateTime&gt;</strong>
</p>
<p><strong>                    &lt;MsgType&gt;&lt;![CDATA[%s]]&gt;&lt;/MsgType&gt;</strong>
</p>
<p><strong>                    &lt;Content&gt;&lt;![CDATA[%s]]&gt;&lt;/Content&gt;</strong>
</p>
<p><strong>                    &lt;FuncFlag&gt;0&lt;/FuncFlag&gt;</strong>
</p>
<p><strong>                    &lt;/xml&gt;&#8221;; //被动回复文本xml报文    </strong>
</p>
<p><strong>        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, &#8220;text&#8221;, $content);</strong>
</p>
<p><strong>        echo  $resultStr;</strong>
</p>
<p><strong>    }</strong>
</p>
</p>
<p>
  	private function checkSignature()
</p>
<p>
  	{
</p>
<p>
          //检测token是否定义
</p>
<p>
          if (!defined(&#8220;TOKEN&#8221;)) {
</p>
<p>
              throw new Exception(&#8216;TOKEN is not defined!&#8217;);
</p>
<p>
          }
</p>
</p>
<p>
          //微信加密签名，signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
</p>
<p>
          $signature = $_GET[&#8220;signature&#8221;];
</p>
<p>
          //时间戳
</p>
<p>
          $timestamp = $_GET[&#8220;timestamp&#8221;];
</p>
<p>
          //随机数
</p>
<p>
          $nonce = $_GET[&#8220;nonce&#8221;];
</p>
<p>
          //将一个常量的值赋给$token变量
</p>
<p>
  		$token = TOKEN;
</p>
<p>
  		//将token、时间戳、随机数放到一个数组中
</p>
<p>
  		$tmpArr = array($token, $timestamp, $nonce);
</p>
<p>
          //给数组排序
</p>
<p>
  		sort($tmpArr, SORT_STRING);
</p>
<p>
  		//将数组转化为字符串
</p>
<p>
  		$tmpStr = implode( $tmpArr );
</p>
<p>
  		//哈希加密
</p>
<p>
  		$tmpStr = sha1( $tmpStr );
</p>
</p>
<p>
  		if( $tmpStr == $signature ){
</p>
<p>
  			return true;
</p>
<p>
  		}else{
</p>
<p>
  			return false;
</p>
<p>
  		}
</p>
<p>
  	}
</p>
<p>
  }
</p>
<p>
  ?&gt;
</p>
<h1>七、微信订阅回复接口</h1>
<h2><a id="post-5626-_Toc475986511"></a>1、订阅回复接口（关注回复接口）</h2>
<p><img loading="lazy" decoding="async" width="870" height="678" src="/wp-content/uploads/2018/05/word-image-5189.png" class="wp-image-5716" srcset="/wp-content/uploads/2018/05/word-image-5189.png 870w, /wp-content/uploads/2018/05/word-image-5189-300x234.png 300w, /wp-content/uploads/2018/05/word-image-5189-768x599.png 768w" sizes="(max-width: 870px) 100vw, 870px" /><br />
<img loading="lazy" decoding="async" width="847" height="454" src="/wp-content/uploads/2018/05/word-image-5190.png" class="wp-image-5717" srcset="/wp-content/uploads/2018/05/word-image-5190.png 847w, /wp-content/uploads/2018/05/word-image-5190-300x161.png 300w, /wp-content/uploads/2018/05/word-image-5190-768x412.png 768w" sizes="(max-width: 847px) 100vw, 847px" /></p>
<h2><a id="post-5626-_Toc475986513"></a>2、编写PHP代码判断订阅回复</h2>
<p><img loading="lazy" decoding="async" width="892" height="519" src="/wp-content/uploads/2018/05/word-image-5191.png" class="wp-image-5718" srcset="/wp-content/uploads/2018/05/word-image-5191.png 892w, /wp-content/uploads/2018/05/word-image-5191-300x175.png 300w, /wp-content/uploads/2018/05/word-image-5191-768x447.png 768w" sizes="(max-width: 892px) 100vw, 892px" /></p>
<p>
  &lt;?php
</p>
<p>
  /**
</p>
<p>
    * wechat php test
</p>
<p>
    */
</p>
<p>
  //定义token
</p>
<p>
  define(&#8220;TOKEN&#8221;, &#8220;itcast&#8221;);
</p>
<p>
  //创建wechatObj对象
</p>
<p>
  $wechatObj = new wechatCallbackapiTest();
</p>
<p>
  //校验token
</p>
<p>
  //$wechatObj-&gt;valid();  仅开启开发者模式使用一下后期不需要使用
</p>
<p>
  //调用方法响应用户数据
</p>
<p>
  $wechatObj-&gt;responseMsg();
</p>
<p>
  class wechatCallbackapiTest
</p>
<p>
  {
</p>
<p>
  	public function valid()
</p>
<p>
      {
</p>
<p>
      	//随机字符串
</p>
<p>
          $echoStr = $_GET[&#8220;echostr&#8221;];
</p>
<p>
          //校验token
</p>
<p>
          if($this-&gt;checkSignature()){
</p>
<p>
          	echo $echoStr;
</p>
<p>
          	exit;
</p>
<p>
          }
</p>
<p>
      }
</p>
<p>
      public function responseMsg()
</p>
<p>
      {
</p>
<p>
  		//get post data, May be due to the different environments
</p>
<p>
  		//和POST一样获取数据，只不过他可以获取xml数据
</p>
<p>
  		//接受微信服务器提交过来的xml报文
</p>
<p>
  		$postStr = $GLOBALS[&#8220;HTTP_RAW_POST_DATA&#8221;];
</p>
<p>
        	//extract post data
</p>
<p>
  		if (!empty($postStr)) {
</p>
<p>
                  /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
</p>
<p>
                     the best way is to check the validity of xml by yourself */
</p>
<p>
                  //安全处理：禁止引用外部xml实体， 防止XXE漏洞
</p>
<p>
                  // http://www.thinkphp.cn/topic/37740.html
</p>
<p>
                  libxml_disable_entity_loader(true);
</p>
<p>
                  //将xml数据转化为对象
</p>
<p>
                	$postObj = simplexml_load_string($postStr, &#8216;SimpleXMLElement&#8217;, LIBXML_NOCDATA);
</p>
<p>
                  $fromUsername = $postObj-&gt;FromUserName;   //发送者：那个用户发送的
</p>
<p>
                  $toUsername = $postObj-&gt;ToUserName;		  //接受者：发送给那个用户
</p>
<p>
                  $keyword = trim($postObj-&gt;Content);		  //发送的内容（可能是图片、文字、视频等）
</p>
</p>
<p>
                  //根据消息xml报文的MsgType参数判断请求文件类型
</p>
<p>
              	switch ($postObj-&gt;MsgType) {
</p>
<p>
                      <strong>case &#8216;event&#8217;:</strong>
</p>
<p><strong>                        //Event 事件类型，subscribe(订阅)、unsubscribe(取消订阅)</strong>
</p>
<p><strong>                        if ($postObj-&gt;Event == &#8216;subscribe&#8217;) {</strong>
</p>
<p><strong>                            $this-&gt;sendText($fromUsername, $toUsername, &#8216;感谢老板关注，需要xx请服务1&#8217;);</strong>
</p>
<p><strong>                        } else {</strong>
</p>
<p><strong>                            //后期项目封装可能需要修改数据库</strong>
</p>
<p><strong>                        }</strong>
</p>
<p><strong>                        break;</strong>
</p>
<p>
                      case &#8216;text&#8217;:
</p>
<p>
                          $this-&gt;sendText($fromUsername, $toUsername, &#8216;文本消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      case &#8216;image&#8217;:
</p>
<p>
                          $this-&gt;sendText($fromUsername, $toUsername, &#8216;图片消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      case &#8216;voice&#8217;:
</p>
<p>
                          $this-&gt;sendText($fromUsername, $toUsername, &#8216;语音消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      case &#8216;video&#8217;:
</p>
<p>
                          $this-&gt;sendText($fromUsername, $toUsername, &#8216;视频消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      case &#8216;shortvideo&#8217;:
</p>
<p>
                          $this-&gt;sendText($fromUsername, $toUsername, &#8216;小视频消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      case &#8216;location&#8217;:
</p>
<p>
                          $this-&gt;sendText($fromUsername, $toUsername, &#8216;位置消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      case &#8216;link&#8217;:
</p>
<p>
                          $this-&gt;sendText($fromUsername, $toUsername, &#8216;链接消息&#8217;);
</p>
<p>
                          break;
</p>
<p>
                      default:
</p>
<p>
                          $this-&gt;sendText($fromUsername, $toUsername, &#8216;滚！&#8217;);
</p>
<p>
                          break;
</p>
<p>
                  }
</p>
<p>
          }else {
</p>
<p>
          	echo &#8220;&#8221;;
</p>
<p>
          	exit;
</p>
<p>
          }
</p>
<p>
      }
</p>
<p>
      /**
</p>
<p>
       * @param stirng $fromUsername 接受消息的用户
</p>
<p>
       * @param stirng $toUsername   发送消息的用户
</p>
<p>
       * @param stirng $content      内容
</p>
<p>
       */
</p>
<p>
      private function sendText($fromUsername, $toUsername, $content)
</p>
<p>
      {
</p>
<p>
          $time = time();
</p>
<p>
          $textTpl = &#8220;&lt;xml&gt;
</p>
<p>
                      &lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
</p>
<p>
                      &lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
</p>
<p>
                      &lt;CreateTime&gt;%s&lt;/CreateTime&gt;
</p>
<p>
                      &lt;MsgType&gt;&lt;![CDATA[%s]]&gt;&lt;/MsgType&gt;
</p>
<p>
                      &lt;Content&gt;&lt;![CDATA[%s]]&gt;&lt;/Content&gt;
</p>
<p>
                      &lt;FuncFlag&gt;0&lt;/FuncFlag&gt;
</p>
<p>
                      &lt;/xml&gt;&#8221;; //被动回复文本xml报文
</p>
<p>
          $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, &#8220;text&#8221;, $content);
</p>
<p>
          echo  $resultStr;
</p>
<p>
      }
</p>
</p>
<p>
  	private function checkSignature()
</p>
<p>
  	{
</p>
<p>
          //检测token是否定义
</p>
<p>
          if (!defined(&#8220;TOKEN&#8221;)) {
</p>
<p>
              throw new Exception(&#8216;TOKEN is not defined!&#8217;);
</p>
<p>
          }
</p>
</p>
<p>
          //微信加密签名，signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
</p>
<p>
          $signature = $_GET[&#8220;signature&#8221;];
</p>
<p>
          //时间戳
</p>
<p>
          $timestamp = $_GET[&#8220;timestamp&#8221;];
</p>
<p>
          //随机数
</p>
<p>
          $nonce = $_GET[&#8220;nonce&#8221;];
</p>
<p>
          //将一个常量的值赋给$token变量
</p>
<p>
  		$token = TOKEN;
</p>
<p>
  		//将token、时间戳、随机数放到一个数组中
</p>
<p>
  		$tmpArr = array($token, $timestamp, $nonce);
</p>
<p>
          //给数组排序
</p>
<p>
  		sort($tmpArr, SORT_STRING);
</p>
<p>
  		//将数组转化为字符串
</p>
<p>
  		$tmpStr = implode( $tmpArr );
</p>
<p>
  		//哈希加密
</p>
<p>
  		$tmpStr = sha1( $tmpStr );
</p>
</p>
<p>
  		if( $tmpStr == $signature ){
</p>
<p>
  			return true;
</p>
<p>
  		}else{
</p>
<p>
  			return false;
</p>
<p>
  		}
</p>
<p>
  	}
</p>
<p>
  }
</p>
<p>
  ?&gt;
</p>
<h1>八、微信消息的6大回复接口</h1>
<h2>1、回复文本接口</h2>
<h3>1）xml报文</h3>
<p><img loading="lazy" decoding="async" width="240" height="398" src="/wp-content/uploads/2018/05/word-image-5192.png" class="wp-image-5719" srcset="/wp-content/uploads/2018/05/word-image-5192.png 240w, /wp-content/uploads/2018/05/word-image-5192-181x300.png 181w" sizes="(max-width: 240px) 100vw, 240px" /><br />
<img loading="lazy" decoding="async" width="533" height="313" src="/wp-content/uploads/2018/05/word-image-5193.png" class="wp-image-5720" srcset="/wp-content/uploads/2018/05/word-image-5193.png 533w, /wp-content/uploads/2018/05/word-image-5193-300x176.png 300w" sizes="(max-width: 533px) 100vw, 533px" /></p>
<h3>2）代码</h3>
<p><img loading="lazy" decoding="async" width="730" height="374" src="/wp-content/uploads/2018/05/word-image-5194.png" class="wp-image-5721" srcset="/wp-content/uploads/2018/05/word-image-5194.png 730w, /wp-content/uploads/2018/05/word-image-5194-300x154.png 300w" sizes="(max-width: 730px) 100vw, 730px" /></p>
<p>
  /**
</p>
<p>
   * @param stirng $fromUsername 接受消息的用户
</p>
<p>
   * @param stirng $toUsername   发送消息的用户
</p>
<p>
   * @param stirng $content      内容
</p>
<p>
   */
</p>
<p>
  private function sendText($fromUsername, $toUsername, $content)
</p>
<p>
  {
</p>
<p>
      $time = time();
</p>
<p>
      $textTpl = &#8220;&lt;xml&gt;
</p>
<p>
                  &lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
</p>
<p>
                  &lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
</p>
<p>
                  &lt;CreateTime&gt;%s&lt;/CreateTime&gt;
</p>
<p>
                  &lt;MsgType&gt;&lt;![CDATA[%s]]&gt;&lt;/MsgType&gt;
</p>
<p>
                  &lt;Content&gt;&lt;![CDATA[%s]]&gt;&lt;/Content&gt;
</p>
<p>
                  &lt;FuncFlag&gt;0&lt;/FuncFlag&gt;
</p>
<p>
                  &lt;/xml&gt;&#8221;; //被动回复文本xml报文
</p>
<p>
      $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, &#8220;text&#8221;, $content);
</p>
<p>
      echo  $resultStr;
</p>
<p>
  }
</p>
<h2>2、回复图片、语音、视频消息</h2>
<h3>1）图片xml报文</h3>
<p><img loading="lazy" decoding="async" width="462" height="270" src="/wp-content/uploads/2018/05/word-image-5195.png" class="wp-image-5722" srcset="/wp-content/uploads/2018/05/word-image-5195.png 462w, /wp-content/uploads/2018/05/word-image-5195-300x175.png 300w" sizes="(max-width: 462px) 100vw, 462px" /></p>
<p>
  &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-
</p>
<p>
  【获取Mediald】
</p>
<p><img loading="lazy" decoding="async" width="613" height="66" src="/wp-content/uploads/2018/05/word-image-5196.png" class="wp-image-5723" srcset="/wp-content/uploads/2018/05/word-image-5196.png 613w, /wp-content/uploads/2018/05/word-image-5196-300x32.png 300w" sizes="(max-width: 613px) 100vw, 613px" /></p>
<p>
  步骤1：
</p>
<p><img loading="lazy" decoding="async" width="287" height="131" src="/wp-content/uploads/2018/05/word-image-5197.png" class="wp-image-5724" /><br />
<img loading="lazy" decoding="async" width="423" height="175" src="/wp-content/uploads/2018/05/word-image-5198.png" class="wp-image-5725" srcset="/wp-content/uploads/2018/05/word-image-5198.png 423w, /wp-content/uploads/2018/05/word-image-5198-300x124.png 300w" sizes="(max-width: 423px) 100vw, 423px" /></p>
<p><a href="https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&amp;type=基础支持">https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&amp;type=基础支持</a>
</p>
<p><img loading="lazy" decoding="async" width="1087" height="602" src="/wp-content/uploads/2018/05/word-image-5199.png" class="wp-image-5726" srcset="/wp-content/uploads/2018/05/word-image-5199.png 1087w, /wp-content/uploads/2018/05/word-image-5199-300x166.png 300w, /wp-content/uploads/2018/05/word-image-5199-768x425.png 768w, /wp-content/uploads/2018/05/word-image-5199-1024x567.png 1024w" sizes="(max-width: 1087px) 100vw, 1087px" /><br />
<img loading="lazy" decoding="async" width="1200" height="709" src="/wp-content/uploads/2018/05/word-image-5200.png" class="wp-image-5727" srcset="/wp-content/uploads/2018/05/word-image-5200.png 1200w, /wp-content/uploads/2018/05/word-image-5200-300x177.png 300w, /wp-content/uploads/2018/05/word-image-5200-768x454.png 768w, /wp-content/uploads/2018/05/word-image-5200-1024x605.png 1024w" sizes="(max-width: 1200px) 100vw, 1200px" /></p>
<h3>2）代码</h3>
<p>
  Eg2F6ND63LqjRvlOdaEV_lxGjgO9KIRDZm8e54hcTYH-P-FyBZA55FNad8a8pQMA
</p>
<p><img loading="lazy" decoding="async" width="851" height="445" src="/wp-content/uploads/2018/05/word-image-5201.png" class="wp-image-5728" srcset="/wp-content/uploads/2018/05/word-image-5201.png 851w, /wp-content/uploads/2018/05/word-image-5201-300x157.png 300w, /wp-content/uploads/2018/05/word-image-5201-768x402.png 768w" sizes="(max-width: 851px) 100vw, 851px" /></p>
<h3>视频xml报文</h3>
<p><img loading="lazy" decoding="async" width="452" height="347" src="/wp-content/uploads/2018/05/word-image-5202.png" class="wp-image-5729" srcset="/wp-content/uploads/2018/05/word-image-5202.png 452w, /wp-content/uploads/2018/05/word-image-5202-300x230.png 300w" sizes="(max-width: 452px) 100vw, 452px" /></p>
<h3>代码</h3>
<p><img loading="lazy" decoding="async" width="991" height="531" src="/wp-content/uploads/2018/05/word-image-5203.png" class="wp-image-5730" srcset="/wp-content/uploads/2018/05/word-image-5203.png 991w, /wp-content/uploads/2018/05/word-image-5203-300x161.png 300w, /wp-content/uploads/2018/05/word-image-5203-768x412.png 768w" sizes="(max-width: 991px) 100vw, 991px" /></p>
<h2>3、音乐回复接口</h2>
<h3>1）xml报文</h3>
<p><img loading="lazy" decoding="async" width="541" height="374" src="/wp-content/uploads/2018/05/word-image-5204.png" class="wp-image-5731" srcset="/wp-content/uploads/2018/05/word-image-5204.png 541w, /wp-content/uploads/2018/05/word-image-5204-300x207.png 300w" sizes="(max-width: 541px) 100vw, 541px" /></p>
<h3>2）代码</h3>
<p><img loading="lazy" decoding="async" width="1118" height="542" src="/wp-content/uploads/2018/05/word-image-5205.png" class="wp-image-5732" srcset="/wp-content/uploads/2018/05/word-image-5205.png 1118w, /wp-content/uploads/2018/05/word-image-5205-300x145.png 300w, /wp-content/uploads/2018/05/word-image-5205-768x372.png 768w, /wp-content/uploads/2018/05/word-image-5205-1024x496.png 1024w" sizes="(max-width: 1118px) 100vw, 1118px" /></p>
<h2>4、图文回复接口（重点重点）</h2>
<h3>1）xml报文</h3>
<p><img loading="lazy" decoding="async" width="529" height="529" src="/wp-content/uploads/2018/05/word-image-5206.png" class="wp-image-5733" srcset="/wp-content/uploads/2018/05/word-image-5206.png 529w, /wp-content/uploads/2018/05/word-image-5206-150x150.png 150w, /wp-content/uploads/2018/05/word-image-5206-300x300.png 300w" sizes="(max-width: 529px) 100vw, 529px" /></p>
<h3>2）代码</h3>
<p>
      <strong>/**</strong>
</p>
<p><strong>     * 响应图文（优化版）</strong>
</p>
<p><strong>     * @param stirng $fromUsername 接受消息的用户</strong>
</p>
<p><strong>     * @param stirng $toUsername   发送消息的用户</strong>
</p>
<p><strong>     * @param array  $arr          图文消息二位数组（注；第二层数组字段 title,desc,picurl,url）</strong>
</p>
<p><strong>     */</strong>
</p>
<p><strong>    private function sendImgArticle($fromUsername, $toUsername, $arr)</strong>
</p>
<p><strong>    {</strong>
</p>
<p><strong>        $textTpl = &#8220;&lt;xml&gt;</strong>
</p>
<p><strong>        &lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;</strong>
</p>
<p><strong>        &lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;</strong>
</p>
<p><strong>        &lt;CreateTime&gt;%s&lt;/CreateTime&gt;</strong>
</p>
<p><strong>        &lt;MsgType&gt;&lt;![CDATA[news]]&gt;&lt;/MsgType&gt;</strong>
</p>
<p><strong>        &lt;ArticleCount&gt;%s&lt;/ArticleCount&gt;</strong>
</p>
<p><strong>        &lt;Articles&gt;&#8221;;</strong>
</p>
<p><strong>        foreach ($arr as $img) {</strong>
</p>
<p><strong>            $textTpl .= &#8220;&lt;item&gt;</strong>
</p>
<p><strong>            &lt;Title&gt;&lt;![CDATA[{$img[&#8216;title&#8217;]}]]&gt;&lt;/Title&gt; </strong>
</p>
<p><strong>            &lt;Description&gt;&lt;![CDATA[{$img[&#8216;desc&#8217;]}]]&gt;&lt;/Description&gt;</strong>
</p>
<p><strong>            &lt;PicUrl&gt;&lt;![CDATA[{$img[&#8216;picurl&#8217;]}]]&gt;&lt;/PicUrl&gt;</strong>
</p>
<p><strong>            &lt;Url&gt;&lt;![CDATA[{$img[&#8216;url&#8217;]}]]&gt;&lt;/Url&gt;</strong>
</p>
<p><strong>            &lt;/item&gt;&#8221;;</strong>
</p>
<p><strong>        }</strong>
</p>
<p><strong>        $textTpl .= &#8220;&lt;/Articles&gt;</strong>
</p>
<p><strong>        &lt;/xml&gt;&#8221;; </strong>
</p>
<p><strong>        $resultStr = sprintf($textTpl, $fromUsername, $toUsername, time(), count($arr));</strong>
</p>
<p><strong>        echo  $resultStr;</strong>
</p>
<p><strong>    }</strong>
</p>
<p>
      /**
</p>
<p>
       * 响应单图文
</p>
<p>
       * @param stirng $fromUsername 接受消息的用户
</p>
<p>
       * @param stirng $toUsername   发送消息的用户
</p>
<p>
       */
</p>
<p>
      private function <strong>sendImgArticle1</strong>($fromUsername, $toUsername)
</p>
<p>
      {
</p>
<p>
          $textTpl = &#8220;&lt;xml&gt;
</p>
<p>
          &lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
</p>
<p>
          &lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
</p>
<p>
          &lt;CreateTime&gt;%s&lt;/CreateTime&gt;
</p>
<p>
          &lt;MsgType&gt;&lt;![CDATA[news]]&gt;&lt;/MsgType&gt;
</p>
<p>
          &lt;ArticleCount&gt;%s&lt;/ArticleCount&gt;
</p>
<p>
          &lt;Articles&gt;
</p>
<p>
          &lt;item&gt;
</p>
<p>
          &lt;Title&gt;&lt;![CDATA[%s]]&gt;&lt;/Title&gt;
</p>
<p>
          &lt;Description&gt;&lt;![CDATA[%s]]&gt;&lt;/Description&gt;
</p>
<p>
          &lt;PicUrl&gt;&lt;![CDATA[%s]]&gt;&lt;/PicUrl&gt;
</p>
<p>
          &lt;Url&gt;&lt;![CDATA[%s]]&gt;&lt;/Url&gt;
</p>
<p>
          &lt;/item&gt;
</p>
<p>
          &lt;/Articles&gt;
</p>
<p>
          &lt;/xml&gt;&#8221;;
</p>
<p>
          $imgCount = 1;
</p>
<p>
          $title = &#8216;单图文&#8217;;
</p>
<p>
          $desc = &#8216;xxx&#8217;;
</p>
<p>
          $picurl = &#8216;http://47.52.95.83/zhaoxiaokang/img/b1.jpg&#8217;;
</p>
<p>
          $url = &#8216;http://baidu.com&/#8217;;
</p>
<p>
          $resultStr = sprintf($textTpl, $fromUsername, $toUsername, time(), $imgCount, $title, $desc, $picurl, $url);
</p>
<p>
          echo  $resultStr;
</p>
<p>
      }
</p>
<p>
      /**
</p>
<p>
       * 响应多图文
</p>
<p>
       * @param stirng $fromUsername 接受消息的用户
</p>
<p>
       * @param stirng $toUsername   发送消息的用户
</p>
<p>
       */
</p>
<p>
      private function <strong>sendImgArticleN</strong>($fromUsername, $toUsername)
</p>
<p>
      {
</p>
<p>
          $textTpl = &#8220;&lt;xml&gt;
</p>
<p>
          &lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
</p>
<p>
          &lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
</p>
<p>
          &lt;CreateTime&gt;%s&lt;/CreateTime&gt;
</p>
<p>
          &lt;MsgType&gt;&lt;![CDATA[news]]&gt;&lt;/MsgType&gt;
</p>
<p>
          &lt;ArticleCount&gt;3&lt;/ArticleCount&gt;
</p>
<p>
          &lt;Articles&gt;
</p>
<p>
          &lt;item&gt;
</p>
<p>
          &lt;Title&gt;&lt;![CDATA[大图]]&gt;&lt;/Title&gt;
</p>
<p>
          &lt;Description&gt;&lt;![CDATA[bigimg]]&gt;&lt;/Description&gt;
</p>
<p>
          &lt;PicUrl&gt;&lt;![CDATA[http://47.52.95.83/zhaoxiaokang/img/b1.jpg]]&gt;&lt;/PicUrl&gt;
</p>
<p>
          &lt;Url&gt;&lt;![CDATA[http://baidu.com]]&gt;&lt;/Url&gt;
</p>
<p>
          &lt;/item&gt;
</p>
<p>
          &lt;item&gt;
</p>
<p>
          &lt;Title&gt;&lt;![CDATA[小图1]]&gt;&lt;/Title&gt;
</p>
<p>
          &lt;Description&gt;&lt;![CDATA[one]]&gt;&lt;/Description&gt;
</p>
<p>
          &lt;PicUrl&gt;&lt;![CDATA[http://47.52.95.83/zhaoxiaokang/img/one.png]]&gt;&lt;/PicUrl&gt;
</p>
<p>
          &lt;Url&gt;&lt;![CDATA[http://baidu.com]]&gt;&lt;/Url&gt;
</p>
<p>
          &lt;/item&gt;
</p>
<p>
          &lt;item&gt;
</p>
<p>
          &lt;Title&gt;&lt;![CDATA[小图2]]&gt;&lt;/Title&gt;
</p>
<p>
          &lt;Description&gt;&lt;![CDATA[two]]&gt;&lt;/Description&gt;
</p>
<p>
          &lt;PicUrl&gt;&lt;![CDATA[http://47.52.95.83/zhaoxiaokang/img/two.png]]&gt;&lt;/PicUrl&gt;
</p>
<p>
          &lt;Url&gt;&lt;![CDATA[http://baidu.com]]&gt;&lt;/Url&gt;
</p>
<p>
          &lt;/item&gt;
</p>
<p>
          &lt;/Articles&gt;
</p>
<p>
          &lt;/xml&gt;&#8221;;
</p>
<p>
          $resultStr = sprintf($textTpl, $fromUsername, $toUsername, time());
</p>
<p>
          echo  $resultStr;
</p>
<p>
      }
</p>
<h1>︴自觉练习</h1>
<p><img loading="lazy" decoding="async" width="247" height="173" src="/wp-content/uploads/2018/05/word-image-5207.png" class="wp-image-5734" /><br />
<img loading="lazy" decoding="async" width="549" height="231" src="/wp-content/uploads/2018/05/word-image-5208.png" class="wp-image-5735" srcset="/wp-content/uploads/2018/05/word-image-5208.png 549w, /wp-content/uploads/2018/05/word-image-5208-300x126.png 300w" sizes="(max-width: 549px) 100vw, 549px" /><br />
<img loading="lazy" decoding="async" width="596" height="255" src="/wp-content/uploads/2018/05/word-image-5209.png" class="wp-image-5736" srcset="/wp-content/uploads/2018/05/word-image-5209.png 596w, /wp-content/uploads/2018/05/word-image-5209-300x128.png 300w" sizes="(max-width: 596px) 100vw, 596px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e7%a7%bb%e5%8a%a8%e7%ab%af%e5%bc%80%e5%8f%91/5626.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>微信公众号（二）CURL、自定义菜单、事件推送、多媒体上传、客服消息接口、群发消息接口</title>
		<link>/%e7%a7%bb%e5%8a%a8%e7%ab%af%e5%bc%80%e5%8f%91/5587.html</link>
					<comments>/%e7%a7%bb%e5%8a%a8%e7%ab%af%e5%bc%80%e5%8f%91/5587.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 15:13:58 +0000</pubDate>
				<category><![CDATA[微信公众号]]></category>
		<category><![CDATA[移动端开发]]></category>
		<category><![CDATA[CURL]]></category>
		<category><![CDATA[事件推送]]></category>
		<category><![CDATA[多媒体上传]]></category>
		<category><![CDATA[客服消息接口]]></category>
		<category><![CDATA[群发消息接口]]></category>
		<category><![CDATA[自定义菜单]]></category>
		<guid isPermaLink="false">/?p=5587</guid>

					<description><![CDATA[移动端开发（微信开发2） 复习 什么是微信：就是聊天工具 什么是公众号：企业或个人组织管理其粉丝的应用工具 什 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>移动端开发（微信开发2）	</h1>
<h1>复习</h1>
<p>
  什么是微信：就是聊天工具
</p>
<p>
  什么是公众号：企业或个人组织管理其粉丝的应用工具
</p>
<p>
  什么是公众平台：管理公众号数据的后台
</p>
<p>
  编辑模式运营： 通过微信提供的后台管理数据
</p>
<p>
  开发者模式运营： 通过自己开发的后台管理数据
</p>
<p>
  公众号常用的功能：自动回复（关注回复、关键字回复）、自定义菜单等
</p>
<p>
  订阅号和服务号的区别：服务号功能更强大，但是必须有营业执照才能注册。
</p>
<p><img loading="lazy" decoding="async" width="1032" height="489" src="/wp-content/uploads/2018/05/word-image-5064.png" class="wp-image-5588" srcset="/wp-content/uploads/2018/05/word-image-5064.png 1032w, /wp-content/uploads/2018/05/word-image-5064-300x142.png 300w, /wp-content/uploads/2018/05/word-image-5064-768x364.png 768w, /wp-content/uploads/2018/05/word-image-5064-1024x485.png 1024w" sizes="(max-width: 1032px) 100vw, 1032px" /></p>
<h1>︴更改公众平台测试帐号</h1>
<h2>说明</h2>
<p>
  因为注册的是订阅号，很多高级接口无法测试学习，所以使用微信官方提供的测试帐号，可以体验并测试微信公众平台所有高级接口。
</p>
<h2>步骤</h2>
<p>
  步骤1：登录微信公众平台，点击左侧菜单后进入公众测试平台
</p>
<p><img loading="lazy" decoding="async" width="774" height="455" src="/wp-content/uploads/2018/05/word-image-5065.png" class="wp-image-5589" srcset="/wp-content/uploads/2018/05/word-image-5065.png 774w, /wp-content/uploads/2018/05/word-image-5065-300x176.png 300w, /wp-content/uploads/2018/05/word-image-5065-768x451.png 768w" sizes="(max-width: 774px) 100vw, 774px" /></p>
<p>
  步骤2：微信扫码登录
</p>
<p>
  步骤3：配置测试账号（公众号）开发者模式
</p>
<p><img loading="lazy" decoding="async" width="778" height="532" src="/wp-content/uploads/2018/05/word-image-5066.png" class="wp-image-5590" srcset="/wp-content/uploads/2018/05/word-image-5066.png 778w, /wp-content/uploads/2018/05/word-image-5066-300x205.png 300w, /wp-content/uploads/2018/05/word-image-5066-768x525.png 768w, /wp-content/uploads/2018/05/word-image-5066-220x150.png 220w" sizes="(max-width: 778px) 100vw, 778px" /></p>
<p>
  脚下留心：配置好后，需要关注测试账号（公众号）才可以进行高级接口试用
</p>
<p><img loading="lazy" decoding="async" width="498" height="665" src="/wp-content/uploads/2018/05/word-image-5067.png" class="wp-image-5591" srcset="/wp-content/uploads/2018/05/word-image-5067.png 498w, /wp-content/uploads/2018/05/word-image-5067-225x300.png 225w" sizes="(max-width: 498px) 100vw, 498px" /></p>
<h1><a id="post-5587-_Toc475823313"></a>一、PHP中的cURL库</h1>
<h2><a id="post-5587-_Toc475823314"></a>1、cURL库</h2>
<p>
  说明：cURL 是一个功能强大的PHP库。
</p>
<p>
  作用：使用cURL实现Get和Post请求的方法，常用于数据采集或接口请求等
</p>
<h2><a id="post-5587-_Toc475823315"></a>cURL四步骤</h2>
<ul>
<li>
    步骤1：初始化curl，使用函数curl_init()
  </li>
<li>
    步骤2：配置，使用函数curl_setopt（）
  </li>
<li>
    步骤3：发送请求，使用函数curl_exec（）
  </li>
<li>
    步骤4：关闭请求，使用函数curl_close（）
  </li>
</ul>
<h2><a id="post-5587-_Toc475823316"></a>使用cURL发送get请求</h2>
<p><img loading="lazy" decoding="async" width="916" height="478" src="/wp-content/uploads/2018/05/word-image-5068.png" class="wp-image-5592" srcset="/wp-content/uploads/2018/05/word-image-5068.png 916w, /wp-content/uploads/2018/05/word-image-5068-300x157.png 300w, /wp-content/uploads/2018/05/word-image-5068-768x401.png 768w" sizes="(max-width: 916px) 100vw, 916px" /></p>
<p>
  &lt;?php
</p>
<p>
  //1.初始化curl，说明： curl http 简写 ch
</p>
<p>
  $ch = curl_init();
</p>
<p>
  //2.配置
</p>
<p>
  	//2.1配置请求地址（默认get请求）
</p>
<p>
  	curl_setopt($ch, CURLOPT_URL, 请求地址?参数1=值1&amp;参数2=值2);
</p>
<p>
  	//2.2配置数据响应方式（1.默认直接输出，2.复制给变量不输出）
</p>
<p>
  	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
</p>
<p>
  //3.发送http请求
</p>
<p>
  $data = curl_exec($ch);
</p>
<p>
  //4.关闭
</p>
<p>
  curl_close($ch);
</p>
<h2>4、使用cURL发送post请求</h2>
<p><img loading="lazy" decoding="async" width="935" height="614" src="/wp-content/uploads/2018/05/word-image-5069.png" class="wp-image-5593" srcset="/wp-content/uploads/2018/05/word-image-5069.png 935w, /wp-content/uploads/2018/05/word-image-5069-300x197.png 300w, /wp-content/uploads/2018/05/word-image-5069-768x504.png 768w" sizes="(max-width: 935px) 100vw, 935px" /></p>
<p>
  &lt;?php
</p>
<p>
  //1.初始化curl，说明： curl http 简写 ch
</p>
<p>
  $ch = curl_init();
</p>
<p>
  //2.配置
</p>
<p>
  	//2.1配置请求地址（默认get请求）
</p>
<p>
  	curl_setopt($ch, CURLOPT_URL, 请求地址?参数1=值1&amp;参数2=值2);
</p>
<p>
  	//2.2配置数据响应方式（1.默认直接输出，2.复制给变量不输出）
</p>
<p>
  	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
</p>
<p>
  	//2.3设置请求方式
</p>
<p>
  	curl_setopt($ch, CURLOPT_POST, true);
</p>
<p>
  	//2.4设置POST请求数据(post fields)
</p>
<p>
  	$arrData = [
</p>
<p>
  		&#8216;uname&#8217; =&gt; &#8216;陈总&#8217;,
</p>
<p>
  		&#8216;pwd&#8217; =&gt; 123
</p>
<p>
  	];
</p>
<p>
  	curl_setopt($ch, CURLOPT_POSTFIELDS, $arrData);
</p>
<p>
  //3.发送http请求
</p>
<p>
  $data = curl_exec($ch);
</p>
<p>
  //4.关闭
</p>
<p>
  curl_close($ch);
</p>
<h2>■ 案例：请求api接口</h2>
<h3>1）笑话接口</h3>
<p><a href="http://japi.juhe.cn/joke/content/text.from?key=2ca3e19979fadf2279ac6a036669f5ad&amp;page=1&amp;pagesize=10">http://japi.juhe.cn/joke/content/text.from?key=2ca3e19979fadf2279ac6a036669f5ad&amp;page=1&amp;pagesize=10</a>
</p>
<h3>2）代码</h3>
<p><img loading="lazy" decoding="async" width="1006" height="539" src="/wp-content/uploads/2018/05/word-image-5070.png" class="wp-image-5594" srcset="/wp-content/uploads/2018/05/word-image-5070.png 1006w, /wp-content/uploads/2018/05/word-image-5070-300x161.png 300w, /wp-content/uploads/2018/05/word-image-5070-768x411.png 768w" sizes="(max-width: 1006px) 100vw, 1006px" /></p>
<p>
  &lt;?php
</p>
<p>
  // 请求接口：http://japi.juhe.cn/joke/content/text.from?key=您申请的KEY&amp;page=1&amp;pagesize=10
</p>
<p>
  //1.初始化
</p>
<p>
  $ch = curl_init();
</p>
<p>
  //2.配置
</p>
<p>
  	//2.1设置请求地址
</p>
<p>
  	curl_setopt($ch, CURLOPT_URL, &#8216;http://japi.juhe.cn/joke/content/text.from?key=2ca3e19979fadf2279ac6a036669f5ad&amp;page=1&amp;pagesize=10&#8217;);
</p>
<p>
  	//2.2数据流不直接输出
</p>
<p>
  	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
</p>
<p>
  //3.发送请求
</p>
<p>
  $data = curl_exec($ch);
</p>
<p>
  //4.释放资源
</p>
<p>
  curl_close($ch);
</p>
<p>
  //语法：json_encode（数组）  	 转化为json数据
</p>
<p>
  //语法：json_decode（json数据,参数2）
</p>
<p>
  //说明：将数据转化为数组或者对象，（参数2：true-数组，false-对象，默认）
</p>
<p>
  // $data = iconv(&#8216;utf-8&#8217;, &#8216;gbk&#8217;, $data);
</p>
<p>
  // var_dump($data);die;
</p>
<p>
  $data = json_decode($data, true);
</p>
<p>
  echo &#8216;&lt;pre&gt;&#8217;;
</p>
<p>
  print_r($data);
</p>
<h2>■ 案例：采集网站数据</h2>
<p>
  场景：公司网站开发完毕，没有数据，如果不添加数据丑用户体验度不高，但是手动添加工程浩大费事
</p>
<p>
  解决：<a href="http://bbs.itheima.com/forum-393-1.html">http://bbs.itheima.com/forum-393-1.html</a>  采集最新活动
</p>
<p>
  采集表示抓取指定网站数据（注：数据采集就是抓取别人网站的数据保存自己的数据库）
</p>
<p>
  代码
</p>
<p><img loading="lazy" decoding="async" width="885" height="582" src="/wp-content/uploads/2018/05/word-image-5071.png" class="wp-image-5595" srcset="/wp-content/uploads/2018/05/word-image-5071.png 885w, /wp-content/uploads/2018/05/word-image-5071-300x197.png 300w, /wp-content/uploads/2018/05/word-image-5071-768x505.png 768w" sizes="(max-width: 885px) 100vw, 885px" /></p>
<p>
  &lt;?php
</p>
<p>
  //1.初始化
</p>
<p>
  $ch = curl_init();
</p>
<p>
  //2.配置
</p>
<p>
  	//2.1设置请求地址
</p>
<p>
  	curl_setopt($ch, CURLOPT_URL, &#8216;http://bbs.itheima.com/forum-393-1.html&#8217;);
</p>
<p>
  	//2.2数据流不直接输出
</p>
<p>
  	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
</p>
<p>
  //3.发送请求
</p>
<p>
  $data = curl_exec($ch);
</p>
<p>
  //4.释放资源
</p>
<p>
  curl_close($ch);
</p>
<p>
  // var_dump($data);
</p>
<p>
  //语法：preg_match(正则表达式, 待匹配的数据)
</p>
<p>
  //语法：preg_match_all(正则表达式, 待匹配的数据, 匹配的结果)
</p>
<p>
  //待匹配的数据标识&lt;a href=&#8221;thread-345001-1-1.html&#8221; onclick=&#8221;atarget(this)&#8221; class=&#8221;s xst&#8221;&gt;论坛改版签到不变，签到福利兑换接着走起来！&lt;/a&gt;
</p>
<p>
  //[123]  只匹配1或者2或者3
</p>
<p>
  //[^123] 不匹配1或2或3
</p>
<p>
  //[^&gt;]*  表示匹配不等于&gt;的字符任意次数
</p>
<p>
  preg_match_all(&#8216;/&lt;a[^&gt;]* class=&#8221;s xst&#8221;&gt;(.*)&lt;\/a&gt;/&#8217;, $data, $rs);
</p>
<p>
  echo &#8216;&lt;pre&gt;&#8217;;
</p>
<p>
  print_r($rs);
</p>
<h2>︴封装</h2>
<p><img loading="lazy" decoding="async" width="612" height="528" src="/wp-content/uploads/2018/05/word-image-5072.png" class="wp-image-5596" srcset="/wp-content/uploads/2018/05/word-image-5072.png 612w, /wp-content/uploads/2018/05/word-image-5072-300x259.png 300w" sizes="(max-width: 612px) 100vw, 612px" /></p>
<p>
  &lt;?php
</p>
<p>
  //1.单独完成功能
</p>
<p>
  //2.随便写一个空方法
</p>
<p>
  //3.将刚单独写好的功能放到方法中
</p>
<p>
  //4.找需要传递的参数，定义成形参
</p>
<p>
  /**
</p>
<p>
   * PHP发送请求
</p>
<p>
   * @param string $api  		接口地址
</p>
<p>
   * @param array  $postData  POST请求数据
</p>
<p>
   */
</p>
<p>
  function httpRequest($api, $postData = array())
</p>
<p>
  {
</p>
<p>
  	//1.初始化
</p>
<p>
  	$ch = curl_init();
</p>
<p>
  	//2.配置
</p>
<p>
  		//2.1设置请求地址
</p>
<p>
  		curl_setopt($ch, CURLOPT_URL, $api);
</p>
<p>
  		//2.2数据流不直接输出
</p>
<p>
  		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
</p>
<p>
  		//2.3POST请求
</p>
<p>
  		if ($postData) {
</p>
<p>
  			curl_setopt($ch, CURLOPT_POST, true);
</p>
<p>
  			curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
</p>
<p>
  		}
</p>
<p>
  		//curl注意事项，如果发送的请求是https，必须要禁止服务器端校检SSL证书
</p>
<p>
  		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
</p>
<p>
  		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
</p>
<p>
  	//3.发送请求
</p>
<p>
  	$data = curl_exec($ch);
</p>
<p>
  	//4.释放资源
</p>
<p>
  	curl_close($ch);
</p>
<p>
  	return $data;
</p>
<p>
  }
</p>
<h1><a id="post-5587-_Toc475823317"></a>二、获取接口调用凭证access_token</h1>
<h2><a id="post-5587-_Toc475823318"></a>1、说明</h2>
<p><img loading="lazy" decoding="async" width="1275" height="405" src="/wp-content/uploads/2018/05/word-image-5073.png" class="wp-image-5597" srcset="/wp-content/uploads/2018/05/word-image-5073.png 1275w, /wp-content/uploads/2018/05/word-image-5073-300x95.png 300w, /wp-content/uploads/2018/05/word-image-5073-768x244.png 768w, /wp-content/uploads/2018/05/word-image-5073-1024x325.png 1024w" sizes="(max-width: 1275px) 100vw, 1275px" /></p>
<h2><a id="post-5587-_Toc475823319"></a>2、接口说明</h2>
<p><img loading="lazy" decoding="async" width="879" height="440" src="/wp-content/uploads/2018/05/word-image-5074.png" class="wp-image-5598" srcset="/wp-content/uploads/2018/05/word-image-5074.png 879w, /wp-content/uploads/2018/05/word-image-5074-300x150.png 300w, /wp-content/uploads/2018/05/word-image-5074-768x384.png 768w" sizes="(max-width: 879px) 100vw, 879px" /></p>
<p><a href="https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=mp1421140183">https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=mp1421140183</a>
</p>
<p><img loading="lazy" decoding="async" width="689" height="336" src="/wp-content/uploads/2018/05/word-image-5075.png" class="wp-image-5599" srcset="/wp-content/uploads/2018/05/word-image-5075.png 689w, /wp-content/uploads/2018/05/word-image-5075-300x146.png 300w" sizes="(max-width: 689px) 100vw, 689px" /></p>
<h2><a id="post-5587-_Toc475823320"></a>3、使用curl库获取access_token</h2>
<p>
  &lt;?php
</p>
<p><img loading="lazy" decoding="async" width="1034" height="525" src="/wp-content/uploads/2018/05/word-image-5076.png" class="wp-image-5600" srcset="/wp-content/uploads/2018/05/word-image-5076.png 1034w, /wp-content/uploads/2018/05/word-image-5076-300x152.png 300w, /wp-content/uploads/2018/05/word-image-5076-768x390.png 768w, /wp-content/uploads/2018/05/word-image-5076-1024x520.png 1024w" sizes="(max-width: 1034px) 100vw, 1034px" /></p>
<p>
  $apiData = [
</p>
<p>
  	&#8216;appid&#8217; =&gt; &#8216;wx56e3e3d75414b3d0&#8217;,
</p>
<p>
  	&#8216;secret&#8217; =&gt; &#8216;f8ec8178c6dda48d1cb25c07304eff44&#8217;
</p>
<p>
  ];
</p>
<p>
  $api = &#8216;https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&amp;&#8217;.http_build_query($apiData);
</p>
<p>
  $data = httpRequest($api);
</p>
<p>
  echo $data[&#8216;access_token&#8217;];
</p>
<p>
  /**
</p>
<p>
   * PHP发送请求
</p>
<p>
   * @param string $api  		接口地址
</p>
<p>
   * @param array  $postData  POST请求数据
</p>
<p>
   */
</p>
<p>
  function httpRequest($api, $postData = array())
</p>
<p>
  {
</p>
<p>
  	//1.初始化
</p>
<p>
  	$ch = curl_init();
</p>
<p>
  	//2.配置
</p>
<p>
  		//2.1设置请求地址
</p>
<p>
  		curl_setopt($ch, CURLOPT_URL, $api);
</p>
<p>
  		//2.2数据流不直接输出
</p>
<p>
  		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
</p>
<p>
  		//2.3POST请求
</p>
<p>
  		if ($postData) {
</p>
<p>
  			curl_setopt($ch, CURLOPT_POST, true);
</p>
<p>
  			curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
</p>
<p>
  		}
</p>
<p>
  		//curl注意事项，如果发送的请求是https，必须要禁止服务器端校检SSL证书
</p>
<p>
  		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
</p>
<p>
  		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
</p>
<p>
  	//3.发送请求
</p>
<p>
  	$data = curl_exec($ch);
</p>
<p>
  	//4.释放资源
</p>
<p>
  	curl_close($ch);
</p>
<p>
  	return json_decode($data, true);
</p>
<p>
  }
</p>
<h2>︴封装方法保存access_token</h2>
<p><img loading="lazy" decoding="async" width="1118" height="532" src="/wp-content/uploads/2018/05/word-image-5077.png" class="wp-image-5601" srcset="/wp-content/uploads/2018/05/word-image-5077.png 1118w, /wp-content/uploads/2018/05/word-image-5077-300x143.png 300w, /wp-content/uploads/2018/05/word-image-5077-768x365.png 768w, /wp-content/uploads/2018/05/word-image-5077-1024x487.png 1024w" sizes="(max-width: 1118px) 100vw, 1118px" /></p>
<p>
  /**
</p>
<p>
   * 获取access_token
</p>
<p>
   * @see https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=mp1421140183
</p>
<p>
   * @return string
</p>
<p>
   */
</p>
<p>
  function getToken() {
</p>
<p>
  	$apiData = [
</p>
<p>
  		&#8216;appid&#8217; =&gt; &#8216;wx56e3e3d75414b3d0&#8217;,
</p>
<p>
  		&#8216;secret&#8217; =&gt; &#8216;f8ec8178c6dda48d1cb25c07304eff44&#8217;
</p>
<p>
  	];
</p>
<p>
  	$api = &#8216;https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&amp;&#8217;.http_build_query($apiData);
</p>
<p>
  	$data = httpRequest($api);
</p>
<p>
  	return $data[&#8216;access_token&#8217;];
</p>
<p>
  }
</p>
<h1><a id="post-5587-_Toc475823321"></a>三、微信的自定义菜单</h1>
<h2><a id="post-5587-_Toc475823322"></a>说明</h2>
<p><img loading="lazy" decoding="async" width="906" height="335" src="/wp-content/uploads/2018/05/word-image-5078.png" class="wp-image-5602" srcset="/wp-content/uploads/2018/05/word-image-5078.png 906w, /wp-content/uploads/2018/05/word-image-5078-300x111.png 300w, /wp-content/uploads/2018/05/word-image-5078-768x284.png 768w" sizes="(max-width: 906px) 100vw, 906px" /></p>
<p>
  在微信中，自定义菜单拥有缓存，其生效时间默认为24小时，如果想实时查看到创建或删除效果，我们可以取消关注公众平台并再次关注即可。
</p>
<h2>2、自定义菜单的创建接口</h2>
<h3>接口</h3>
<p><img loading="lazy" decoding="async" width="736" height="439" src="/wp-content/uploads/2018/05/word-image-5079.png" class="wp-image-5603" srcset="/wp-content/uploads/2018/05/word-image-5079.png 736w, /wp-content/uploads/2018/05/word-image-5079-300x179.png 300w" sizes="(max-width: 736px) 100vw, 736px" /><br />
<img loading="lazy" decoding="async" width="799" height="367" src="/wp-content/uploads/2018/05/word-image-5080.png" class="wp-image-5604" srcset="/wp-content/uploads/2018/05/word-image-5080.png 799w, /wp-content/uploads/2018/05/word-image-5080-300x138.png 300w, /wp-content/uploads/2018/05/word-image-5080-768x353.png 768w" sizes="(max-width: 799px) 100vw, 799px" /></p>
<p>
  参数分析
</p>
<p><img loading="lazy" decoding="async" width="765" height="656" src="/wp-content/uploads/2018/05/word-image-5081.png" class="wp-image-5605" srcset="/wp-content/uploads/2018/05/word-image-5081.png 765w, /wp-content/uploads/2018/05/word-image-5081-300x257.png 300w" sizes="(max-width: 765px) 100vw, 765px" /></p>
<h3>2）代码</h3>
<p><img loading="lazy" decoding="async" width="767" height="626" src="/wp-content/uploads/2018/05/word-image-5082.png" class="wp-image-5606" srcset="/wp-content/uploads/2018/05/word-image-5082.png 767w, /wp-content/uploads/2018/05/word-image-5082-300x245.png 300w" sizes="(max-width: 767px) 100vw, 767px" /></p>
<p>
  &lt;?php
</p>
<p>
  //1.定义接口
</p>
<p>
  $api = &#8216;https://api.weixin.qq.com/cgi-bin/menu/create?access_token=&#8217;.getToken();
</p>
<p>
  //2.定义接口数据
</p>
<p>
  $postData = &lt;&lt;&lt;STR
</p>
<p>
   {
</p>
<p>
       &#8220;button&#8221;:[
</p>
<p>
  	     {
</p>
<p>
  	          &#8220;type&#8221;:&#8221;click&#8221;,
</p>
<p>
  	          &#8220;name&#8221;:&#8221;程程&#8221;,
</p>
<p>
  	          &#8220;key&#8221;:&#8221;V1001_TODAY_MUSIC&#8221;
</p>
<p>
  	      },
</p>
<p>
  	      {
</p>
<p>
  	           &#8220;name&#8221;:&#8221;啊第三方&#8221;,
</p>
<p>
  	           &#8220;sub_button&#8221;:[
</p>
<p>
  		           {
</p>
<p>
  		               &#8220;type&#8221;:&#8221;view&#8221;,
</p>
<p>
  		               &#8220;name&#8221;:&#8221;搜索&#8221;,
</p>
<p>
  		               &#8220;url&#8221;:&#8221;http://www.soso.com/&#8221;
</p>
<p>
  		            },
</p>
<p>
  		            {
</p>
<p>
  		               &#8220;type&#8221;:&#8221;click&#8221;,
</p>
<p>
  		               &#8220;name&#8221;:&#8221;赞一下我们&#8221;,
</p>
<p>
  		               &#8220;key&#8221;:&#8221;V1001_GOOD&#8221;
</p>
<p>
  		            }
</p>
<p>
  	       		]
</p>
<p>
  	       }
</p>
<p>
        ]
</p>
<p>
   }
</p>
<p>
  STR;
</p>
<p>
  //3.发送请求
</p>
<p>
  $data = httpRequest($api, $postData);
</p>
<p>
  var_dump($data);
</p>
<p>
  /**
</p>
<p>
   * 获取access_token
</p>
<p>
   * @see https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=mp1421140183
</p>
<p>
   * @return string
</p>
<p>
   */
</p>
<p>
  function getToken() {
</p>
<p>
  	$apiData = [
</p>
<p>
  		&#8216;appid&#8217; =&gt; &#8216;wx56e3e3d75414b3d0&#8217;,
</p>
<p>
  		&#8216;secret&#8217; =&gt; &#8216;f8ec8178c6dda48d1cb25c07304eff44&#8217;
</p>
<p>
  	];
</p>
<p>
  	$api = &#8216;https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&amp;&#8217;.http_build_query($apiData);
</p>
<p>
  	$data = httpRequest($api);
</p>
<p>
  	return $data[&#8216;access_token&#8217;];
</p>
<p>
  }
</p>
<p>
  /**
</p>
<p>
   * PHP发送请求
</p>
<p>
   * @param string $api  		接口地址
</p>
<p>
   * @param array  $postData  POST请求数据
</p>
<p>
   */
</p>
<p>
  function httpRequest($api, $postData = array())
</p>
<p>
  {
</p>
<p>
  	//1.初始化
</p>
<p>
  	$ch = curl_init();
</p>
<p>
  	//2.配置
</p>
<p>
  		//2.1设置请求地址
</p>
<p>
  		curl_setopt($ch, CURLOPT_URL, $api);
</p>
<p>
  		//2.2数据流不直接输出
</p>
<p>
  		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
</p>
<p>
  		//2.3POST请求
</p>
<p>
  		if ($postData) {
</p>
<p>
  			curl_setopt($ch, CURLOPT_POST, true);
</p>
<p>
  			curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
</p>
<p>
  		}
</p>
<p>
  		//curl注意事项，如果发送的请求是https，必须要禁止服务器端校检SSL证书
</p>
<p>
  		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
</p>
<p>
  		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
</p>
<p>
  	//3.发送请求
</p>
<p>
  	$data = curl_exec($ch);
</p>
<p>
  	//4.释放资源
</p>
<p>
  	curl_close($ch);
</p>
<p>
  	return json_decode($data, true);
</p>
<p>
  }
</p>
<h2>3、自定义菜单事件推送</h2>
<ul>
<li>
    场景：创建微信自定义菜单，如果type=click点击没反映
  </li>
<li>
    解决：wx.php增加判断
  </li>
<li>
    代码：
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="752" height="416" src="/wp-content/uploads/2018/05/word-image-5083.png" class="wp-image-5607" srcset="/wp-content/uploads/2018/05/word-image-5083.png 752w, /wp-content/uploads/2018/05/word-image-5083-300x166.png 300w" sizes="(max-width: 752px) 100vw, 752px" /><br />
<img loading="lazy" decoding="async" width="926" height="588" src="/wp-content/uploads/2018/05/word-image-5084.png" class="wp-image-5608" srcset="/wp-content/uploads/2018/05/word-image-5084.png 926w, /wp-content/uploads/2018/05/word-image-5084-300x190.png 300w, /wp-content/uploads/2018/05/word-image-5084-768x488.png 768w" sizes="(max-width: 926px) 100vw, 926px" /></p>
<h2>4、自定义菜单删除接口</h2>
<h3>1）接口</h3>
<p><img loading="lazy" decoding="async" width="931" height="515" src="/wp-content/uploads/2018/05/word-image-5085.png" class="wp-image-5609" srcset="/wp-content/uploads/2018/05/word-image-5085.png 931w, /wp-content/uploads/2018/05/word-image-5085-300x166.png 300w, /wp-content/uploads/2018/05/word-image-5085-768x425.png 768w" sizes="(max-width: 931px) 100vw, 931px" /></p>
<h3>2）代码</h3>
<p>
  &lt;?php
</p>
<p>
  //1.定义接口
</p>
<p>
  $api = &#8216;https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=&#8217;.getToken();
</p>
<p>
  //2.发送请求
</p>
<p>
  $data = httpRequest($api);
</p>
<p>
  var_dump($data);
</p>
<p>
  /**
</p>
<p>
   * 获取access_token
</p>
<p>
   * @see https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=mp1421140183
</p>
<p>
   * @return string
</p>
<p>
   */
</p>
<p>
  function getToken() {
</p>
<p>
  	$apiData = [
</p>
<p>
  		&#8216;appid&#8217; =&gt; &#8216;wx56e3e3d75414b3d0&#8217;,
</p>
<p>
  		&#8216;secret&#8217; =&gt; &#8216;f8ec8178c6dda48d1cb25c07304eff44&#8217;
</p>
<p>
  	];
</p>
<p>
  	$api = &#8216;https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&amp;&#8217;.http_build_query($apiData);
</p>
<p>
  	$data = httpRequest($api);
</p>
<p>
  	return $data[&#8216;access_token&#8217;];
</p>
<p>
  }
</p>
<p>
  /**
</p>
<p>
   * PHP发送请求
</p>
<p>
   * @param string $api  		接口地址
</p>
<p>
   * @param array  $postData  POST请求数据
</p>
<p>
   */
</p>
<p>
  function httpRequest($api, $postData = array())
</p>
<p>
  {
</p>
<p>
  	//1.初始化
</p>
<p>
  	$ch = curl_init();
</p>
<p>
  	//2.配置
</p>
<p>
  		//2.1设置请求地址
</p>
<p>
  		curl_setopt($ch, CURLOPT_URL, $api);
</p>
<p>
  		//2.2数据流不直接输出
</p>
<p>
  		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
</p>
<p>
  		//2.3POST请求
</p>
<p>
  		if ($postData) {
</p>
<p>
  			curl_setopt($ch, CURLOPT_POST, true);
</p>
<p>
  			curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
</p>
<p>
  		}
</p>
<p>
  		//curl注意事项，如果发送的请求是https，必须要禁止服务器端校检SSL证书
</p>
<p>
  		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
</p>
<p>
  		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
</p>
<p>
  	//3.发送请求
</p>
<p>
  	$data = curl_exec($ch);
</p>
<p>
  	//4.释放资源
</p>
<p>
  	curl_close($ch);
</p>
<p>
  	return json_decode($data, true);
</p>
<p>
  }
</p>
<p>
  删除之后重新关注公众号，发现打开直接是聊天窗口
</p>
<h2>︴wx.php</h2>
<p>
  &lt;?php
</p>
<p>
  /**
</p>
<p>
    * wechat php test
</p>
<p>
    */
</p>
<p>
  //define your token
</p>
<p>
  define(&#8220;TOKEN&#8221;, &#8220;itcast&#8221;);
</p>
<p>
  $wechatObj = new wechatCallbackapiTest();
</p>
<p>
  // $wechatObj-&gt;valid();
</p>
<p>
  $wechatObj-&gt;responseMsg();
</p>
<p>
  class wechatCallbackapiTest
</p>
<p>
  {
</p>
<p>
  	public function valid()
</p>
<p>
      {
</p>
<p>
          $echoStr = $_GET[&#8220;echostr&#8221;];
</p>
<p>
          //valid signature , option
</p>
<p>
          if($this-&gt;checkSignature()){
</p>
<p>
          	echo $echoStr;
</p>
<p>
          	exit;
</p>
<p>
          }
</p>
<p>
      }
</p>
<p>
      public function responseMsg()
</p>
<p>
      {
</p>
<p>
  		//get post data, May be due to the different environments
</p>
<p>
  		$postStr = $GLOBALS[&#8220;HTTP_RAW_POST_DATA&#8221;];
</p>
<p>
        	//extract post data
</p>
<p>
  		if (!empty($postStr)){
</p>
<p>
                  /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
</p>
<p>
                     the best way is to check the validity of xml by yourself */
</p>
<p>
                  libxml_disable_entity_loader(true);
</p>
<p>
                	$postObj = simplexml_load_string($postStr, &#8216;SimpleXMLElement&#8217;, LIBXML_NOCDATA);
</p>
<p>
                  $fromUsername = $postObj-&gt;FromUserName;
</p>
<p>
                  $toUsername = $postObj-&gt;ToUserName;
</p>
<p>
                  $keyword = trim($postObj-&gt;Content);
</p>
<p>
                  $time = time();
</p>
<p>
                 //&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
</p>
<p>
                  if ($postObj-&gt;MsgType == &#8216;event&#8217;) {
</p>
<p>
                  	if ($postObj-&gt;Event == &#8216;CLICK&#8217;) {
</p>
<p>
                 			$this-&gt;sendText($fromUsername, $toUsername, &#8216;坏蛋，别点我&#8217;);
</p>
<p>
                  	}
</p>
<p>
                  } else {
</p>
<p>
                 		$this-&gt;sendText($fromUsername, $toUsername, &#8216;php12&#8217;);
</p>
<p>
                  }
</p>
<p>
          }else {
</p>
<p>
          	echo &#8220;&#8221;;
</p>
<p>
          	exit;
</p>
<p>
          }
</p>
<p>
      }
</p>
<p>
      /**
</p>
<p>
       * 响应音乐消息
</p>
<p>
       * @param string $fromUsername  接受者
</p>
<p>
       * @param string $toUsername    发送者
</p>
<p>
       * @param string $title         标题
</p>
<p>
       * @param string $desc          描述
</p>
<p>
       * @param string $musicUrl      音乐互联网地址（.mp3）
</p>
<p>
       * @param string $ThumbMediaId  封面
</p>
<p>
       * @param return
</p>
<p>
       */
</p>
<p>
      private function sendMusic($fromUsername, $toUsername, $title=&#8217;摇一摇歌声&#8217;, $desc=&#8217;甜美型，那是骗你的&#8217;, $musicUrl=&#8217;http://47.91.211.137/zxk/music.mp3&#8242;, $ThumbMediaId=&#8217;t96tqk6yOa_patBRMJNme_zrt3mlbKWCSZtXy5LMuSV8CZF58jXG5pRP67Xnciyb&#8217;) {
</p>
<p>
      	$tpl = &#8216;&lt;xml&gt;
</p>
<p>
  			&lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
</p>
<p>
  			&lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
</p>
<p>
  			&lt;CreateTime&gt;%s&lt;/CreateTime&gt;
</p>
<p>
  			&lt;MsgType&gt;&lt;![CDATA[music]]&gt;&lt;/MsgType&gt;
</p>
<p>
  			&lt;Music&gt;
</p>
<p>
  				&lt;Title&gt;&lt;![CDATA[%s]]&gt;&lt;/Title&gt;
</p>
<p>
  				&lt;Description&gt;&lt;![CDATA[%s]]&gt;&lt;/Description&gt;
</p>
<p>
  				&lt;MusicUrl&gt;&lt;![CDATA[%s]]&gt;&lt;/MusicUrl&gt;
</p>
<p>
  				&lt;HQMusicUrl&gt;&lt;![CDATA[%s]]&gt;&lt;/HQMusicUrl&gt;
</p>
<p>
  				&lt;ThumbMediaId&gt;&lt;![CDATA[%s]]&gt;&lt;/ThumbMediaId&gt;
</p>
<p>
  			&lt;/Music&gt;
</p>
<p>
  		&lt;/xml&gt;&#8217;;
</p>
<p>
  		echo sprintf($tpl, $fromUsername, $toUsername, time(), $title, $desc, $musicUrl, $musicUrl, $ThumbMediaId);
</p>
<p>
  		die;
</p>
<p>
      }
</p>
<p>
      /**
</p>
<p>
       * 响应文本消息
</p>
<p>
       * @param string $fromUsername  接受者
</p>
<p>
       * @param string $toUsername    发送者
</p>
<p>
       * @param string $content       发送的内容
</p>
<p>
       * @param return
</p>
<p>
       */
</p>
<p>
      private function sendText($fromUsername, $toUsername, $content) {
</p>
<p>
      	$textTpl = &#8216;&lt;xml&gt;
</p>
<p>
          	&lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
</p>
<p>
          	&lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
</p>
<p>
          	&lt;CreateTime&gt;%s&lt;/CreateTime&gt;
</p>
<p>
          	&lt;MsgType&gt;&lt;![CDATA[text]]&gt;&lt;/MsgType&gt;
</p>
<p>
          	&lt;Content&gt;&lt;![CDATA[%s]]&gt;&lt;/Content&gt;
</p>
<p>
          &lt;/xml&gt;&#8217;;
</p>
<p>
          echo sprintf($textTpl, $fromUsername, $toUsername, time(), $content);
</p>
<p>
          die;
</p>
<p>
      }
</p>
<p>
      /**
</p>
<p>
       * 响应图片消息
</p>
<p>
       * @param string $fromUsername  接受者
</p>
<p>
       * @param string $toUsername    发送者
</p>
<p>
       * @param string $MediaId       媒体ID（https://mp.weixin.qq.com/debug  先回去access_token 然后获取MediaId）
</p>
<p>
       * @param return
</p>
<p>
       */
</p>
<p>
      private function sendImage($fromUsername, $toUsername, $MediaId = &#8216;G3P8hP2UXqozqUrOpt6rkfC2LEykkeD4OGTPBUyjVFgrGy0-C1yOR3Bvg0vSalic&#8217;)
</p>
<p>
      {
</p>
<p>
      	 //响应图片的xml报文
</p>
<p>
    	    $tpl = &#8216;&lt;xml&gt;
</p>
<p>
    	    	&lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
</p>
<p>
    	    	&lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
</p>
<p>
    	    	&lt;CreateTime&gt;%s&lt;/CreateTime&gt;
</p>
<p>
    	    	&lt;MsgType&gt;&lt;![CDATA[image]]&gt;&lt;/MsgType&gt;
</p>
<p>
    	    	&lt;Image&gt;&lt;MediaId&gt;&lt;![CDATA[%s]]&gt;&lt;/MediaId&gt;&lt;/Image&gt;
</p>
<p>
    	    &lt;/xml&gt;&#8217;;
</p>
<p>
    	    //脚下留心：MediaId是需要通过接口获取的，明天详细讲解，今天通过工具获取
</p>
<p>
    	    //https://mp.weixin.qq.com/debug 查看MediaId（G3P8hP2UXqozqUrOpt6rkfC2LEykkeD4OGTPBUyjVFgrGy0-C1yOR3Bvg0vSalic）
</p>
<p>
    	    echo sprintf($tpl, $fromUsername, $toUsername, time(), $MediaId);
</p>
<p>
       	die;
</p>
<p>
      }
</p>
<p>
  	/**
</p>
<p>
       * 响应视频消息
</p>
<p>
       * @param string $fromUsername  接受者
</p>
<p>
       * @param string $toUsername    发送者
</p>
<p>
       * @param string $MediaId       媒体ID（https://mp.weixin.qq.com/debug  先回去access_token 然后获取MediaId）
</p>
<p>
       * @param return
</p>
<p>
       */
</p>
<p>
      private function sendVideo($fromUsername, $toUsername, $MediaId = &#8216;8pudm18nSyQ5vBO8fCKQ_ucHm9BKTUtTDjfoLNYfoev_B1JY-hJ-E1mk5BncLCtm&#8217;)
</p>
<p>
      {
</p>
<p>
      	$tpl = &#8216;&lt;xml&gt;
</p>
<p>
  		&lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
</p>
<p>
  		&lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
</p>
<p>
  		&lt;CreateTime&gt;%s&lt;/CreateTime&gt;
</p>
<p>
  		&lt;MsgType&gt;&lt;![CDATA]&gt;&lt;/MsgType&gt;
</p>
<p>
  		&lt;Video&gt;
</p>
<p>
  			&lt;MediaId&gt;&lt;![CDATA[%s]]&gt;&lt;/MediaId&gt;
</p>
<p>
  			&lt;Title&gt;&lt;![CDATA[%s]]&gt;&lt;/Title&gt;
</p>
<p>
  			&lt;Description&gt;&lt;![CDATA[%s]]&gt;&lt;/Description&gt;
</p>
<p>
  		&lt;/Video&gt;
</p>
<p>
  		&lt;/xml&gt;&#8217;;
</p>
<p>
  		echo sprintf($tpl, $fromUsername, $toUsername, time(), $MediaId, &#8216;陈恒那些事&#8217;, &#8216;大战三百回合&#8217;);
</p>
<p>
      }
</p>
</p>
<p>
  	private function checkSignature()
</p>
<p>
  	{
</p>
<p>
          // you must define TOKEN by yourself
</p>
<p>
          if (!defined(&#8220;TOKEN&#8221;)) {
</p>
<p>
              throw new Exception(&#8216;TOKEN is not defined!&#8217;);
</p>
<p>
          }
</p>
</p>
<p>
          $signature = $_GET[&#8220;signature&#8221;];
</p>
<p>
          $timestamp = $_GET[&#8220;timestamp&#8221;];
</p>
<p>
          $nonce = $_GET[&#8220;nonce&#8221;];
</p>
</p>
<p>
  		$token = TOKEN;
</p>
<p>
  		$tmpArr = array($token, $timestamp, $nonce);
</p>
<p>
          // use SORT_STRING rule
</p>
<p>
  		sort($tmpArr, SORT_STRING);
</p>
<p>
  		$tmpStr = implode( $tmpArr );
</p>
<p>
  		$tmpStr = sha1( $tmpStr );
</p>
</p>
<p>
  		if( $tmpStr == $signature ){
</p>
<p>
  			return true;
</p>
<p>
  		}else{
</p>
<p>
  			return false;
</p>
<p>
  		}
</p>
<p>
  	}
</p>
<p>
  }
</p>
<p>
  ?&gt;
</p>
<h1><a id="post-5587-_Toc475823328"></a>四、多媒体文件上传接口</h1>
<h2><a id="post-5587-_Toc475823329"></a>1、为什么需要多媒体文件上传接口</h2>
<p>
  回顾回复消息接口，图片回复接口、语音回复接口、视频回复接口，这三个接口在开发时都需要提供一个参数MediaId，在应用中，如果想获取MediaId就必须使用多媒体文件上传接口。
</p>
<h2><a id="post-5587-_Toc475823330"></a>2、分析多媒体文件上传接口</h2>
<p><img loading="lazy" decoding="async" width="847" height="596" src="/wp-content/uploads/2018/05/word-image-5086.png" class="wp-image-5610" srcset="/wp-content/uploads/2018/05/word-image-5086.png 847w, /wp-content/uploads/2018/05/word-image-5086-300x211.png 300w, /wp-content/uploads/2018/05/word-image-5086-768x540.png 768w" sizes="(max-width: 847px) 100vw, 847px" /><br />
<img loading="lazy" decoding="async" width="843" height="425" src="/wp-content/uploads/2018/05/word-image-5087.png" class="wp-image-5611" srcset="/wp-content/uploads/2018/05/word-image-5087.png 843w, /wp-content/uploads/2018/05/word-image-5087-300x151.png 300w, /wp-content/uploads/2018/05/word-image-5087-768x387.png 768w" sizes="(max-width: 843px) 100vw, 843px" /></p>
<h2><a id="post-5587-_Toc475823331"></a>3、编写php代码，实现素材上传</h2>
<p><img loading="lazy" decoding="async" width="943" height="368" src="/wp-content/uploads/2018/05/word-image-5088.png" class="wp-image-5612" srcset="/wp-content/uploads/2018/05/word-image-5088.png 943w, /wp-content/uploads/2018/05/word-image-5088-300x117.png 300w, /wp-content/uploads/2018/05/word-image-5088-768x300.png 768w" sizes="(max-width: 943px) 100vw, 943px" /></p>
<p>
  &lt;?php
</p>
<p>
  //1.定义接口
</p>
<p>
  $apiData = array(
</p>
<p>
  	&#8216;access_token&#8217;=&gt;getToken(),
</p>
<p>
  	&#8216;type&#8217;=&gt;&#8217;image&#8217;
</p>
<p>
  );
</p>
<p>
  $api = &#8216;https://api.weixin.qq.com/cgi-bin/media/upload?&#8217;.http_build_query($apiData);
</p>
<p>
  //2.发送请求
</p>
<p>
  $filePath = dirname(__FILE__) . DIRECTORY_SEPARATOR .&#8217;zhujiao.jpg&#8217;; //脚下留心：window不区分\/但linux只支持 /
</p>
<p>
  //$postData = array(&#8216;media&#8217; =&gt; &#8216;@&#8217;.$filePath);		   //脚下留心：PHP版本低于5.5
</p>
<p>
  $postData = array(&#8216;media&#8217; =&gt; new Curlfile($filePath)); //脚下留心：PHP版本高于5.5
</p>
<p>
  $data = httpRequest($api, $postData);
</p>
<p>
  var_dump($data);
</p>
<p>
  /**
</p>
<p>
   * 获取access_token
</p>
<p>
   * @see https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=mp1421140183
</p>
<p>
   * @return string
</p>
<p>
   */
</p>
<p>
  function getToken() {
</p>
<p>
  	$apiData = array(
</p>
<p>
  		&#8216;appid&#8217; =&gt; &#8216;wx56e3e3d75414b3d0&#8217;,
</p>
<p>
  		&#8216;secret&#8217; =&gt; &#8216;f8ec8178c6dda48d1cb25c07304eff44&#8217;
</p>
<p>
  	);
</p>
<p>
  	$api = &#8216;https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&amp;&#8217;.http_build_query($apiData);
</p>
<p>
  	$data = httpRequest($api);
</p>
<p>
  	return $data[&#8216;access_token&#8217;];
</p>
<p>
  }
</p>
<p>
  /**
</p>
<p>
   * PHP发送请求
</p>
<p>
   * @param string $api  		接口地址
</p>
<p>
   * @param array  $postData  POST请求数据
</p>
<p>
   */
</p>
<p>
  function httpRequest($api, $postData = array())
</p>
<p>
  {
</p>
<p>
  	//1.初始化
</p>
<p>
  	$ch = curl_init();
</p>
<p>
  	//2.配置
</p>
<p>
  		//2.1设置请求地址
</p>
<p>
  		curl_setopt($ch, CURLOPT_URL, $api);
</p>
<p>
  		//2.2数据流不直接输出
</p>
<p>
  		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
</p>
<p>
  		//2.3POST请求
</p>
<p>
  		if ($postData) {
</p>
<p>
  			curl_setopt($ch, CURLOPT_POST, true);
</p>
<p>
  			curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
</p>
<p>
  		}
</p>
<p>
  		//curl注意事项，如果发送的请求是https，必须要禁止服务器端校检SSL证书
</p>
<p>
  		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
</p>
<p>
  		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
</p>
<p>
  	//3.发送请求
</p>
<p>
  	$data = curl_exec($ch);
</p>
<p>
  	//4.释放资源
</p>
<p>
  	curl_close($ch);
</p>
<p>
  	return json_decode($data, true);
</p>
<p>
  }
</p>
<h2>︴封装</h2>
<p><img loading="lazy" decoding="async" width="984" height="413" src="/wp-content/uploads/2018/05/word-image-5089.png" class="wp-image-5613" srcset="/wp-content/uploads/2018/05/word-image-5089.png 984w, /wp-content/uploads/2018/05/word-image-5089-300x126.png 300w, /wp-content/uploads/2018/05/word-image-5089-768x322.png 768w" sizes="(max-width: 984px) 100vw, 984px" /></p>
<p>
  function getMediaId($filePath) {
</p>
<p>
  	//1.定义接口
</p>
<p>
  	$apiData = array(
</p>
<p>
  		&#8216;access_token&#8217; =&gt; getToken(),
</p>
<p>
  		&#8216;type&#8217;=&gt;&#8217;image&#8217;
</p>
<p>
  	);
</p>
<p>
  	$api = &#8216;https://api.weixin.qq.com/cgi-bin/media/upload?&#8217;.http_build_query($apiData);
</p>
<p>
  	//2.发送请求
</p>
<p>
  	//$filePath = dirname(__FILE__) . DIRECTORY_SEPARATOR .&#8217;zhujiao.jpg&#8217;; //脚下留心：window不区分\/但linux只支持 /
</p>
<p>
  	if(version_compare(PHP_VERSION,&#8217;5.5.0&#8242;,'&lt;&#8216;))  {
</p>
<p>
  		//脚下留心：PHP版本低于5.5
</p>
<p>
  		$postData = array(&#8216;media&#8217; =&gt; &#8216;@&#8217;.$filePath);
</p>
<p>
  	} else {
</p>
<p>
  		//脚下留心：PHP版本高于5.5
</p>
<p>
  		$postData = array(&#8216;media&#8217; =&gt; new Curlfile($filePath));
</p>
<p>
  	}
</p>
<p>
  	$data = httpRequest($api, $postData);
</p>
<p>
  	return $data[&#8216;media_id&#8217;];
</p>
<p>
  	// var_dump($data);
</p>
<p>
  }
</p>
<h1><a id="post-5587-_Toc475823332"></a>五、封装Wechat.class.php类文件</h1>
<h2><a id="post-5587-_Toc475823333"></a>1、为什么需要Wechat.class.php类文件</h2>
<p>
  答：随着时间的推移，wx.php中的功能也越来越复杂，为了简化wx.php（微信官方SDK）中的相关操作，我们可以把一些常用的功能如获取access_token/curl库封装在一个类中。
</p>
<h2><a id="post-5587-_Toc475823334"></a>2、封装Wechat.class.php类文件</h2>
<p>
  &lt;?php
</p>
<p>
  define(&#8216;APPID&#8217;, &#8216;wx56e3e3d75414b3d0&#8217;);
</p>
<p>
  define(&#8216;APPSECRET&#8217;, &#8216;f8ec8178c6dda48d1cb25c07304eff44&#8217;);
</p>
<p>
  class Wechat
</p>
<p>
  {
</p>
<p>
      /**
</p>
<p>
       * 获取access_token
</p>
<p>
       * @see https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=mp1421140183
</p>
<p>
       * @return string
</p>
<p>
       */
</p>
<p>
      protected function getToken()
</p>
<p>
      {
</p>
<p>
          $apiData = array(
</p>
<p>
              &#8216;appid&#8217; =&gt; APPID,
</p>
<p>
              &#8216;secret&#8217; =&gt; APPSECRET
</p>
<p>
          );
</p>
<p>
          $api = &#8216;https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&amp;&#8217;.http_build_query($apiData);
</p>
<p>
          $data = $this-&gt;httpRequest($api);
</p>
<p>
          return $data[&#8216;access_token&#8217;];
</p>
<p>
      }
</p>
<p>
      /**
</p>
<p>
       * 上传媒体文件
</p>
<p>
       * @see https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=mp1444738726
</p>
<p>
       * @return string
</p>
<p>
       * 注：
</p>
<p>
       * 图片（image）: 2M，支持PNG\JPEG\JPG\GIF格式
</p>
<p>
       * 语音（voice）：2M，播放长度不超过60s，支持AMR\MP3格式
</p>
<p>
       * 视频（video）：10MB，支持MP4格式
</p>
<p>
       * 缩略图（thumb）：64KB，支持JPG格式
</p>
<p>
       */
</p>
<p>
      protected function getMediaId($filePath)
</p>
<p>
      {
</p>
<p>
          //1.定义接口
</p>
<p>
          $apiData = array(
</p>
<p>
              &#8216;access_token&#8217; =&gt; $this-&gt;getToken(),
</p>
<p>
              &#8216;type&#8217;=&gt;&#8217;image&#8217;
</p>
<p>
          );
</p>
<p>
          $api = &#8216;https://api.weixin.qq.com/cgi-bin/media/upload?&#8217;.http_build_query($apiData);
</p>
<p>
          //2.发送请求
</p>
<p>
          //$filePath = dirname(__FILE__) . DIRECTORY_SEPARATOR .&#8217;zhujiao.jpg&#8217;; //脚下留心：window不区分\/但linux只支持 /
</p>
<p>
          if(version_compare(PHP_VERSION,&#8217;5.5.0&#8242;,'&lt;&#8216;))  {
</p>
<p>
              //脚下留心：PHP版本低于5.5
</p>
<p>
              $postData = array(&#8216;media&#8217; =&gt; &#8216;@&#8217;.$filePath);
</p>
<p>
          } else {
</p>
<p>
              //脚下留心：PHP版本高于5.5
</p>
<p>
              $postData = array(&#8216;media&#8217; =&gt; new Curlfile($filePath));
</p>
<p>
          }
</p>
<p>
          $data = $this-&gt;httpRequest($api, $postData);
</p>
<p>
          return $data[&#8216;media_id&#8217;];
</p>
<p>
          // var_dump($data);
</p>
<p>
      }
</p>
<p>
      /**
</p>
<p>
       * PHP发送请求
</p>
<p>
       * @param string $api       接口地址
</p>
<p>
       * @param array  $postData  POST请求数据
</p>
<p>
       */
</p>
<p>
      private function httpRequest($api, $postData = array())
</p>
<p>
      {
</p>
<p>
          //1.初始化
</p>
<p>
          $ch = curl_init();
</p>
<p>
          //2.配置
</p>
<p>
              //2.1设置请求地址
</p>
<p>
              curl_setopt($ch, CURLOPT_URL, $api);
</p>
<p>
              //2.2数据流不直接输出
</p>
<p>
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
</p>
<p>
              //2.3POST请求
</p>
<p>
              if ($postData) {
</p>
<p>
                  curl_setopt($ch, CURLOPT_POST, true);
</p>
<p>
                  curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
</p>
<p>
              }
</p>
<p>
              //curl注意事项，如果发送的请求是https，必须要禁止服务器端校检SSL证书
</p>
<p>
              curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
</p>
<p>
              curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
</p>
<p>
          //3.发送请求
</p>
<p>
          $data = curl_exec($ch);
</p>
<p>
          //4.释放资源
</p>
<p>
          curl_close($ch);
</p>
<p>
          return json_decode($data, true);
</p>
<p>
      }
</p>
<p>
  	/**
</p>
<p>
       * 响应音乐消息
</p>
<p>
       * @param string $fromUsername  接受者
</p>
<p>
       * @param string $toUsername    发送者
</p>
<p>
       * @param string $title         标题
</p>
<p>
       * @param string $desc          描述
</p>
<p>
       * @param string $musicUrl      音乐互联网地址（.mp3）
</p>
<p>
       * @param string $ThumbMediaId  封面
</p>
<p>
       * @param return
</p>
<p>
       */
</p>
<p>
      protected function sendMusic($fromUsername, $toUsername, $title=&#8217;摇一摇歌声&#8217;, $desc=&#8217;甜美型，那是骗你的&#8217;, $musicUrl=&#8217;http://47.91.211.137/zxk/music.mp3&#8242;, $ThumbMediaId=&#8217;t96tqk6yOa_patBRMJNme_zrt3mlbKWCSZtXy5LMuSV8CZF58jXG5pRP67Xnciyb&#8217;) {
</p>
<p>
      	$tpl = &#8216;&lt;xml&gt;
</p>
<p>
  			&lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
</p>
<p>
  			&lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
</p>
<p>
  			&lt;CreateTime&gt;%s&lt;/CreateTime&gt;
</p>
<p>
  			&lt;MsgType&gt;&lt;![CDATA[music]]&gt;&lt;/MsgType&gt;
</p>
<p>
  			&lt;Music&gt;
</p>
<p>
  				&lt;Title&gt;&lt;![CDATA[%s]]&gt;&lt;/Title&gt;
</p>
<p>
  				&lt;Description&gt;&lt;![CDATA[%s]]&gt;&lt;/Description&gt;
</p>
<p>
  				&lt;MusicUrl&gt;&lt;![CDATA[%s]]&gt;&lt;/MusicUrl&gt;
</p>
<p>
  				&lt;HQMusicUrl&gt;&lt;![CDATA[%s]]&gt;&lt;/HQMusicUrl&gt;
</p>
<p>
  				&lt;ThumbMediaId&gt;&lt;![CDATA[%s]]&gt;&lt;/ThumbMediaId&gt;
</p>
<p>
  			&lt;/Music&gt;
</p>
<p>
  		&lt;/xml&gt;&#8217;;
</p>
<p>
  		echo sprintf($tpl, $fromUsername, $toUsername, time(), $title, $desc, $musicUrl, $musicUrl, $ThumbMediaId);
</p>
<p>
  		die;
</p>
<p>
      }
</p>
<p>
      /**
</p>
<p>
       * 响应文本消息
</p>
<p>
       * @param string $fromUsername  接受者
</p>
<p>
       * @param string $toUsername    发送者
</p>
<p>
       * @param string $content       发送的内容
</p>
<p>
       * @param return
</p>
<p>
       */
</p>
<p>
      protected function sendText($fromUsername, $toUsername, $content) {
</p>
<p>
      	$textTpl = &#8216;&lt;xml&gt;
</p>
<p>
          	&lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
</p>
<p>
          	&lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
</p>
<p>
          	&lt;CreateTime&gt;%s&lt;/CreateTime&gt;
</p>
<p>
          	&lt;MsgType&gt;&lt;![CDATA[text]]&gt;&lt;/MsgType&gt;
</p>
<p>
          	&lt;Content&gt;&lt;![CDATA[%s]]&gt;&lt;/Content&gt;
</p>
<p>
          &lt;/xml&gt;&#8217;;
</p>
<p>
          echo sprintf($textTpl, $fromUsername, $toUsername, time(), $content);
</p>
<p>
          die;
</p>
<p>
      }
</p>
<p>
      /**
</p>
<p>
       * 响应图片消息
</p>
<p>
       * @param string $fromUsername  接受者
</p>
<p>
       * @param string $toUsername    发送者
</p>
<p>
       * @param string $MediaId       媒体ID（https://mp.weixin.qq.com/debug  先回去access_token 然后获取MediaId）
</p>
<p>
       * @param return
</p>
<p>
       */
</p>
<p>
      protected function sendImage($fromUsername, $toUsername, $MediaId = &#8216;G3P8hP2UXqozqUrOpt6rkfC2LEykkeD4OGTPBUyjVFgrGy0-C1yOR3Bvg0vSalic&#8217;)
</p>
<p>
      {
</p>
<p>
      	 //响应图片的xml报文
</p>
<p>
    	    $tpl = &#8216;&lt;xml&gt;
</p>
<p>
    	    	&lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
</p>
<p>
    	    	&lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
</p>
<p>
    	    	&lt;CreateTime&gt;%s&lt;/CreateTime&gt;
</p>
<p>
    	    	&lt;MsgType&gt;&lt;![CDATA[image]]&gt;&lt;/MsgType&gt;
</p>
<p>
    	    	&lt;Image&gt;&lt;MediaId&gt;&lt;![CDATA[%s]]&gt;&lt;/MediaId&gt;&lt;/Image&gt;
</p>
<p>
    	    &lt;/xml&gt;&#8217;;
</p>
<p>
    	    //脚下留心：MediaId是需要通过接口获取的，明天详细讲解，今天通过工具获取
</p>
<p>
    	    //https://mp.weixin.qq.com/debug 查看MediaId（G3P8hP2UXqozqUrOpt6rkfC2LEykkeD4OGTPBUyjVFgrGy0-C1yOR3Bvg0vSalic）
</p>
<p>
    	    echo sprintf($tpl, $fromUsername, $toUsername, time(), $MediaId);
</p>
<p>
       	die;
</p>
<p>
      }
</p>
<p>
  	/**
</p>
<p>
       * 响应视频消息
</p>
<p>
       * @param string $fromUsername  接受者
</p>
<p>
       * @param string $toUsername    发送者
</p>
<p>
       * @param string $MediaId       媒体ID（https://mp.weixin.qq.com/debug  先回去access_token 然后获取MediaId）
</p>
<p>
       * @param return
</p>
<p>
       */
</p>
<p>
      protected function sendVideo($fromUsername, $toUsername, $MediaId = &#8216;8pudm18nSyQ5vBO8fCKQ_ucHm9BKTUtTDjfoLNYfoev_B1JY-hJ-E1mk5BncLCtm&#8217;)
</p>
<p>
      {
</p>
<p>
      	$tpl = &#8216;&lt;xml&gt;
</p>
<p>
  		&lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;
</p>
<p>
  		&lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;
</p>
<p>
  		&lt;CreateTime&gt;%s&lt;/CreateTime&gt;
</p>
<p>
  		&lt;MsgType&gt;&lt;![CDATA]&gt;&lt;/MsgType&gt;
</p>
<p>
  		&lt;Video&gt;
</p>
<p>
  			&lt;MediaId&gt;&lt;![CDATA[%s]]&gt;&lt;/MediaId&gt;
</p>
<p>
  			&lt;Title&gt;&lt;![CDATA[%s]]&gt;&lt;/Title&gt;
</p>
<p>
  			&lt;Description&gt;&lt;![CDATA[%s]]&gt;&lt;/Description&gt;
</p>
<p>
  		&lt;/Video&gt;
</p>
<p>
  		&lt;/xml&gt;&#8217;;
</p>
<p>
  		echo sprintf($tpl, $fromUsername, $toUsername, time(), $MediaId, &#8216;陈恒那些事&#8217;, &#8216;大战三百回合&#8217;);
</p>
<p>
      }
</p>
<p>
  }
</p>
<h2><a id="post-5587-_Toc475823335"></a>让wx.php中的wechatCallbackapiTest类继承Wechat类</h2>
<p>
  &lt;?php
</p>
<p>
  require &#8216;./Wechat.class.php&#8217;;
</p>
<p>
  /**
</p>
<p>
    * wechat php test
</p>
<p>
    */
</p>
<p>
  //define your token
</p>
<p>
  define(&#8220;TOKEN&#8221;, &#8220;itcast&#8221;);
</p>
<p>
  class wechatCallbackapiTest extends Wechat
</p>
<p>
  {
</p>
<p>
  	public function valid()
</p>
<p>
      {
</p>
<p>
          $echoStr = $_GET[&#8220;echostr&#8221;];
</p>
<p>
          //valid signature , option
</p>
<p>
          if($this-&gt;checkSignature()){
</p>
<p>
          	echo $echoStr;
</p>
<p>
          	exit;
</p>
<p>
          }
</p>
<p>
      }
</p>
<p>
      public function responseMsg()
</p>
<p>
      {
</p>
<p>
  		//get post data, May be due to the different environments
</p>
<p>
  		$postStr = $GLOBALS[&#8220;HTTP_RAW_POST_DATA&#8221;];
</p>
<p>
        	//extract post data
</p>
<p>
  		if (!empty($postStr)){
</p>
<p>
                  /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
</p>
<p>
                     the best way is to check the validity of xml by yourself */
</p>
<p>
                  libxml_disable_entity_loader(true);
</p>
<p>
                	$postObj = simplexml_load_string($postStr, &#8216;SimpleXMLElement&#8217;, LIBXML_NOCDATA);
</p>
<p>
                  $fromUsername = $postObj-&gt;FromUserName;
</p>
<p>
                  $toUsername = $postObj-&gt;ToUserName;
</p>
<p>
                  $keyword = trim($postObj-&gt;Content);
</p>
<p>
                  $type = trim($postObj-&gt;MsgType);
</p>
<p>
                  $time = time();
</p>
</p>
<p>
                  switch ($type) {
</p>
<p>
                      case &#8216;text&#8217;:
</p>
<p>
                          if ($keyword == &#8216;来图片&#8217;) {
</p>
<p>
                              $filePath = dirname(__FILE__) . DIRECTORY_SEPARATOR .&#8217;zhujiao.jpg&#8217;;
</p>
<p>
                              $this-&gt;sendImage($fromUsername, $toUsername, $this-&gt;getMediaId($filePath));
</p>
<p>
                          } else {
</p>
<p>
                              $this-&gt;sendText($fromUsername, $toUsername, &#8216;陈总&#8217;);
</p>
<p>
                          }
</p>
<p>
                          break;
</p>
</p>
<p>
                      default:
</p>
<p>
                          $this-&gt;sendText($fromUsername, $toUsername, &#8216;兄弟，不在服务器&#8217;);
</p>
<p>
                          # code&#8230;
</p>
<p>
                          break;
</p>
<p>
                  }
</p>
<p>
          }else {
</p>
<p>
          	echo &#8220;&#8221;;
</p>
<p>
          	exit;
</p>
<p>
          }
</p>
<p>
      }
</p>
</p>
<p>
  	private function checkSignature()
</p>
<p>
  	{
</p>
<p>
          // you must define TOKEN by yourself
</p>
<p>
          if (!defined(&#8220;TOKEN&#8221;)) {
</p>
<p>
              throw new Exception(&#8216;TOKEN is not defined!&#8217;);
</p>
<p>
          }
</p>
</p>
<p>
          $signature = $_GET[&#8220;signature&#8221;];
</p>
<p>
          $timestamp = $_GET[&#8220;timestamp&#8221;];
</p>
<p>
          $nonce = $_GET[&#8220;nonce&#8221;];
</p>
</p>
<p>
  		$token = TOKEN;
</p>
<p>
  		$tmpArr = array($token, $timestamp, $nonce);
</p>
<p>
          // use SORT_STRING rule
</p>
<p>
  		sort($tmpArr, SORT_STRING);
</p>
<p>
  		$tmpStr = implode( $tmpArr );
</p>
<p>
  		$tmpStr = sha1( $tmpStr );
</p>
</p>
<p>
  		if( $tmpStr == $signature ){
</p>
<p>
  			return true;
</p>
<p>
  		}else{
</p>
<p>
  			return false;
</p>
<p>
  		}
</p>
<p>
  	}
</p>
<p>
  }
</p>
<p>
  $wechatObj = new wechatCallbackapiTest();
</p>
<p>
  //脚下留心：
</p>
<p>
  //如果通信不成功
</p>
<p>
  //解决思路：
</p>
<p>
  //1.检查URL是否能正常访问
</p>
<p>
  //2.检查调用的是否是valid方法
</p>
<p>
  //$wechatObj-&gt;valid();
</p>
<p>
  $wechatObj-&gt;responseMsg();
</p>
<h1><a id="post-5587-_Toc475823336"></a>六、客服消息接口</h1>
<h2><a id="post-5587-_Toc475823337"></a>1、什么是客服消息接口</h2>
<p><img loading="lazy" decoding="async" width="1216" height="505" src="/wp-content/uploads/2018/05/word-image-5090.png" class="wp-image-5614" srcset="/wp-content/uploads/2018/05/word-image-5090.png 1216w, /wp-content/uploads/2018/05/word-image-5090-300x125.png 300w, /wp-content/uploads/2018/05/word-image-5090-768x319.png 768w, /wp-content/uploads/2018/05/word-image-5090-1024x425.png 1024w" sizes="(max-width: 1216px) 100vw, 1216px" /></p>
<h2><a id="post-5587-_Toc475823338"></a>2、分析客服消息接口</h2>
<p><img loading="lazy" decoding="async" width="598" height="535" src="/wp-content/uploads/2018/05/word-image-5091.png" class="wp-image-5615" srcset="/wp-content/uploads/2018/05/word-image-5091.png 598w, /wp-content/uploads/2018/05/word-image-5091-300x268.png 300w" sizes="(max-width: 598px) 100vw, 598px" /></p>
<h2>︴发送文本消息</h2>
<p><img loading="lazy" decoding="async" width="1059" height="531" src="/wp-content/uploads/2018/05/word-image-5092.png" class="wp-image-5616" srcset="/wp-content/uploads/2018/05/word-image-5092.png 1059w, /wp-content/uploads/2018/05/word-image-5092-300x150.png 300w, /wp-content/uploads/2018/05/word-image-5092-768x385.png 768w, /wp-content/uploads/2018/05/word-image-5092-1024x513.png 1024w" sizes="(max-width: 1059px) 100vw, 1059px" /></p>
<p>
  &lt;?php
</p>
<p>
  require &#8216;Wechat.class.php&#8217;;
</p>
<p>
  $Wechat = new Wechat;
</p>
<p>
  $api = &#8220;https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=&#8221;.$Wechat-&gt;getToken();
</p>
<p>
  $postData = &lt;&lt;&lt;STR
</p>
<p>
  {
</p>
<p>
      &#8220;touser&#8221;:&#8221;oPOJgwXPeavENw-hHUdZhjz_P8sk&#8221;,
</p>
<p>
      &#8220;msgtype&#8221;:&#8221;text&#8221;,
</p>
<p>
      &#8220;text&#8221;:
</p>
<p>
      {
</p>
<p>
           &#8220;content&#8221;:&#8221;靠你青蛙&#8221;
</p>
<p>
      }
</p>
<p>
  }
</p>
<p>
  STR;
</p>
<p>
  //脚下留心：OPENID是用户和公众号之间的唯一表示
</p>
<p>
  $data = $Wechat-&gt;httpRequest($api, $postData);
</p>
<p>
  var_dump($data);
</p>
<h2><a id="post-5587-_Toc475823340"></a>︴发送图文消息</h2>
<p><img loading="lazy" decoding="async" width="1044" height="666" src="/wp-content/uploads/2018/05/word-image-5093.png" class="wp-image-5617" srcset="/wp-content/uploads/2018/05/word-image-5093.png 1044w, /wp-content/uploads/2018/05/word-image-5093-300x191.png 300w, /wp-content/uploads/2018/05/word-image-5093-768x490.png 768w, /wp-content/uploads/2018/05/word-image-5093-1024x653.png 1024w" sizes="(max-width: 1044px) 100vw, 1044px" /></p>
<p>
  &lt;?php
</p>
<p>
  require &#8216;Wechat.class.php&#8217;;
</p>
<p>
  $Wechat = new Wechat;
</p>
<p>
  $api = &#8220;https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=&#8221;.$Wechat-&gt;getToken();
</p>
<p>
  // $postData = &lt;&lt;&lt;STR
</p>
<p>
  // {
</p>
<p>
  //     &#8220;touser&#8221;:&#8221;oPOJgwXPeavENw-hHUdZhjz_P8sk&#8221;,
</p>
<p>
  //     &#8220;msgtype&#8221;:&#8221;text&#8221;,
</p>
<p>
  //     &#8220;text&#8221;:
</p>
<p>
  //     {
</p>
<p>
  //          &#8220;content&#8221;:&#8221;靠你青蛙&#8221;
</p>
<p>
  //     }
</p>
<p>
  // }
</p>
<p>
  // STR;
</p>
<p>
  $filePath = dirname(__FILE__) . DIRECTORY_SEPARATOR .&#8217;zhujiao.jpg&#8217;;
</p>
</p>
<p>
  $postData = array(
</p>
<p>
  	&#8220;touser&#8221; =&gt; &#8220;oPOJgwUiVGmM4Vmt3H3YDRBCoJYI&#8221;,
</p>
<p>
      &#8220;msgtype&#8221; =&gt; &#8220;image&#8221;,
</p>
<p>
      &#8220;image&#8221; =&gt; array(
</p>
<p>
      	&#8220;media_id&#8221; =&gt; $this-&gt;getMediaId($filePath)
</p>
<p>
      )
</p>
<p>
  );
</p>
<p>
  //脚下留心：OPENID是用户和公众号之间的唯一表示
</p>
<p>
  $data = $Wechat-&gt;httpRequest($api, json_encode($postData));
</p>
<p>
  var_dump($data);
</p>
<h2>︴产品化</h2>
<p><img loading="lazy" decoding="async" width="1219" height="599" src="/wp-content/uploads/2018/05/word-image-5094.png" class="wp-image-5618" srcset="/wp-content/uploads/2018/05/word-image-5094.png 1219w, /wp-content/uploads/2018/05/word-image-5094-300x147.png 300w, /wp-content/uploads/2018/05/word-image-5094-768x377.png 768w, /wp-content/uploads/2018/05/word-image-5094-1024x503.png 1024w" sizes="(max-width: 1219px) 100vw, 1219px" /><br />
<img loading="lazy" decoding="async" width="977" height="621" src="/wp-content/uploads/2018/05/word-image-5095.png" class="wp-image-5619" srcset="/wp-content/uploads/2018/05/word-image-5095.png 977w, /wp-content/uploads/2018/05/word-image-5095-300x191.png 300w, /wp-content/uploads/2018/05/word-image-5095-768x488.png 768w" sizes="(max-width: 977px) 100vw, 977px" /></p>
<h1><a id="post-5587-_Toc475823341"></a>七、群发消息接口</h1>
<h2><a id="post-5587-_Toc475823342"></a>1、什么是群发消息接口</h2>
<p><img loading="lazy" decoding="async" width="1222" height="602" src="/wp-content/uploads/2018/05/word-image-5096.png" class="wp-image-5620" srcset="/wp-content/uploads/2018/05/word-image-5096.png 1222w, /wp-content/uploads/2018/05/word-image-5096-300x148.png 300w, /wp-content/uploads/2018/05/word-image-5096-768x378.png 768w, /wp-content/uploads/2018/05/word-image-5096-1024x504.png 1024w" sizes="(max-width: 1222px) 100vw, 1222px" /><br />
<img loading="lazy" decoding="async" width="1241" height="548" src="/wp-content/uploads/2018/05/word-image-5097.png" class="wp-image-5621" srcset="/wp-content/uploads/2018/05/word-image-5097.png 1241w, /wp-content/uploads/2018/05/word-image-5097-300x132.png 300w, /wp-content/uploads/2018/05/word-image-5097-768x339.png 768w, /wp-content/uploads/2018/05/word-image-5097-1024x452.png 1024w" sizes="(max-width: 1241px) 100vw, 1241px" /></p>
<h2><a id="post-5587-_Toc475823343"></a>2、接口说明</h2>
<p><img loading="lazy" decoding="async" width="858" height="206" src="/wp-content/uploads/2018/05/word-image-5098.png" class="wp-image-5622" srcset="/wp-content/uploads/2018/05/word-image-5098.png 858w, /wp-content/uploads/2018/05/word-image-5098-300x72.png 300w, /wp-content/uploads/2018/05/word-image-5098-768x184.png 768w" sizes="(max-width: 858px) 100vw, 858px" /><br />
<img loading="lazy" decoding="async" width="522" height="260" src="/wp-content/uploads/2018/05/word-image-5099.png" class="wp-image-5623" srcset="/wp-content/uploads/2018/05/word-image-5099.png 522w, /wp-content/uploads/2018/05/word-image-5099-300x149.png 300w" sizes="(max-width: 522px) 100vw, 522px" /></p>
<h2><a id="post-5587-_Toc475823344"></a>使用php代码实现群发功能</h2>
<p><img loading="lazy" decoding="async" width="1224" height="586" src="/wp-content/uploads/2018/05/word-image-5100.png" class="wp-image-5624" srcset="/wp-content/uploads/2018/05/word-image-5100.png 1224w, /wp-content/uploads/2018/05/word-image-5100-300x144.png 300w, /wp-content/uploads/2018/05/word-image-5100-768x368.png 768w, /wp-content/uploads/2018/05/word-image-5100-1024x490.png 1024w" sizes="(max-width: 1224px) 100vw, 1224px" /></p>
<p>
  &lt;?php
</p>
<p>
  require &#8216;Wechat.class.php&#8217;;
</p>
<p>
  $Wechat = new Wechat;
</p>
<p>
  $api = &#8220;https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=&#8221;.$Wechat-&gt;getToken();
</p>
<p>
  $postData = &#8216;{
</p>
<p>
     &#8220;touser&#8221;:[
</p>
<p>
      &#8220;oPOJgwUiVGmM4Vmt3H3YDRBCoJYI&#8221;,
</p>
<p>
      &#8220;oPOJgwXPeavENw-hHUdZhjz_P8sk&#8221;,
</p>
<p>
      &#8220;oPOJgwbZ6m5mwBKzQZFb2alSLr0s&#8221;
</p>
<p>
     ],
</p>
<p>
      &#8220;msgtype&#8221;: &#8220;text&#8221;,
</p>
<p>
      &#8220;text&#8221;: { &#8220;content&#8221;: &#8220;美国大片：下载.com&#8221;}
</p>
<p>
  }&#8217;;
</p>
<p>
  //脚下留心：OPENID是用户和公众号之间的唯一表示
</p>
<p>
  $data = $Wechat-&gt;httpRequest($api, json_encode($postData));
</p>
<p>
  var_dump($data);</p>
]]></content:encoded>
					
					<wfw:commentRss>/%e7%a7%bb%e5%8a%a8%e7%ab%af%e5%bc%80%e5%8f%91/5587.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="http://47.91.211.137/zxk/music.mp3" length="0" type="audio/mpeg" />

			</item>
		<item>
		<title>微信公众号（三）带参数的二维码接口、LBS 接口、语音识别、图灵机器人、网页授权接口（Oauth2.0）、微信 JSSDK 接口、扫码抽奖、授权登录</title>
		<link>/%e7%a7%bb%e5%8a%a8%e7%ab%af%e5%bc%80%e5%8f%91/5516.html</link>
					<comments>/%e7%a7%bb%e5%8a%a8%e7%ab%af%e5%bc%80%e5%8f%91/5516.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 15:10:26 +0000</pubDate>
				<category><![CDATA[微信公众号]]></category>
		<category><![CDATA[移动端开发]]></category>
		<category><![CDATA[LBS 接口]]></category>
		<category><![CDATA[图灵机器人]]></category>
		<category><![CDATA[带参数的二维码接口]]></category>
		<category><![CDATA[微信 JSSDK 接口]]></category>
		<category><![CDATA[扫码抽奖]]></category>
		<category><![CDATA[授权登录]]></category>
		<category><![CDATA[网页授权接口（Oauth2.0）]]></category>
		<category><![CDATA[语音识别]]></category>
		<guid isPermaLink="false">/?p=5516</guid>

					<description><![CDATA[移动端开发（微信开发3） ︴微信大总结 wx.php接口 &#60;?php require &#8216;./ [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>移动端开发（微信开发3） <a id="post-5516-_Toc475823345"></a></h1>
<h1>︴微信大总结</h1>
<h2>wx.php接口</h2>
<p>&lt;?php</p>
<p>require &#8216;./Wechat.class.php&#8217;;</p>
<p>/**</p>
<p>* wechat php test</p>
<p>*/</p>
<p>//define your token</p>
<p>define(&#8220;TOKEN&#8221;, &#8220;itcast&#8221;);</p>
<p>class wechatCallbackapiTest extends Wechat</p>
<p>{</p>
<p>public function valid()</p>
<p>{</p>
<p>$echoStr = $_GET[&#8220;echostr&#8221;];</p>
<p>//valid signature , option</p>
<p>if($this-&gt;checkSignature()){</p>
<p>echo $echoStr;</p>
<p>exit;</p>
<p>}</p>
<p>}</p>
<p>public function responseMsg()</p>
<p>{</p>
<p>//get post data, May be due to the different environments</p>
<p>$postStr = $GLOBALS[&#8220;HTTP_RAW_POST_DATA&#8221;];</p>
<p>//extract post data</p>
<p>if (!empty($postStr)){</p>
<p>/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,</p>
<p>the best way is to check the validity of xml by yourself */</p>
<p>libxml_disable_entity_loader(true);</p>
<p>$postObj = simplexml_load_string($postStr, &#8216;SimpleXMLElement&#8217;, LIBXML_NOCDATA);</p>
<p>$fromUsername = $postObj-&gt;FromUserName;</p>
<p>$toUsername = $postObj-&gt;ToUserName;</p>
<p>$keyword = trim($postObj-&gt;Content);</p>
<p>$type = trim($postObj-&gt;MsgType);</p>
<p>$time = time();</p>
<p>switch ($type) {</p>
<p>case &#8216;text&#8217;:</p>
<p>if ($keyword == &#8216;来图片&#8217;) {</p>
<p>$filePath = dirname(__FILE__) . DIRECTORY_SEPARATOR .&#8217;zhujiao.jpg&#8217;;</p>
<p>$this-&gt;sendImage($fromUsername, $toUsername, $this-&gt;getMediaId($filePath));</p>
<p>} else {</p>
<p>$this-&gt;sendText($fromUsername, $toUsername, &#8216;陈总&#8217;);</p>
<p>}</p>
<p>break;</p>
<p>default:</p>
<p>$this-&gt;sendText($fromUsername, $toUsername, &#8216;兄弟，不在服务器&#8217;);</p>
<p># code&#8230;</p>
<p>break;</p>
<p>}</p>
<p>}else {</p>
<p>echo &#8220;&#8221;;</p>
<p>exit;</p>
<p>}</p>
<p>}</p>
<p>private function checkSignature()</p>
<p>{</p>
<p>// you must define TOKEN by yourself</p>
<p>if (!defined(&#8220;TOKEN&#8221;)) {</p>
<p>throw new Exception(&#8216;TOKEN is not defined!&#8217;);</p>
<p>}</p>
<p>$signature = $_GET[&#8220;signature&#8221;];</p>
<p>$timestamp = $_GET[&#8220;timestamp&#8221;];</p>
<p>$nonce = $_GET[&#8220;nonce&#8221;];</p>
<p>$token = TOKEN;</p>
<p>$tmpArr = array($token, $timestamp, $nonce);</p>
<p>// use SORT_STRING rule</p>
<p>sort($tmpArr, SORT_STRING);</p>
<p>$tmpStr = implode( $tmpArr );</p>
<p>$tmpStr = sha1( $tmpStr );</p>
<p>if( $tmpStr == $signature ){</p>
<p>return true;</p>
<p>}else{</p>
<p>return false;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>$wechatObj = new wechatCallbackapiTest();</p>
<p>//脚下留心：</p>
<p>//如果通信不成功</p>
<p>//解决思路：</p>
<p>//1.检查URL是否能正常访问</p>
<p>//2.检查调用的是否是valid方法</p>
<p>//$wechatObj-&gt;valid();</p>
<p>$wechatObj-&gt;responseMsg();</p>
<h2>Wechat.class.php</h2>
<p>&lt;?php</p>
<p>define(&#8216;APPID&#8217;, &#8216;wx56e3e3d75414b3d0&#8217;);</p>
<p>define(&#8216;APPSECRET&#8217;, &#8216;f8ec8178c6dda48d1cb25c07304eff44&#8217;);</p>
<p>class Wechat</p>
<p>{</p>
<p>/**</p>
<p>* 获取access_token</p>
<p>* @see https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=mp1421140183</p>
<p>* @return string</p>
<p>*/</p>
<p>public function getToken()</p>
<p>{</p>
<p>$apiData = array(</p>
<p>&#8216;appid&#8217; =&gt; APPID,</p>
<p>&#8216;secret&#8217; =&gt; APPSECRET</p>
<p>);</p>
<p>$api = &#8216;https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&amp;&#8217;.http_build_query($apiData);</p>
<p>$data = $this-&gt;httpRequest($api);</p>
<p>return $data[&#8216;access_token&#8217;];</p>
<p>}</p>
<p>/**</p>
<p>* 上传媒体文件</p>
<p>* @see https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=mp1444738726</p>
<p>* @return string</p>
<p>* 注：</p>
<p>* 图片（image）: 2M，支持PNG\JPEG\JPG\GIF格式</p>
<p>* 语音（voice）：2M，播放长度不超过60s，支持AMR\MP3格式</p>
<p>* 视频（video）：10MB，支持MP4格式</p>
<p>* 缩略图（thumb）：64KB，支持JPG格式</p>
<p>*/</p>
<p>public function getMediaId($filePath)</p>
<p>{</p>
<p>//1.定义接口</p>
<p>$apiData = array(</p>
<p>&#8216;access_token&#8217; =&gt; $this-&gt;getToken(),</p>
<p>&#8216;type&#8217;=&gt;&#8217;image&#8217;</p>
<p>);</p>
<p>$api = &#8216;https://api.weixin.qq.com/cgi-bin/media/upload?&#8217;.http_build_query($apiData);</p>
<p>//2.发送请求</p>
<p>//$filePath = dirname(__FILE__) . DIRECTORY_SEPARATOR .&#8217;zhujiao.jpg&#8217;; //脚下留心：window不区分\/但linux只支持 /</p>
<p>if(version_compare(PHP_VERSION,&#8217;5.5.0&#8242;,'&lt;&#8216;)) {</p>
<p>//脚下留心：PHP版本低于5.5</p>
<p>$postData = array(&#8216;media&#8217; =&gt; &#8216;@&#8217;.$filePath);</p>
<p>} else {</p>
<p>//脚下留心：PHP版本高于5.5</p>
<p>$postData = array(&#8216;media&#8217; =&gt; new Curlfile($filePath));</p>
<p>}</p>
<p>$data = $this-&gt;httpRequest($api, $postData);</p>
<p>return $data[&#8216;media_id&#8217;];</p>
<p>// var_dump($data);</p>
<p>}</p>
<p>/**</p>
<p>* PHP发送请求</p>
<p>* @param string $api 接口地址</p>
<p>* @param array $postData POST请求数据</p>
<p>*/</p>
<p>public function httpRequest($api, $postData = array())</p>
<p>{</p>
<p>//1.初始化</p>
<p>$ch = curl_init();</p>
<p>//2.配置</p>
<p>//2.1设置请求地址</p>
<p>curl_setopt($ch, CURLOPT_URL, $api);</p>
<p>//2.2数据流不直接输出</p>
<p>curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);</p>
<p>//2.3POST请求</p>
<p>if ($postData) {</p>
<p>curl_setopt($ch, CURLOPT_POST, true);</p>
<p>curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);</p>
<p>}</p>
<p>//curl注意事项，如果发送的请求是https，必须要禁止服务器端校检SSL证书</p>
<p>curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);</p>
<p>curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);</p>
<p>//3.发送请求</p>
<p>$data = curl_exec($ch);</p>
<p>//4.释放资源</p>
<p>curl_close($ch);</p>
<p>return json_decode($data, true);</p>
<p>}</p>
<p>/**</p>
<p>* 响应音乐消息</p>
<p>* @param string $fromUsername 接受者</p>
<p>* @param string $toUsername 发送者</p>
<p>* @param string $title 标题</p>
<p>* @param string $desc 描述</p>
<p>* @param string $musicUrl 音乐互联网地址（.mp3）</p>
<p>* @param string $ThumbMediaId 封面</p>
<p>* @param return</p>
<p>*/</p>
<p>protected function sendMusic($fromUsername, $toUsername, $title=&#8217;摇一摇歌声&#8217;, $desc=&#8217;甜美型，那是骗你的&#8217;, $musicUrl=&#8217;http://47.91.211.137/zxk/music.mp3&#8242;, $ThumbMediaId=&#8217;t96tqk6yOa_patBRMJNme_zrt3mlbKWCSZtXy5LMuSV8CZF58jXG5pRP67Xnciyb&#8217;) {</p>
<p>$tpl = &#8216;&lt;xml&gt;</p>
<p>&lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;</p>
<p>&lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;</p>
<p>&lt;CreateTime&gt;%s&lt;/CreateTime&gt;</p>
<p>&lt;MsgType&gt;&lt;![CDATA[music]]&gt;&lt;/MsgType&gt;</p>
<p>&lt;Music&gt;</p>
<p>&lt;Title&gt;&lt;![CDATA[%s]]&gt;&lt;/Title&gt;</p>
<p>&lt;Description&gt;&lt;![CDATA[%s]]&gt;&lt;/Description&gt;</p>
<p>&lt;MusicUrl&gt;&lt;![CDATA[%s]]&gt;&lt;/MusicUrl&gt;</p>
<p>&lt;HQMusicUrl&gt;&lt;![CDATA[%s]]&gt;&lt;/HQMusicUrl&gt;</p>
<p>&lt;ThumbMediaId&gt;&lt;![CDATA[%s]]&gt;&lt;/ThumbMediaId&gt;</p>
<p>&lt;/Music&gt;</p>
<p>&lt;/xml&gt;&#8217;;</p>
<p>echo sprintf($tpl, $fromUsername, $toUsername, time(), $title, $desc, $musicUrl, $musicUrl, $ThumbMediaId);</p>
<p>die;</p>
<p>}</p>
<p>/**</p>
<p>* 响应文本消息</p>
<p>* @param string $fromUsername 接受者</p>
<p>* @param string $toUsername 发送者</p>
<p>* @param string $content 发送的内容</p>
<p>* @param return</p>
<p>*/</p>
<p>protected function sendText($fromUsername, $toUsername, $content) {</p>
<p>$textTpl = &#8216;&lt;xml&gt;</p>
<p>&lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;</p>
<p>&lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;</p>
<p>&lt;CreateTime&gt;%s&lt;/CreateTime&gt;</p>
<p>&lt;MsgType&gt;&lt;![CDATA[text]]&gt;&lt;/MsgType&gt;</p>
<p>&lt;Content&gt;&lt;![CDATA[%s]]&gt;&lt;/Content&gt;</p>
<p>&lt;/xml&gt;&#8217;;</p>
<p>echo sprintf($textTpl, $fromUsername, $toUsername, time(), $content);</p>
<p>die;</p>
<p>}</p>
<p>/**</p>
<p>* 响应图片消息</p>
<p>* @param string $fromUsername 接受者</p>
<p>* @param string $toUsername 发送者</p>
<p>* @param string $MediaId 媒体ID（https://mp.weixin.qq.com/debug 先回去access_token 然后获取MediaId）</p>
<p>* @param return</p>
<p>*/</p>
<p>protected function sendImage($fromUsername, $toUsername, $MediaId = &#8216;G3P8hP2UXqozqUrOpt6rkfC2LEykkeD4OGTPBUyjVFgrGy0-C1yOR3Bvg0vSalic&#8217;)</p>
<p>{</p>
<p>//响应图片的xml报文</p>
<p>$tpl = &#8216;&lt;xml&gt;</p>
<p>&lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;</p>
<p>&lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;</p>
<p>&lt;CreateTime&gt;%s&lt;/CreateTime&gt;</p>
<p>&lt;MsgType&gt;&lt;![CDATA[image]]&gt;&lt;/MsgType&gt;</p>
<p>&lt;Image&gt;&lt;MediaId&gt;&lt;![CDATA[%s]]&gt;&lt;/MediaId&gt;&lt;/Image&gt;</p>
<p>&lt;/xml&gt;&#8217;;</p>
<p>//脚下留心：MediaId是需要通过接口获取的，明天详细讲解，今天通过工具获取</p>
<p>//https://mp.weixin.qq.com/debug 查看MediaId（G3P8hP2UXqozqUrOpt6rkfC2LEykkeD4OGTPBUyjVFgrGy0-C1yOR3Bvg0vSalic）</p>
<p>echo sprintf($tpl, $fromUsername, $toUsername, time(), $MediaId);</p>
<p>die;</p>
<p>}</p>
<p>/**</p>
<p>* 响应视频消息</p>
<p>* @param string $fromUsername 接受者</p>
<p>* @param string $toUsername 发送者</p>
<p>* @param string $MediaId 媒体ID（https://mp.weixin.qq.com/debug 先回去access_token 然后获取MediaId）</p>
<p>* @param return</p>
<p>*/</p>
<p>protected function sendVideo($fromUsername, $toUsername, $MediaId = &#8216;8pudm18nSyQ5vBO8fCKQ_ucHm9BKTUtTDjfoLNYfoev_B1JY-hJ-E1mk5BncLCtm&#8217;)</p>
<p>{</p>
<p>$tpl = &#8216;&lt;xml&gt;</p>
<p>&lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;</p>
<p>&lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;</p>
<p>&lt;CreateTime&gt;%s&lt;/CreateTime&gt;</p>
<p>&lt;MsgType&gt;&lt;![CDATA</p>

<p>]&gt;&lt;/MsgType&gt;</p>
<p>&lt;Video&gt;</p>
<p>&lt;MediaId&gt;&lt;![CDATA[%s]]&gt;&lt;/MediaId&gt;</p>
<p>&lt;Title&gt;&lt;![CDATA[%s]]&gt;&lt;/Title&gt;</p>
<p>&lt;Description&gt;&lt;![CDATA[%s]]&gt;&lt;/Description&gt;</p>
<p>&lt;/Video&gt;</p>
<p>&lt;/xml&gt;&#8217;;</p>
<p>echo sprintf($tpl, $fromUsername, $toUsername, time(), $MediaId, &#8216;陈恒那些事&#8217;, &#8216;大战三百回合&#8217;);</p>
<p>}</p>
<p>}</p>
<h1><a id="post-5516-_Toc485411508"></a>一、微信带参数二维码接口</h1>
<h2><a id="post-5516-_Toc485411509"></a><a id="post-5516-_Toc475823346"></a>1、什么是微信二维码</h2>
<p><img loading="lazy" decoding="async" width="1153" height="544" class="wp-image-5517" src="/wp-content/uploads/2018/05/word-image-4997.png" srcset="/wp-content/uploads/2018/05/word-image-4997.png 1153w, /wp-content/uploads/2018/05/word-image-4997-300x142.png 300w, /wp-content/uploads/2018/05/word-image-4997-768x362.png 768w, /wp-content/uploads/2018/05/word-image-4997-1024x483.png 1024w" sizes="(max-width: 1153px) 100vw, 1153px" /></p>
<h2><a id="post-5516-_Toc485411510"></a><a id="post-5516-_Toc475823347"></a>使用php代码获取微信二维码</h2>
<h3>接口说明</h3>
<p><img loading="lazy" decoding="async" width="885" height="395" class="wp-image-5518" src="/wp-content/uploads/2018/05/word-image-4998.png" srcset="/wp-content/uploads/2018/05/word-image-4998.png 885w, /wp-content/uploads/2018/05/word-image-4998-300x134.png 300w, /wp-content/uploads/2018/05/word-image-4998-768x343.png 768w" sizes="(max-width: 885px) 100vw, 885px" /><br />
<img loading="lazy" decoding="async" width="804" height="446" class="wp-image-5519" src="/wp-content/uploads/2018/05/word-image-4999.png" srcset="/wp-content/uploads/2018/05/word-image-4999.png 804w, /wp-content/uploads/2018/05/word-image-4999-300x166.png 300w, /wp-content/uploads/2018/05/word-image-4999-768x426.png 768w" sizes="(max-width: 804px) 100vw, 804px" /><br />
<img loading="lazy" decoding="async" width="781" height="360" class="wp-image-5520" src="/wp-content/uploads/2018/05/word-image-5000.png" srcset="/wp-content/uploads/2018/05/word-image-5000.png 781w, /wp-content/uploads/2018/05/word-image-5000-300x138.png 300w, /wp-content/uploads/2018/05/word-image-5000-768x354.png 768w" sizes="(max-width: 781px) 100vw, 781px" /></p>
<h3>2）代码</h3>
<ul>
<li>需求：生成带参数的二维码，用户扫码后出现下述提醒</li>
</ul>
<p><img loading="lazy" decoding="async" width="381" height="201" class="wp-image-5524" src="/wp-content/uploads/2018/05/word-image-5002.png" srcset="/wp-content/uploads/2018/05/word-image-5002.png 381w, /wp-content/uploads/2018/05/word-image-5002-300x158.png 300w" sizes="(max-width: 381px) 100vw, 381px" /></p>
<ul>
<li>步骤1；生成带参数的二维码</li>
</ul>
<p><img loading="lazy" decoding="async" width="1034" height="503" class="wp-image-5525" src="/wp-content/uploads/2018/05/word-image-5003.png" srcset="/wp-content/uploads/2018/05/word-image-5003.png 1034w, /wp-content/uploads/2018/05/word-image-5003-300x146.png 300w, /wp-content/uploads/2018/05/word-image-5003-768x374.png 768w, /wp-content/uploads/2018/05/word-image-5003-1024x498.png 1024w" sizes="(max-width: 1034px) 100vw, 1034px" /></p>
<p>&lt;?php</p>
<p>require &#8216;Wechat.class.php&#8217;;</p>
<p>$Wechat = new Wechat;</p>
<p>//步骤1：生成ticket</p>
<p>$api = &#8220;https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=&#8221;.$Wechat-&gt;getToken();</p>
<p>$postData = &#8216;{&#8220;expire_seconds&#8221;: 604800, &#8220;action_name&#8221;: &#8220;QR_STR_SCENE&#8221;, &#8220;action_info&#8221;: {&#8220;scene&#8221;: {&#8220;scene_str&#8221;: &#8220;php12&#8221;}}}&#8217;;</p>
<p>//脚下留心：OPENID是用户和公众号之间的唯一表示</p>
<p>$data = $Wechat-&gt;httpRequest($api, $postData);</p>
<p>// var_dump($data);</p>
<p>//步骤2：生成二维码</p>
<p>$api = &#8220;https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=&#8221;.$data[&#8216;ticket&#8217;];</p>
<p>//方法1</p>
<p>//header(&#8220;location: $api&#8221;);</p>
<p>//方法2</p>
<p>$imageInfo = file_get_contents($api);</p>
<p>file_put_contents(&#8216;./erweima.jpg&#8217;, $imageInfo);</p>
<ul>
<li>步骤2；修改wx.php接口，当用户扫码时候提示需求信息</li>
</ul>
<p><img loading="lazy" decoding="async" width="1080" height="665" class="wp-image-5526" src="/wp-content/uploads/2018/05/word-image-5004.png" srcset="/wp-content/uploads/2018/05/word-image-5004.png 1080w, /wp-content/uploads/2018/05/word-image-5004-300x185.png 300w, /wp-content/uploads/2018/05/word-image-5004-768x473.png 768w, /wp-content/uploads/2018/05/word-image-5004-1024x631.png 1024w" sizes="(max-width: 1080px) 100vw, 1080px" /></p>
<p>//推荐采用冗余策略，将支付宝支付，或者微信通知存放到mongodb中</p>
<p>//file_put_contents(&#8216;./getxmldata.text&#8217;, $postStr);</p>
<p>switch ($type) {</p>
<p>case &#8216;event&#8217;:</p>
<p>if ($postObj-&gt;Event == &#8216;subscribe&#8217;)</p>
<p>{</p>
<p>if (isset($postObj-&gt;EventKey) &amp;&amp; $postObj-&gt;EventKey != &#8221;) {</p>
<p>//新用户扫码</p>
<p>$this-&gt;sendText($fromUsername, $toUsername, &#8216;新用户：&#8217;.$postObj-&gt;EventKey);</p>
<p>} else {</p>
<p>//关注</p>
<p>$this-&gt;sendText($fromUsername, $toUsername, &#8216;感谢老铁关注，双击666&#8217;);</p>
<p>}</p>
<p>} else if ($postObj-&gt;Event == &#8216;SCAN&#8217; &amp;&amp; isset($postObj-&gt;EventKey)) {</p>
<p>//老用户扫码</p>
<p>$this-&gt;sendText($fromUsername, $toUsername, &#8216;老用户：&#8217;.$postObj-&gt;EventKey);</p>
<p>} else if ($postObj-&gt;Event == &#8216;unsubscribe&#8217;) {</p>
<p>//取关</p>
<p>//业务逻辑去数据库，给用户mark已经取消关注，后期网站判断用户是否关注，如果没有</p>
<p>//就在页面显示一个弹框让他关注</p>
<p>$this-&gt;sendText($fromUsername, $toUsername, &#8216;妈的，要你何用&#8217;);</p>
<p>} else {</p>
<p>$this-&gt;sendText($fromUsername, $toUsername, &#8216;弄啥嘞！&#8217;);</p>
<p>}</p>
<p>break;</p>
<p>case &#8216;text&#8217;:</p>
<p>if ($keyword == &#8216;来图片&#8217;) {</p>
<p>$filePath = dirname(__FILE__) . DIRECTORY_SEPARATOR .&#8217;zhujiao.jpg&#8217;;</p>
<p>$this-&gt;sendImage($fromUsername, $toUsername, $this-&gt;getMediaId($filePath));</p>
<p>} else {</p>
<p>$this-&gt;sendText($fromUsername, $toUsername, &#8216;陈总&#8217;);</p>
<p>}</p>
<p>break;</p>
<p>default:</p>
<p>$this-&gt;sendText($fromUsername, $toUsername, &#8216;兄弟，不在服务器&#8217;);</p>
<p># code&#8230;</p>
<p>break;</p>
<p>}</p>
<h2>︴应用场景</h2>
<p>问：首先明确搞活动吸粉使用微信默认提供的二维码是否而已？</p>
<p>答：明确可以，但是有效次没法统计门店吸粉量。</p>
<p>解决：通过程序生成不同参数的二维码</p>
<p>应用场景：门店吸粉统计二维码</p>
<h1><a id="post-5516-_Toc475823348"></a>二、微信LBS接口</h1>
<h2><a id="post-5516-_Toc475823349"></a>1、什么是LBS</h2>
<p>就是地理位置服务（获取你的位置，经度纬度）</p>
<h2><a id="post-5516-_Toc475823350"></a>2、接口说明（微信获取用户地理位置信息，经度和纬度）</h2>
<p><img loading="lazy" decoding="async" width="229" height="118" class="wp-image-5527" src="/wp-content/uploads/2018/05/word-image-5005.png" /><br />
<img loading="lazy" decoding="async" width="952" height="537" class="wp-image-5528" src="/wp-content/uploads/2018/05/word-image-5006.png" srcset="/wp-content/uploads/2018/05/word-image-5006.png 952w, /wp-content/uploads/2018/05/word-image-5006-300x169.png 300w, /wp-content/uploads/2018/05/word-image-5006-768x433.png 768w" sizes="(max-width: 952px) 100vw, 952px" /></p>
<h2><a id="post-5516-_Toc475823352"></a>4、使用php代码获取</h2>
<h3>1）需求</h3>
<p><img loading="lazy" decoding="async" width="501" height="230" class="wp-image-5529" src="/wp-content/uploads/2018/05/word-image-5007.png" srcset="/wp-content/uploads/2018/05/word-image-5007.png 501w, /wp-content/uploads/2018/05/word-image-5007-300x138.png 300w" sizes="(max-width: 501px) 100vw, 501px" /></p>
<p>说明：用户发送位置坐标</p>
<p>提示：您发送的是地理位置消息，经度：xxx，纬度：xxx</p>
<h3>2）代码</h3>
<p><img loading="lazy" decoding="async" width="1128" height="425" class="wp-image-5530" src="/wp-content/uploads/2018/05/word-image-5008.png" srcset="/wp-content/uploads/2018/05/word-image-5008.png 1128w, /wp-content/uploads/2018/05/word-image-5008-300x113.png 300w, /wp-content/uploads/2018/05/word-image-5008-768x289.png 768w, /wp-content/uploads/2018/05/word-image-5008-1024x386.png 1024w" sizes="(max-width: 1128px) 100vw, 1128px" /></p>
<p>case &#8216;location&#8217;:</p>
<p>$tips = &#8216;您发送的是地理位置消息，经度：&#8217;.$postObj-&gt;Location_Y.&#8217;，纬度：xxx&#8217;.$postObj-&gt;Location_X;</p>
<p>$this-&gt;sendText($fromUsername, $toUsername, $tips);</p>
<p>break;</p>
<h2><a id="post-5516-_Toc475823353"></a>︴LBS案例：周边检索功能</h2>
<h3>步骤1：注册账号（登录）-&gt; 创建应用 -&gt; 获取key（b94b446f4ecad8b4f0e6cf758bacf915）</h3>
<p><a href="/goto/dean" rel="nofollow">http://lbs.amap.com/dev/key/app</a></p>
<p><img loading="lazy" decoding="async" width="576" height="277" class="wp-image-5531" src="/wp-content/uploads/2018/05/word-image-5009.png" srcset="/wp-content/uploads/2018/05/word-image-5009.png 576w, /wp-content/uploads/2018/05/word-image-5009-300x144.png 300w" sizes="(max-width: 576px) 100vw, 576px" /><br />
<img loading="lazy" decoding="async" width="689" height="634" class="wp-image-5532" src="/wp-content/uploads/2018/05/word-image-5010.png" srcset="/wp-content/uploads/2018/05/word-image-5010.png 689w, /wp-content/uploads/2018/05/word-image-5010-300x276.png 300w" sizes="(max-width: 689px) 100vw, 689px" /><br />
<img loading="lazy" decoding="async" width="1334" height="366" class="wp-image-5533" src="/wp-content/uploads/2018/05/word-image-5011.png" srcset="/wp-content/uploads/2018/05/word-image-5011.png 1334w, /wp-content/uploads/2018/05/word-image-5011-300x82.png 300w, /wp-content/uploads/2018/05/word-image-5011-768x211.png 768w, /wp-content/uploads/2018/05/word-image-5011-1024x281.png 1024w" sizes="(max-width: 1334px) 100vw, 1334px" /></p>
<h3>步骤2：获取周边检索功能接口</h3>
<p>高德地图开发平台 <a href="/goto/ayxg" rel="nofollow">http://lbs.amap.com/</a></p>
<p><img loading="lazy" decoding="async" width="898" height="309" class="wp-image-5534" src="/wp-content/uploads/2018/05/word-image-5012.png" srcset="/wp-content/uploads/2018/05/word-image-5012.png 898w, /wp-content/uploads/2018/05/word-image-5012-300x103.png 300w, /wp-content/uploads/2018/05/word-image-5012-768x264.png 768w" sizes="(max-width: 898px) 100vw, 898px" /><br />
<img loading="lazy" decoding="async" width="1194" height="419" class="wp-image-5535" src="/wp-content/uploads/2018/05/word-image-5013.png" srcset="/wp-content/uploads/2018/05/word-image-5013.png 1194w, /wp-content/uploads/2018/05/word-image-5013-300x105.png 300w, /wp-content/uploads/2018/05/word-image-5013-768x270.png 768w, /wp-content/uploads/2018/05/word-image-5013-1024x359.png 1024w" sizes="(max-width: 1194px) 100vw, 1194px" /><br />
<img loading="lazy" decoding="async" width="944" height="569" class="wp-image-5536" src="/wp-content/uploads/2018/05/word-image-5014.png" srcset="/wp-content/uploads/2018/05/word-image-5014.png 944w, /wp-content/uploads/2018/05/word-image-5014-300x181.png 300w, /wp-content/uploads/2018/05/word-image-5014-768x463.png 768w" sizes="(max-width: 944px) 100vw, 944px" /></p>
<h3>步骤3：PHP获取周边数据</h3>
<p>接口：</p>
<p><a href="/goto/fbj4" rel="nofollow">http://restapi.amap.com/v3/place/around?key=您的key&amp;location=121.611812,31.034795&amp;keywords=传智播客&amp;types=&amp;radius=10000&amp;offset=20&amp;page=1&amp;extensions=all</a></p>
<p><img loading="lazy" decoding="async" width="1112" height="522" class="wp-image-5537" src="/wp-content/uploads/2018/05/word-image-5015.png" srcset="/wp-content/uploads/2018/05/word-image-5015.png 1112w, /wp-content/uploads/2018/05/word-image-5015-300x141.png 300w, /wp-content/uploads/2018/05/word-image-5015-768x361.png 768w, /wp-content/uploads/2018/05/word-image-5015-1024x481.png 1024w" sizes="(max-width: 1112px) 100vw, 1112px" /></p>
<p>&lt;?php</p>
<p>//1.定义接口</p>
<p>$apiData = array(</p>
<p>&#8216;key&#8217; =&gt; &#8216;b94b446f4ecad8b4f0e6cf758bacf915&#8217;,</p>
<p>&#8216;location&#8217; =&gt; &#8216;121.611812,31.034795&#8217;,</p>
<p>&#8216;keywords&#8217; =&gt; &#8216;传智播客&#8217;,</p>
<p>&#8216;types&#8217; =&gt; &#8221;,</p>
<p>&#8216;radius&#8217; =&gt; &#8216;10000&#8217;,</p>
<p>&#8216;offset&#8217; =&gt; &#8217;20&#8217;,</p>
<p>&#8216;page&#8217; =&gt; &#8216;1&#8217;,</p>
<p>&#8216;extensions&#8217; =&gt; &#8216;all&#8217;</p>
<p>);</p>
<p>$api = &#8216;http://restapi.amap.com/v3/place/around?&#8217;.http_build_query($apiData);</p>
<p>//2.请求</p>
<p>$data = file_get_contents($api);</p>
<p>$data = json_decode($data, true);</p>
<p>echo &#8216;&lt;pre&gt;&#8217;;</p>
<p>print_r($data);</p>
<h2>︴应用场景</h2>
<p>场景1：用户发送地理位置 -&gt; 直接文字响应周边商家门店</p>
<p>场景2：用户发送地理位置 -&gt; 响应网址/或图文消息，点击网址看到下图效果</p>
<p><img loading="lazy" decoding="async" width="694" height="586" class="wp-image-5538" src="/wp-content/uploads/2018/05/word-image-5016.png" srcset="/wp-content/uploads/2018/05/word-image-5016.png 694w, /wp-content/uploads/2018/05/word-image-5016-300x253.png 300w" sizes="(max-width: 694px) 100vw, 694px" /></p>
<p>场景3：用户发送地理位置 -&gt; 响应网址，点击网址看到下图效果（可以搜索附近关键词）</p>
<p><img loading="lazy" decoding="async" width="313" height="395" class="wp-image-5539" src="/wp-content/uploads/2018/05/word-image-5017.png" srcset="/wp-content/uploads/2018/05/word-image-5017.png 313w, /wp-content/uploads/2018/05/word-image-5017-238x300.png 238w" sizes="(max-width: 313px) 100vw, 313px" /></p>
<h1><a id="post-5516-_Toc475985051"></a>三、微信的语音识别接口</h1>
<h2><a id="post-5516-_Toc475985052"></a>1、什么是语音识别</h2>
<p>就是发送语音转化为文字</p>
<h2>接口说明</h2>
<p><img loading="lazy" decoding="async" width="467" height="212" class="wp-image-5540" src="/wp-content/uploads/2018/05/word-image-5018.png" srcset="/wp-content/uploads/2018/05/word-image-5018.png 467w, /wp-content/uploads/2018/05/word-image-5018-300x136.png 300w" sizes="(max-width: 467px) 100vw, 467px" /><br />
<img loading="lazy" decoding="async" width="948" height="592" class="wp-image-5541" src="/wp-content/uploads/2018/05/word-image-5019.png" srcset="/wp-content/uploads/2018/05/word-image-5019.png 948w, /wp-content/uploads/2018/05/word-image-5019-300x187.png 300w, /wp-content/uploads/2018/05/word-image-5019-768x480.png 768w" sizes="(max-width: 948px) 100vw, 948px" /><br />
<img loading="lazy" decoding="async" width="760" height="377" class="wp-image-5542" src="/wp-content/uploads/2018/05/word-image-5020.png" srcset="/wp-content/uploads/2018/05/word-image-5020.png 760w, /wp-content/uploads/2018/05/word-image-5020-300x149.png 300w" sizes="(max-width: 760px) 100vw, 760px" /></p>
<h2><a id="post-5516-_Toc475985054"></a>使用php代码获取微信的语音识别结果</h2>
<p>步骤1：开启语音识别功能（注：因为缓存开启前已经关注需要取消关注）</p>
<p><img loading="lazy" decoding="async" width="334" height="353" class="wp-image-5543" src="/wp-content/uploads/2018/05/word-image-5021.png" srcset="/wp-content/uploads/2018/05/word-image-5021.png 334w, /wp-content/uploads/2018/05/word-image-5021-284x300.png 284w" sizes="(max-width: 334px) 100vw, 334px" /><br />
<img loading="lazy" decoding="async" width="941" height="473" class="wp-image-5544" src="/wp-content/uploads/2018/05/word-image-5022.png" srcset="/wp-content/uploads/2018/05/word-image-5022.png 941w, /wp-content/uploads/2018/05/word-image-5022-300x151.png 300w, /wp-content/uploads/2018/05/word-image-5022-768x386.png 768w" sizes="(max-width: 941px) 100vw, 941px" /></p>
<p>步骤2：wx.php接口检测是语音，响应文字消息</p>
<p><img loading="lazy" decoding="async" width="800" height="207" class="wp-image-5545" src="/wp-content/uploads/2018/05/word-image-5023.png" srcset="/wp-content/uploads/2018/05/word-image-5023.png 800w, /wp-content/uploads/2018/05/word-image-5023-300x78.png 300w, /wp-content/uploads/2018/05/word-image-5023-768x199.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>//脚下留心：只有开启语音识别才有Recognition参数</p>
<p>$this-&gt;sendText($fromUsername, $toUsername, $postObj-&gt;Recognition);</p>
<p>break;</p>
<h1><a id="post-5516-_Toc475985055"></a>四、图灵机器人接口（第三方平台）</h1>
<h2><a id="post-5516-_Toc475985056"></a>1、什么是图灵机器人</h2>
<p>就是智能聊天机器人（定义一个php接口传递关键词他会自动识别响应合理的内容）</p>
<p>以前使用的叫小黄鸡</p>
<h2><a id="post-5516-_Toc475985057"></a>图灵机器人接口</h2>
<h3>1）步骤1：注册/登录获取APPKEY（105042050cc245fd9ec31f21f5da6952）</h3>
<p><a href="/goto/xndx" rel="nofollow">http://www.tuling123.com/</a></p>
<p><img loading="lazy" decoding="async" width="789" height="379" class="wp-image-5546" src="/wp-content/uploads/2018/05/word-image-5024.png" srcset="/wp-content/uploads/2018/05/word-image-5024.png 789w, /wp-content/uploads/2018/05/word-image-5024-300x144.png 300w, /wp-content/uploads/2018/05/word-image-5024-768x369.png 768w" sizes="(max-width: 789px) 100vw, 789px" /><br />
<img loading="lazy" decoding="async" width="1246" height="617" class="wp-image-5547" src="/wp-content/uploads/2018/05/word-image-5025.png" srcset="/wp-content/uploads/2018/05/word-image-5025.png 1246w, /wp-content/uploads/2018/05/word-image-5025-300x149.png 300w, /wp-content/uploads/2018/05/word-image-5025-768x380.png 768w, /wp-content/uploads/2018/05/word-image-5025-1024x507.png 1024w" sizes="(max-width: 1246px) 100vw, 1246px" /><br />
<img loading="lazy" decoding="async" width="711" height="460" class="wp-image-5548" src="/wp-content/uploads/2018/05/word-image-5026.png" srcset="/wp-content/uploads/2018/05/word-image-5026.png 711w, /wp-content/uploads/2018/05/word-image-5026-300x194.png 300w" sizes="(max-width: 711px) 100vw, 711px" /><br />
<img loading="lazy" decoding="async" width="906" height="415" class="wp-image-5549" src="/wp-content/uploads/2018/05/word-image-5027.png" srcset="/wp-content/uploads/2018/05/word-image-5027.png 906w, /wp-content/uploads/2018/05/word-image-5027-300x137.png 300w, /wp-content/uploads/2018/05/word-image-5027-768x352.png 768w" sizes="(max-width: 906px) 100vw, 906px" /></p>
<h3>2）接口说明</h3>
<p><img loading="lazy" decoding="async" width="1124" height="662" class="wp-image-5550" src="/wp-content/uploads/2018/05/word-image-5028.png" srcset="/wp-content/uploads/2018/05/word-image-5028.png 1124w, /wp-content/uploads/2018/05/word-image-5028-300x177.png 300w, /wp-content/uploads/2018/05/word-image-5028-768x452.png 768w, /wp-content/uploads/2018/05/word-image-5028-1024x603.png 1024w" sizes="(max-width: 1124px) 100vw, 1124px" /><br />
<img loading="lazy" decoding="async" width="938" height="344" class="wp-image-5551" src="/wp-content/uploads/2018/05/word-image-5029.png" srcset="/wp-content/uploads/2018/05/word-image-5029.png 938w, /wp-content/uploads/2018/05/word-image-5029-300x110.png 300w, /wp-content/uploads/2018/05/word-image-5029-768x282.png 768w" sizes="(max-width: 938px) 100vw, 938px" /><br />
<img loading="lazy" decoding="async" width="801" height="575" class="wp-image-5552" src="/wp-content/uploads/2018/05/word-image-5030.png" srcset="/wp-content/uploads/2018/05/word-image-5030.png 801w, /wp-content/uploads/2018/05/word-image-5030-300x215.png 300w, /wp-content/uploads/2018/05/word-image-5030-768x551.png 768w" sizes="(max-width: 801px) 100vw, 801px" /></p>
<h2><a id="post-5516-_Toc475985058"></a>使用php代码对接图灵机器人</h2>
<p><img loading="lazy" decoding="async" width="655" height="595" class="wp-image-5553" src="/wp-content/uploads/2018/05/word-image-5031.png" srcset="/wp-content/uploads/2018/05/word-image-5031.png 655w, /wp-content/uploads/2018/05/word-image-5031-300x273.png 300w" sizes="(max-width: 655px) 100vw, 655px" /><br />
<img loading="lazy" decoding="async" width="840" height="468" class="wp-image-5554" src="/wp-content/uploads/2018/05/word-image-5032.png" srcset="/wp-content/uploads/2018/05/word-image-5032.png 840w, /wp-content/uploads/2018/05/word-image-5032-300x167.png 300w, /wp-content/uploads/2018/05/word-image-5032-768x428.png 768w" sizes="(max-width: 840px) 100vw, 840px" /></p>
<p>&lt;?php</p>
<p>require &#8216;Wechat.class.php&#8217;;</p>
<p>$Wechat = new Wechat;</p>
<p>//1.定义接口</p>
<p>$api = &#8220;http://www.tuling123.com/openapi/api&#8221;;</p>
<p>//2.定义接口数据</p>
<p>$postData = array(</p>
<p>&#8216;key&#8217; =&gt; &#8216;105042050cc245fd9ec31f21f5da6952&#8217;,</p>
<p>&#8216;info&#8217; =&gt; $_GET[&#8216;k&#8217;],</p>
<p>&#8216;userid&#8217; =&gt; &#8216;chenheng&#8217;,</p>
<p>);</p>
<p>//3.发送请求</p>
<p>$data = $Wechat-&gt;httpRequest($api, json_encode($postData), true);</p>
<p>echo &#8216;&lt;pre&gt;&#8217;;</p>
<p>print_r($data);</p>
<h2><a id="post-5516-_Toc475985059"></a>在微信中整合图灵机器人</h2>
<p><img loading="lazy" decoding="async" width="1214" height="506" class="wp-image-5555" src="/wp-content/uploads/2018/05/word-image-5033.png" srcset="/wp-content/uploads/2018/05/word-image-5033.png 1214w, /wp-content/uploads/2018/05/word-image-5033-300x125.png 300w, /wp-content/uploads/2018/05/word-image-5033-768x320.png 768w, /wp-content/uploads/2018/05/word-image-5033-1024x427.png 1024w" sizes="(max-width: 1214px) 100vw, 1214px" /></p>
<p>$content = $this-&gt;liaotian($keyword, $userid = &#8216;aaaa&#8217;);</p>
<p>$this-&gt;sendText($fromUsername, $toUsername, $content);</p>
<p><img loading="lazy" decoding="async" width="898" height="447" class="wp-image-5556" src="/wp-content/uploads/2018/05/word-image-5034.png" srcset="/wp-content/uploads/2018/05/word-image-5034.png 898w, /wp-content/uploads/2018/05/word-image-5034-300x149.png 300w, /wp-content/uploads/2018/05/word-image-5034-768x382.png 768w" sizes="(max-width: 898px) 100vw, 898px" /></p>
<p>/***</p>
<p>* 聊天机器人</p>
<p>* @param string $keyword 聊天内容</p>
<p>* @param string $userid 用户标识</p>
<p>*/</p>
<p>private function liaotian($keyword, $userid = &#8221;)</p>
<p>{</p>
<p>//1.定义接口</p>
<p>$api = &#8220;http://www.tuling123.com/openapi/api&#8221;;</p>
<p>//2.定义接口数据</p>
<p>$postData = array(</p>
<p>&#8216;key&#8217; =&gt; &#8216;105042050cc245fd9ec31f21f5da6952&#8217;,</p>
<p>&#8216;info&#8217; =&gt; $keyword,</p>
<p>&#8216;userid&#8217; =&gt; $userid,</p>
<p>);</p>
<p>//3.发送请求</p>
<p>$data = $this-&gt;httpRequest($api, json_encode($postData), true);</p>
<p>return isset($data[&#8216;text&#8217;]) ? $data[&#8216;text&#8217;] : &#8221;;</p>
<p>}</p>
<h2>︴扩展：发语音美女陪聊</h2>
<p>说明：就是语音识别+图灵机器人</p>
<p><img loading="lazy" decoding="async" width="538" height="431" class="wp-image-5557" src="/wp-content/uploads/2018/05/word-image-5035.png" srcset="/wp-content/uploads/2018/05/word-image-5035.png 538w, /wp-content/uploads/2018/05/word-image-5035-300x240.png 300w" sizes="(max-width: 538px) 100vw, 538px" /></p>
<h1><a id="post-5516-_Toc475985070"></a>五、微信接口与MySQL数据库</h1>
<h2>1、需求</h2>
<p>用户输入【新闻】可以查看网站最新的新闻数据（推送图文消息）</p>
<h2><a id="post-5516-_Toc475985072"></a>创建相应数据库</h2>
<p>create database wechat;</p>
<p>use wechat;</p>
<p>create table news (</p>
<p>id int unsigned primary key auto_increment,</p>
<p>title varchar(30) not null,</p>
<p>description varchar(200) not null,</p>
<p>picurl varchar(50) not null,</p>
<p>url varchar(50) not null</p>
<p>)engine=MyISAM charset=utf8;</p>
<p>insert into news</p>
<p>values</p>
<p>(null,&#8217;美女&#8217;,&#8217;大河绕青山,知己又红颜&#8217;,&#8217;http://47.91.211.137/zxk/img/b1.png&#8217;,&#8217;http://www.baidu.cn&#8217;),</p>
<p>(null,&#8217;靓仔&#8217;,&#8217;我是你爸爸&#8217;,&#8217;http://47.91.211.137/zxk/img/one.png&#8217;,&#8217;http://www.baidu.cn&#8217;),</p>
<p>(null,&#8217;adsf&#8217;,&#8217;我是手动阀&#8217;,&#8217;http://47.91.211.137/zxk/img/two.png&#8217;,&#8217;http://www.baidu.cn&#8217;),</p>
<p>(null,&#8217;sdfsd&#8217;,&#8217;我手动阀&#8217;,&#8217;http://47.91.211.137/zxk/img/three.png&#8217;,&#8217;http://www.baidu.cn&#8217;),</p>
<p>(null,&#8217;释放掉&#8217;,&#8217;发送的爸&#8217;,&#8217;http://47.91.211.137/zxk/img/one.png&#8217;,&#8217;http://www.baidu.cn&#8217;),</p>
<p>(null,&#8217;水电费&#8217;,&#8217;手动阀&#8217;,&#8217;http://47.91.211.137/zxk/img/one.png&#8217;,&#8217;http://www.baidu.cn&#8217;),</p>
<p>(null,&#8217;水电费&#8217;,&#8217;我手动阀爸爸&#8217;,&#8217;http://47.91.211.137/zxk/img/two.png&#8217;,&#8217;http://www.baidu.cn&#8217;),</p>
<p>(null,&#8217;第三方&#8217;,&#8217;啥地方爸爸&#8217;,&#8217;http://47.91.211.137/zxk/img/three.png&#8217;,&#8217;http://www.baidu.cn&#8217;);</p>
<h2>3、在微信的代码读取表中对的数据,然后拼接图文消息</h2>
<p><img loading="lazy" decoding="async" width="1095" height="428" class="wp-image-5558" src="/wp-content/uploads/2018/05/word-image-5036.png" srcset="/wp-content/uploads/2018/05/word-image-5036.png 1095w, /wp-content/uploads/2018/05/word-image-5036-300x117.png 300w, /wp-content/uploads/2018/05/word-image-5036-768x300.png 768w, /wp-content/uploads/2018/05/word-image-5036-1024x400.png 1024w" sizes="(max-width: 1095px) 100vw, 1095px" /></p>
<p>if ($keyword == &#8216;来新闻&#8217;) {</p>
<p>$pdo = new PDO(&#8216;mysql:dbname=wechat&#8217;, &#8216;root&#8217;, &#8221;);</p>
<p>$pdostatement = $pdo-&gt;query(&#8220;select * from news order by id desc limit 5&#8221;);</p>
<p>$newsData = $pdostatement-&gt;fetchAll(PDO::FETCH_ASSOC);</p>
<p>foreach ($newsData as $key =&gt; $news) {</p>
<p>$temp[] = array(</p>
<p>&#8216;title&#8217;=&gt; $news[&#8216;title&#8217;],</p>
<p>&#8216;desc&#8217;=&gt; $news[&#8216;description&#8217;],</p>
<p>&#8216;img&#8217; =&gt; $news[&#8216;picurl&#8217;],</p>
<p>&#8216;url&#8217; =&gt; $news[&#8216;url&#8217;]</p>
<p>);</p>
<p>}</p>
<p>$this-&gt;sendNews($fromUsername, $toUsername, $temp);</p>
<p>die;</p>
<p>}</p>
<p><img loading="lazy" decoding="async" width="921" height="583" class="wp-image-5559" src="/wp-content/uploads/2018/05/word-image-5037.png" srcset="/wp-content/uploads/2018/05/word-image-5037.png 921w, /wp-content/uploads/2018/05/word-image-5037-300x190.png 300w, /wp-content/uploads/2018/05/word-image-5037-768x486.png 768w" sizes="(max-width: 921px) 100vw, 921px" /></p>
<p>/**</p>
<p>* 响应图文消息</p>
<p>* @param string $fromUsername 接受者</p>
<p>* @param string $toUsername 发送者</p>
<p>* @param string $data 数据</p>
<p>* @param return</p>
<p>*/</p>
<p>protected function sendNews($fromUsername, $toUsername, $datas)</p>
<p>{</p>
<p>// 格式：</p>
<p>// $datas = array(</p>
<p>// array(&#8216;title&#8217;=&gt;&#8217;a&#8217;, &#8216;desc&#8217;=&gt; &#8216;bb&#8217;, &#8216;img&#8217; =&gt; &#8216;http://47.91.211.137/zxk/img/b1.jpg&#8217;, &#8216;url&#8217; =&gt; &#8216;http://baidu.com&/#8217;),</p>
<p>// array(&#8216;title&#8217;=&gt;&#8217;a&#8217;, &#8216;desc&#8217;=&gt; &#8216;bb&#8217;, &#8216;img&#8217; =&gt; &#8216;http://47.91.211.137/zxk/img/b1.jpg&#8217;, &#8216;url&#8217; =&gt; &#8216;http://baidu.com&/#8217;),</p>
<p>// array(&#8216;title&#8217;=&gt;&#8217;a&#8217;, &#8216;desc&#8217;=&gt; &#8216;bb&#8217;, &#8216;img&#8217; =&gt; &#8216;http://47.91.211.137/zxk/img/b1.jpg&#8217;, &#8216;url&#8217; =&gt; &#8216;http://baidu.com&/#8217;),</p>
<p>// array(&#8216;title&#8217;=&gt;&#8217;a&#8217;, &#8216;desc&#8217;=&gt; &#8216;bb&#8217;, &#8216;img&#8217; =&gt; &#8216;http://47.91.211.137/zxk/img/b1.jpg&#8217;, &#8216;url&#8217; =&gt; &#8216;http://baidu.com&/#8217;)</p>
<p>// );</p>
<p>//响应图文消息，切记：ArticleCount是几则有几个item</p>
<p>$tpl = &#8216;&lt;xml&gt;</p>
<p>&lt;ToUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/ToUserName&gt;</p>
<p>&lt;FromUserName&gt;&lt;![CDATA[%s]]&gt;&lt;/FromUserName&gt;</p>
<p>&lt;CreateTime&gt;%s&lt;/CreateTime&gt;</p>
<p>&lt;MsgType&gt;&lt;![CDATA[news]]&gt;&lt;/MsgType&gt;</p>
<p>&lt;ArticleCount&gt;%s&lt;/ArticleCount&gt;</p>
<p>&lt;Articles&gt;&#8217;;</p>
<p>foreach ($datas as $data) {</p>
<p>$tpl .= &#8220;&lt;item&gt;</p>
<p>&lt;Title&gt;&lt;![CDATA[{$data[&#8216;title&#8217;]}]]&gt;&lt;/Title&gt;</p>
<p>&lt;Description&gt;&lt;![CDATA[{$data[&#8216;desc&#8217;]}]]&gt;&lt;/Description&gt;</p>
<p>&lt;PicUrl&gt;&lt;![CDATA[{$data[&#8216;img&#8217;]}]]&gt;&lt;/PicUrl&gt;</p>
<p>&lt;Url&gt;&lt;![CDATA[{$data[&#8216;url&#8217;]}]]&gt;&lt;/Url&gt;</p>
<p>&lt;/item&gt;&#8221;;</p>
<p>}</p>
<p>$tpl .= &#8216;&lt;/Articles&gt;&lt;/xml&gt;&#8217;;</p>
<p>echo sprintf($tpl, $fromUsername, $toUsername, time(), count($datas));</p>
<p>}</p>
<h1><a id="post-5516-_Toc475985060"></a>六、网页授权接口（Oauth2.0） 【★★★★★★★★】</h1>
<h2><a id="post-5516-_Toc475985061"></a>1、什么是网页授权接口（Oauth2.0）</h2>
<p><img loading="lazy" decoding="async" width="1067" height="418" class="wp-image-5560" src="/wp-content/uploads/2018/05/word-image-5038.png" srcset="/wp-content/uploads/2018/05/word-image-5038.png 1067w, /wp-content/uploads/2018/05/word-image-5038-300x118.png 300w, /wp-content/uploads/2018/05/word-image-5038-768x301.png 768w, /wp-content/uploads/2018/05/word-image-5038-1024x401.png 1024w" sizes="(max-width: 1067px) 100vw, 1067px" /></p>
<h2><a id="post-5516-_Toc475985062"></a>2、网页授权模式说明</h2>
<p><img loading="lazy" decoding="async" width="1159" height="380" class="wp-image-5561" src="/wp-content/uploads/2018/05/word-image-5039.png" srcset="/wp-content/uploads/2018/05/word-image-5039.png 1159w, /wp-content/uploads/2018/05/word-image-5039-300x98.png 300w, /wp-content/uploads/2018/05/word-image-5039-768x252.png 768w, /wp-content/uploads/2018/05/word-image-5039-1024x336.png 1024w" sizes="(max-width: 1159px) 100vw, 1159px" /><br />
<img loading="lazy" decoding="async" width="659" height="202" class="wp-image-5562" src="/wp-content/uploads/2018/05/word-image-5040.png" srcset="/wp-content/uploads/2018/05/word-image-5040.png 659w, /wp-content/uploads/2018/05/word-image-5040-300x92.png 300w" sizes="(max-width: 659px) 100vw, 659px" /><br />
<img loading="lazy" decoding="async" width="273" height="284" class="wp-image-5563" src="/wp-content/uploads/2018/05/word-image-5041.png" /></p>
<h2><a id="post-5516-_Toc475985064"></a>3、实现网页授权功能</h2>
<h3>1）授权回调页面域名</h3>
<p><img loading="lazy" decoding="async" width="192" height="91" class="wp-image-5564" src="/wp-content/uploads/2018/05/word-image-5042.png" /><br />
<img loading="lazy" decoding="async" width="888" height="57" class="wp-image-5565" src="/wp-content/uploads/2018/05/word-image-5043.png" srcset="/wp-content/uploads/2018/05/word-image-5043.png 888w, /wp-content/uploads/2018/05/word-image-5043-300x19.png 300w, /wp-content/uploads/2018/05/word-image-5043-768x49.png 768w" sizes="(max-width: 888px) 100vw, 888px" /><br />
<img loading="lazy" decoding="async" width="575" height="354" class="wp-image-5566" src="/wp-content/uploads/2018/05/word-image-5044.png" srcset="/wp-content/uploads/2018/05/word-image-5044.png 575w, /wp-content/uploads/2018/05/word-image-5044-300x185.png 300w" sizes="(max-width: 575px) 100vw, 575px" /></p>
<h3>2）用户同意授权，获取code</h3>
<p><img loading="lazy" decoding="async" width="892" height="192" class="wp-image-5567" src="/wp-content/uploads/2018/05/word-image-5045.png" srcset="/wp-content/uploads/2018/05/word-image-5045.png 892w, /wp-content/uploads/2018/05/word-image-5045-300x65.png 300w, /wp-content/uploads/2018/05/word-image-5045-768x165.png 768w" sizes="(max-width: 892px) 100vw, 892px" /></p>
<p>接口：</p>
<p>https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&#038;redirect_uri=用户同意后处理的PHP程序&#038;response_type=</p>
<p>code&amp;scope=snsapi_userinfo&amp;state=STATE#wechat_redirect</p>
<p><strong>替换自己的链接后，登录PC端将链接发送给自己然后手机端访问</strong></p>
<p>https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx56e3e3d75414b3d0&#038;redirect_uri=http://php.skschool.cn/zhaoxiaokang/member.php&#038;response_type=code&#038;scope=snsapi_userinfo&#038;state=STATE#wechat_redirect</p>
<p><img loading="lazy" decoding="async" width="546" height="348" class="wp-image-5568" src="/wp-content/uploads/2018/05/word-image-5046.png" srcset="/wp-content/uploads/2018/05/word-image-5046.png 546w, /wp-content/uploads/2018/05/word-image-5046-300x191.png 300w" sizes="(max-width: 546px) 100vw, 546px" /><br />
<img loading="lazy" decoding="async" width="322" height="537" class="wp-image-5569" src="/wp-content/uploads/2018/05/word-image-5047.png" srcset="/wp-content/uploads/2018/05/word-image-5047.png 322w, /wp-content/uploads/2018/05/word-image-5047-180x300.png 180w" sizes="(max-width: 322px) 100vw, 322px" /><br />
<img loading="lazy" decoding="async" width="908" height="219" class="wp-image-5570" src="/wp-content/uploads/2018/05/word-image-5048.png" srcset="/wp-content/uploads/2018/05/word-image-5048.png 908w, /wp-content/uploads/2018/05/word-image-5048-300x72.png 300w, /wp-content/uploads/2018/05/word-image-5048-768x185.png 768w" sizes="(max-width: 908px) 100vw, 908px" /></p>
<h3>3）通过code换取网页授权access_token 和 openid（创建member.php页面输入下属代码）</h3>
<p>&lt;?php</p>
<p>//步骤1：设置安全回调地址</p>
<p>//步骤2：手动访问https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx56e3e3d75414b3d0&amp;redirect_uri=http://47.91.211.137/zxk/member.php&amp;response_type=code&amp;scope=snsapi_userinfo&amp;state=STATE#wechat_redirect</p>
<p>//步骤3：根据code获取access_token和openid</p>
<p>$apiData = array(</p>
<p>&#8216;appid&#8217;=&gt;&#8217;wx56e3e3d75414b3d0&#8217;,</p>
<p>&#8216;secret&#8217;=&gt;&#8217;f8ec8178c6dda48d1cb25c07304eff44&#8217;,</p>
<p>&#8216;code&#8217;=&gt;$_GET[&#8216;code&#8217;],</p>
<p>&#8216;grant_type&#8217;=&gt;&#8217;authorization_code&#8217;</p>
<p>);</p>
<p>$api = &#8216;https://api.weixin.qq.com/sns/oauth2/access_token?&#8217;.http_build_query($apiData);</p>
<p>$data = file_get_contents($api);</p>
<p>$data = json_decode($data, true);</p>
<h3>︴拉取用户信息（需scope为 snsapi_userinfo）</h3>
<p>&lt;?php</p>
<p>//步骤1：设置安全回调地址</p>
<p>//步骤2：手动访问https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx56e3e3d75414b3d0&amp;redirect_uri=http://47.91.211.137/zxk/member.php&amp;response_type=code&amp;scope=snsapi_userinfo&amp;state=STATE#wechat_redirect</p>
<p>//步骤3：根据code获取access_token和openid</p>
<p>$apiData = array(</p>
<p>&#8216;appid&#8217;=&gt;&#8217;wx56e3e3d75414b3d0&#8217;,</p>
<p>&#8216;secret&#8217;=&gt;&#8217;f8ec8178c6dda48d1cb25c07304eff44&#8217;,</p>
<p>&#8216;code&#8217;=&gt;$_GET[&#8216;code&#8217;],</p>
<p>&#8216;grant_type&#8217;=&gt;&#8217;authorization_code&#8217;</p>
<p>);</p>
<p>$api = &#8216;https://api.weixin.qq.com/sns/oauth2/access_token?&#8217;.http_build_query($apiData);</p>
<p>$data = file_get_contents($api);</p>
<p>$data = json_decode($data, true);</p>
<p>//步骤4：获取用户信息</p>
<p>$apiData = array(</p>
<p>&#8216;access_token&#8217; =&gt; $data[&#8216;access_token&#8217;],</p>
<p>&#8216;openid&#8217; =&gt; $data[&#8216;openid&#8217;],</p>
<p>&#8216;lang&#8217; =&gt; &#8216;zh_CN&#8217;</p>
<p>);</p>
<p>$api = &#8216;https://api.weixin.qq.com/sns/userinfo?&#8217;.http_build_query($apiData);</p>
<p>$data = file_get_contents($api);</p>
<p>$data = json_decode($data, true);</p>
<p>echo &#8216;&lt;pre&gt;&#8217;;</p>
<p>print_r($data);</p>
<h3>︴小总结【★★★★★】</h3>
<p>需 求：获取用户信息</p>
<p>步骤1：设置回调域名（测试账号页面）</p>
<p>步骤2：获取code</p>
<p><strong>替换自己的链接后，登录PC端将链接发送给自己然后手机端访问</strong></p>
<p>https://open.weixin.qq.com/connect/oauth2/authorize?appid=<strong>wx56e3e3d75414b3d0</strong>&amp;redirect_uri=<strong>http://47.91.211.137/zxk/member.php</strong>&amp;response_type=code&amp;scope=<strong>snsapi_userinfo</strong>&amp;state=STATE#wechat_redirect</p>
<p>步骤3：根据code获取access_token和openid（member.php）</p>
<p><img loading="lazy" decoding="async" width="993" height="287" class="wp-image-5571" src="/wp-content/uploads/2018/05/word-image-5049.png" srcset="/wp-content/uploads/2018/05/word-image-5049.png 993w, /wp-content/uploads/2018/05/word-image-5049-300x87.png 300w, /wp-content/uploads/2018/05/word-image-5049-768x222.png 768w" sizes="(max-width: 993px) 100vw, 993px" /></p>
<p>步骤4：根据openid和access_token获取用户信息（member.php）</p>
<p><img loading="lazy" decoding="async" width="908" height="294" class="wp-image-5572" src="/wp-content/uploads/2018/05/word-image-5050.png" srcset="/wp-content/uploads/2018/05/word-image-5050.png 908w, /wp-content/uploads/2018/05/word-image-5050-300x97.png 300w, /wp-content/uploads/2018/05/word-image-5050-768x249.png 768w" sizes="(max-width: 908px) 100vw, 908px" /></p>
<h2>实战开发流程</h2>
<p>用户访问某需要登录的页面 -&gt; 通过会话技术判断用户是否登录（openid） ： 已登录-&gt; 不用管正常访问，未登录-&gt; 程序跳转到</p>
<p>（https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx56e3e3d75414b3d0&amp;redirect_uri=http://php.skschool.cn/zhaoxiaokang/member.php&amp;response_type=code&amp;scope=snsapi_userinfo&amp;state=STATE#wechat_redirect）获取openid并通过会话技术保存即可。</p>
<h1><a id="post-5516-_Toc475985065"></a><a id="post-5516-_Toc485411516"></a>七、微信JSSDK接口【★★★★★】</h1>
<h2><a id="post-5516-_Toc475985066"></a><a id="post-5516-_Toc485411517"></a>1、什么是JSSDK接口</h2>
<p><img loading="lazy" decoding="async" width="286" height="258" class="wp-image-5573" src="/wp-content/uploads/2018/05/word-image-5051.png" /><br />
<img loading="lazy" decoding="async" width="983" height="301" class="wp-image-5574" src="/wp-content/uploads/2018/05/word-image-5052.png" srcset="/wp-content/uploads/2018/05/word-image-5052.png 983w, /wp-content/uploads/2018/05/word-image-5052-300x92.png 300w, /wp-content/uploads/2018/05/word-image-5052-768x235.png 768w" sizes="(max-width: 983px) 100vw, 983px" /></p>
<h2><a id="post-5516-_Toc475985067"></a><a id="post-5516-_Toc485411518"></a>2、下载JSSDK官方接口</h2>
<p><img loading="lazy" decoding="async" width="311" height="379" class="wp-image-5575" src="/wp-content/uploads/2018/05/word-image-5053.png" srcset="/wp-content/uploads/2018/05/word-image-5053.png 311w, /wp-content/uploads/2018/05/word-image-5053-246x300.png 246w" sizes="(max-width: 311px) 100vw, 311px" /></p>
<p><a href="/goto/v00y" rel="nofollow">http://demo.open.weixin.qq.com/jssdk/sample.zip</a></p>
<h2><a id="post-5516-_Toc475985069"></a><a id="post-5516-_Toc485411520"></a>实现JSSDK接口功能</h2>
<p>步骤1：设置安全域名</p>
<p><img loading="lazy" decoding="async" width="811" height="251" class="wp-image-5576" src="/wp-content/uploads/2018/05/word-image-5054.png" srcset="/wp-content/uploads/2018/05/word-image-5054.png 811w, /wp-content/uploads/2018/05/word-image-5054-300x93.png 300w, /wp-content/uploads/2018/05/word-image-5054-768x238.png 768w" sizes="(max-width: 811px) 100vw, 811px" /></p>
<p>步骤2：解压JSSDK</p>
<p><img loading="lazy" decoding="async" width="950" height="358" class="wp-image-5577" src="/wp-content/uploads/2018/05/word-image-5055.png" srcset="/wp-content/uploads/2018/05/word-image-5055.png 950w, /wp-content/uploads/2018/05/word-image-5055-300x113.png 300w, /wp-content/uploads/2018/05/word-image-5055-768x289.png 768w" sizes="(max-width: 950px) 100vw, 950px" /></p>
<p>步骤3：修改sample.php文件</p>
<p><img loading="lazy" decoding="async" width="1011" height="296" class="wp-image-5578" src="/wp-content/uploads/2018/05/word-image-5056.png" srcset="/wp-content/uploads/2018/05/word-image-5056.png 1011w, /wp-content/uploads/2018/05/word-image-5056-300x88.png 300w, /wp-content/uploads/2018/05/word-image-5056-768x225.png 768w" sizes="(max-width: 1011px) 100vw, 1011px" /></p>
<p>步骤4：修改sample.php配置接口</p>
<p><img loading="lazy" decoding="async" width="928" height="656" class="wp-image-5579" src="/wp-content/uploads/2018/05/word-image-5057.png" srcset="/wp-content/uploads/2018/05/word-image-5057.png 928w, /wp-content/uploads/2018/05/word-image-5057-300x212.png 300w, /wp-content/uploads/2018/05/word-image-5057-768x543.png 768w" sizes="(max-width: 928px) 100vw, 928px" /></p>
<p>步骤4：上传到服务器访问</p>
<h1>综合案例</h1>
<h2>需求</h2>
<p>发送关键词【1024】响应链接参加活动（PC端：说明用微信打开，微信端：已登录不管，未登录授权登录）</p>
<h2>代码</h2>
<h3>步骤1：加载静态页面</h3>
<p><img loading="lazy" decoding="async" width="932" height="471" class="wp-image-5580" src="/wp-content/uploads/2018/05/word-image-5058.png" srcset="/wp-content/uploads/2018/05/word-image-5058.png 932w, /wp-content/uploads/2018/05/word-image-5058-300x152.png 300w, /wp-content/uploads/2018/05/word-image-5058-768x388.png 768w" sizes="(max-width: 932px) 100vw, 932px" /></p>
<h3>步骤2：判断用户是否登录</h3>
<p>思路：通过session中的openid判断用户是否登录</p>
<p>逻辑：当用户访问index.php 通过 isWeixinApp.php判断用户是否通过微信客户端打开，通过isLogin.php是否登录（是-则不管，否-则跳转到网页授权）</p>
<p>index.php</p>
<p><img loading="lazy" decoding="async" width="1268" height="643" class="wp-image-5581" src="/wp-content/uploads/2018/05/word-image-5059.png" srcset="/wp-content/uploads/2018/05/word-image-5059.png 1268w, /wp-content/uploads/2018/05/word-image-5059-300x152.png 300w, /wp-content/uploads/2018/05/word-image-5059-768x389.png 768w, /wp-content/uploads/2018/05/word-image-5059-1024x519.png 1024w" sizes="(max-width: 1268px) 100vw, 1268px" /></p>
<p>isWeixinApp.php</p>
<p><img loading="lazy" decoding="async" width="1110" height="476" class="wp-image-5582" src="/wp-content/uploads/2018/05/word-image-5060.png" srcset="/wp-content/uploads/2018/05/word-image-5060.png 1110w, /wp-content/uploads/2018/05/word-image-5060-300x129.png 300w, /wp-content/uploads/2018/05/word-image-5060-768x329.png 768w, /wp-content/uploads/2018/05/word-image-5060-1024x439.png 1024w" sizes="(max-width: 1110px) 100vw, 1110px" /></p>
<p>&lt;?php</p>
<p>$user_agent = $_SERVER[&#8216;HTTP_USER_AGENT&#8217;];</p>
<p>if (strpos($user_agent, &#8216;MicroMessenger&#8217;) === false) {</p>
<p>// 非微信浏览器禁止浏览</p>
<p>//echo &#8220;HTTP/1.1 401 Unauthorized&#8221;;</p>
<p>echo &#8216;你有瑕疵，because 你 out 了，快用微信客户端&#8217;;</p>
<p>die;</p>
<p>}</p>
<p>isLogin.php</p>
<p><img loading="lazy" decoding="async" width="1056" height="715" class="wp-image-5583" src="/wp-content/uploads/2018/05/word-image-5061.png" srcset="/wp-content/uploads/2018/05/word-image-5061.png 1056w, /wp-content/uploads/2018/05/word-image-5061-300x203.png 300w, /wp-content/uploads/2018/05/word-image-5061-768x520.png 768w, /wp-content/uploads/2018/05/word-image-5061-1024x693.png 1024w, /wp-content/uploads/2018/05/word-image-5061-220x150.png 220w" sizes="(max-width: 1056px) 100vw, 1056px" /></p>
<p>&lt;?php</p>
<p>//步骤1：设置安全回调地址</p>
<p>//步骤2：手动访问https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx56e3e3d75414b3d0&amp;redirect_uri=http://47.91.211.137/zxk/member.php&amp;response_type=code&amp;scope=snsapi_userinfo&amp;state=STATE#wechat_redirect</p>
<p>//步骤3：根据code获取access_token和openid</p>
<p>$apiData = array(</p>
<p>&#8216;appid&#8217;=&gt;&#8217;wx56e3e3d75414b3d0&#8217;,</p>
<p>&#8216;secret&#8217;=&gt;&#8217;f8ec8178c6dda48d1cb25c07304eff44&#8217;,</p>
<p>&#8216;code&#8217;=&gt;$_GET[&#8216;code&#8217;],</p>
<p>&#8216;grant_type&#8217;=&gt;&#8217;authorization_code&#8217;</p>
<p>);</p>
<p>$api = &#8216;https://api.weixin.qq.com/sns/oauth2/access_token?&#8217;.http_build_query($apiData);</p>
<p>$data = file_get_contents($api);</p>
<p>$data = json_decode($data, true);</p>
<p>// //步骤4：获取用户信息</p>
<p>$apiData = array(</p>
<p>&#8216;access_token&#8217; =&gt; $data[&#8216;access_token&#8217;],</p>
<p>&#8216;openid&#8217; =&gt; $data[&#8216;openid&#8217;],</p>
<p>&#8216;lang&#8217; =&gt; &#8216;zh_CN&#8217;</p>
<p>);</p>
<p>$api = &#8216;https://api.weixin.qq.com/sns/userinfo?&#8217;.http_build_query($apiData);</p>
<p>$data = file_get_contents($api);</p>
<p>$data = json_decode($data, true);</p>
<p>//登录成功，保存用户信息，并跳转到首页</p>
<p>session_start();</p>
<p>$_SESSION[&#8216;userinfo&#8217;] = array(</p>
<p>&#8216;openid&#8217; =&gt; $data[&#8216;openid&#8217;],</p>
<p>&#8216;nickname&#8217; =&gt; $data[&#8216;nickname&#8217;],</p>
<p>&#8216;headimgurl&#8217; =&gt; $data[&#8216;headimgurl&#8217;]</p>
<p>);</p>
<p>header(&#8220;location: ./index.php&#8221;);</p>
<h2>扫码抽奖</h2>
<p><img loading="lazy" decoding="async" width="1071" height="633" class="wp-image-5584" src="/wp-content/uploads/2018/05/word-image-5062.png" srcset="/wp-content/uploads/2018/05/word-image-5062.png 1071w, /wp-content/uploads/2018/05/word-image-5062-300x177.png 300w, /wp-content/uploads/2018/05/word-image-5062-768x454.png 768w, /wp-content/uploads/2018/05/word-image-5062-1024x605.png 1024w" sizes="(max-width: 1071px) 100vw, 1071px" /><br />
<img loading="lazy" decoding="async" width="711" height="516" class="wp-image-5585" src="/wp-content/uploads/2018/05/word-image-5063.png" srcset="/wp-content/uploads/2018/05/word-image-5063.png 711w, /wp-content/uploads/2018/05/word-image-5063-300x218.png 300w" sizes="(max-width: 711px) 100vw, 711px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e7%a7%bb%e5%8a%a8%e7%ab%af%e5%bc%80%e5%8f%91/5516.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="http://47.91.211.137/zxk/music.mp3" length="0" type="audio/mpeg" />

			</item>
	</channel>
</rss>
