<?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>CURL &#8211; 个人随笔</title>
	<atom:link href="/label/curl/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description></description>
	<lastBuildDate>Sat, 19 May 2018 15:13:58 +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>CURL &#8211; 个人随笔</title>
	<link>/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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 fetchpriority="high" 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 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 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>TP3.2商城 （七）接口、CURL、手机注册、购物车下单</title>
		<link>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/4240.html</link>
					<comments>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/4240.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 12:31:34 +0000</pubDate>
				<category><![CDATA[TP3.2]]></category>
		<category><![CDATA[TP3.2商城]]></category>
		<category><![CDATA[后台框架]]></category>
		<category><![CDATA[CURL]]></category>
		<category><![CDATA[手机注册]]></category>
		<category><![CDATA[接口]]></category>
		<category><![CDATA[购物车下单]]></category>
		<guid isPermaLink="false">/?p=4240</guid>

					<description><![CDATA[接口概述 接口介绍 接口又称为API(Application Programming Interface应用程 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>接口概述</h1>
<h2>接口介绍</h2>
<p>
  接口又称为API(Application Programming Interface应用程序编程接口)。是一些预先定义的函数，目的是提供应用程序与开发人员基于某软件或硬件的访问一组例程的能力，而又无需访问源码或理解内部工作机制的细节。
</p>
<p>
  一切皆为接口。只要能够提供一种服务就是接口。对于常见的接口返回数据格式为xml或者json
</p>
<h2>接口的使用原理</h2>
<p><img loading="lazy" decoding="async" width="948" height="389" src="/wp-content/uploads/2018/05/word-image-3779.png" class="wp-image-4241" srcset="/wp-content/uploads/2018/05/word-image-3779.png 948w, /wp-content/uploads/2018/05/word-image-3779-300x123.png 300w, /wp-content/uploads/2018/05/word-image-3779-768x315.png 768w" sizes="(max-width: 948px) 100vw, 948px" /></p>
<p>
  本质就是发送请求然后响应
</p>
<h2>接口使用的注意事项</h2>
<p>
  当调用别人所提供的接口时最为重要的看文档。在文档中一定会具体的列出请求地址、请求方式、请求参数、返回格式跟返回的数据。对于比较重要的接口往往都会提供demo例如支付。对于不需要回调的接口可以直接本地进行测试。如果需要回调必须发布到外网中才可以测试
</p>
<p>
  回调：当调用别人的接口完成之后，别人的接口还需要在调用自己提供的接口
</p>
<h2>curl使用</h2>
<p>
  使用curl必须开启curl扩展
</p>
<h3>curl使用步骤</h3>
<ol>
<li>
  打开会话curl_init
</li>
<li>
  设置参数curl_setopt
</li>
<li>
  执行请求curl_exec
</li>
<li>
  关闭会话curl_close
</li>
</ol>
<h3>使用curl实现get请求</h3>
<p><img loading="lazy" decoding="async" width="1085" height="704" src="/wp-content/uploads/2018/05/word-image-3780.png" class="wp-image-4242" srcset="/wp-content/uploads/2018/05/word-image-3780.png 1085w, /wp-content/uploads/2018/05/word-image-3780-300x195.png 300w, /wp-content/uploads/2018/05/word-image-3780-768x498.png 768w, /wp-content/uploads/2018/05/word-image-3780-1024x664.png 1024w" sizes="(max-width: 1085px) 100vw, 1085px" /></p>
<h3>使用curl实现post请求</h3>
<p>
  ①创建表单
</p>
<p><img loading="lazy" decoding="async" width="876" height="560" src="/wp-content/uploads/2018/05/word-image-3781.png" class="wp-image-4243" srcset="/wp-content/uploads/2018/05/word-image-3781.png 876w, /wp-content/uploads/2018/05/word-image-3781-300x192.png 300w, /wp-content/uploads/2018/05/word-image-3781-768x491.png 768w" sizes="(max-width: 876px) 100vw, 876px" /></p>
<p>
  ②创建php文件对请求进行处理
</p>
<p><img loading="lazy" decoding="async" width="729" height="302" src="/wp-content/uploads/2018/05/word-image-3782.png" class="wp-image-4244" srcset="/wp-content/uploads/2018/05/word-image-3782.png 729w, /wp-content/uploads/2018/05/word-image-3782-300x124.png 300w" sizes="(max-width: 729px) 100vw, 729px" /></p>
<p>
  ③使用curl工具发送post请求
</p>
<p><img loading="lazy" decoding="async" width="1002" height="701" src="/wp-content/uploads/2018/05/word-image-3783.png" class="wp-image-4245" srcset="/wp-content/uploads/2018/05/word-image-3783.png 1002w, /wp-content/uploads/2018/05/word-image-3783-300x210.png 300w, /wp-content/uploads/2018/05/word-image-3783-768x537.png 768w" sizes="(max-width: 1002px) 100vw, 1002px" /></p>
<p>
  结果如下
</p>
<p><img loading="lazy" decoding="async" width="688" height="120" src="/wp-content/uploads/2018/05/word-image-3784.png" class="wp-image-4246" srcset="/wp-content/uploads/2018/05/word-image-3784.png 688w, /wp-content/uploads/2018/05/word-image-3784-300x52.png 300w" sizes="(max-width: 688px) 100vw, 688px" /></p>
<h2>调用第三方接口的案例</h2>
<h3>申请接口使用权限</h3>
<p><a href="https://www.juhe.cn/">https://www.juhe.cn/</a>
</p>
<p>
  聚合数据为一个专门提供接口服务的平台。部分接口免费使用。
</p>
<p>
  ①注册为会员
</p>
<p>
  ②登录到会员中心进行个人的认证
</p>
<p><img loading="lazy" decoding="async" width="186" height="289" src="/wp-content/uploads/2018/05/word-image-3785.png" class="wp-image-4247" /></p>
<p>
  ③申请接口使用权限
</p>
<p><img loading="lazy" decoding="async" width="1177" height="449" src="/wp-content/uploads/2018/05/word-image-3786.png" class="wp-image-4248" srcset="/wp-content/uploads/2018/05/word-image-3786.png 1177w, /wp-content/uploads/2018/05/word-image-3786-300x114.png 300w, /wp-content/uploads/2018/05/word-image-3786-768x293.png 768w, /wp-content/uploads/2018/05/word-image-3786-1024x391.png 1024w" sizes="(max-width: 1177px) 100vw, 1177px" /><br />
<img loading="lazy" decoding="async" width="797" height="565" src="/wp-content/uploads/2018/05/word-image-3787.png" class="wp-image-4249" srcset="/wp-content/uploads/2018/05/word-image-3787.png 797w, /wp-content/uploads/2018/05/word-image-3787-300x213.png 300w, /wp-content/uploads/2018/05/word-image-3787-768x544.png 768w" sizes="(max-width: 797px) 100vw, 797px" /></p>
<p>
  ④对申请的接口进行认证
</p>
<p><img loading="lazy" decoding="async" width="1074" height="159" src="/wp-content/uploads/2018/05/word-image-3788.png" class="wp-image-4250" srcset="/wp-content/uploads/2018/05/word-image-3788.png 1074w, /wp-content/uploads/2018/05/word-image-3788-300x44.png 300w, /wp-content/uploads/2018/05/word-image-3788-768x114.png 768w, /wp-content/uploads/2018/05/word-image-3788-1024x152.png 1024w" sizes="(max-width: 1074px) 100vw, 1074px" /><br />
<img loading="lazy" decoding="async" width="808" height="528" src="/wp-content/uploads/2018/05/word-image-3789.png" class="wp-image-4251" srcset="/wp-content/uploads/2018/05/word-image-3789.png 808w, /wp-content/uploads/2018/05/word-image-3789-300x196.png 300w, /wp-content/uploads/2018/05/word-image-3789-768x502.png 768w" sizes="(max-width: 808px) 100vw, 808px" /></p>
<p>
  ⑤查看身份认证标识
</p>
<p><img loading="lazy" decoding="async" width="1100" height="217" src="/wp-content/uploads/2018/05/word-image-3790.png" class="wp-image-4252" srcset="/wp-content/uploads/2018/05/word-image-3790.png 1100w, /wp-content/uploads/2018/05/word-image-3790-300x59.png 300w, /wp-content/uploads/2018/05/word-image-3790-768x152.png 768w, /wp-content/uploads/2018/05/word-image-3790-1024x202.png 1024w" sizes="(max-width: 1100px) 100vw, 1100px" /></p>
<h3>查看接口使用文档</h3>
<p>
  ①进入接口文档
</p>
<p><img loading="lazy" decoding="async" width="1343" height="407" src="/wp-content/uploads/2018/05/word-image-3791.png" class="wp-image-4253" srcset="/wp-content/uploads/2018/05/word-image-3791.png 1343w, /wp-content/uploads/2018/05/word-image-3791-300x91.png 300w, /wp-content/uploads/2018/05/word-image-3791-768x233.png 768w, /wp-content/uploads/2018/05/word-image-3791-1024x310.png 1024w" sizes="(max-width: 1343px) 100vw, 1343px" /><br />
<img loading="lazy" decoding="async" width="1029" height="487" src="/wp-content/uploads/2018/05/word-image-3792.png" class="wp-image-4254" srcset="/wp-content/uploads/2018/05/word-image-3792.png 1029w, /wp-content/uploads/2018/05/word-image-3792-300x142.png 300w, /wp-content/uploads/2018/05/word-image-3792-768x363.png 768w, /wp-content/uploads/2018/05/word-image-3792-1024x485.png 1024w" sizes="(max-width: 1029px) 100vw, 1029px" /></p>
<p>
  ②查看文档
</p>
<p><img loading="lazy" decoding="async" width="1025" height="536" src="/wp-content/uploads/2018/05/word-image-3793.png" class="wp-image-4255" srcset="/wp-content/uploads/2018/05/word-image-3793.png 1025w, /wp-content/uploads/2018/05/word-image-3793-300x157.png 300w, /wp-content/uploads/2018/05/word-image-3793-768x402.png 768w, /wp-content/uploads/2018/05/word-image-3793-1024x535.png 1024w" sizes="(max-width: 1025px) 100vw, 1025px" /></p>
<p>
  返回数据结果如下
</p>
<p><img loading="lazy" decoding="async" width="782" height="554" src="/wp-content/uploads/2018/05/word-image-3794.png" class="wp-image-4256" srcset="/wp-content/uploads/2018/05/word-image-3794.png 782w, /wp-content/uploads/2018/05/word-image-3794-300x213.png 300w, /wp-content/uploads/2018/05/word-image-3794-768x544.png 768w" sizes="(max-width: 782px) 100vw, 782px" /></p>
<h3>演示调用接口</h3>
<p>
  ①编写代码调用接口
</p>
<p><img loading="lazy" decoding="async" width="1117" height="488" src="/wp-content/uploads/2018/05/word-image-3795.png" class="wp-image-4257" srcset="/wp-content/uploads/2018/05/word-image-3795.png 1117w, /wp-content/uploads/2018/05/word-image-3795-300x131.png 300w, /wp-content/uploads/2018/05/word-image-3795-768x336.png 768w, /wp-content/uploads/2018/05/word-image-3795-1024x447.png 1024w" sizes="(max-width: 1117px) 100vw, 1117px" /></p>
<p>
  ②查看结果
</p>
<p><img loading="lazy" decoding="async" width="1361" height="232" src="/wp-content/uploads/2018/05/word-image-3796.png" class="wp-image-4258" srcset="/wp-content/uploads/2018/05/word-image-3796.png 1361w, /wp-content/uploads/2018/05/word-image-3796-300x51.png 300w, /wp-content/uploads/2018/05/word-image-3796-768x131.png 768w, /wp-content/uploads/2018/05/word-image-3796-1024x175.png 1024w" sizes="(max-width: 1361px) 100vw, 1361px" /></p>
<h2>本地接口案例</h2>
<p>
  APP登录
</p>
<h3>编写接口文档</h3>
<table>
<tr>
<td colspan="4">
<p>
  用户登录接口
</p>
</td>
</tr>
<tr>
<td>
<p>
  请求地址
</p>
</td>
<td colspan="3">
<p>
  http://shop.com/demo/demo5.php
</p>
</td>
</tr>
<tr>
<td>
<p>
  请求方式
</p>
</td>
<td colspan="3">
<p>
  http协议的get或者post
</p>
</td>
</tr>
<tr>
<td>
<p>
  返回结果格式
</p>
</td>
<td colspan="3">
<p>
  Json
</p>
</td>
</tr>
<tr>
<td>
<p>
  请求参数
</p>
</td>
<td>
<p>
  Username
</p>
</td>
<td>
<p>
  用户名
</p>
</td>
<td>
<p>
  必填项
</p>
</td>
</tr>
<tr>
<td></td>
<td>
<p>
  Password
</p>
</td>
<td>
<p>
  密码
</p>
</td>
<td>
<p>
  必填项
</p>
</td>
</tr>
<tr>
<td>
<p>
  返回结果
</p>
</td>
<td>
<p>
  Status
</p>
</td>
<td>
<p>
  状态码
</p>
</td>
<td>
<p>
  0失败1为成功
</p>
</td>
</tr>
<tr>
<td></td>
<td>
<p>
  Msg
</p>
</td>
<td>
<p>
  提示信息
</p>
</td>
<td></td>
</tr>
<tr>
<td></td>
<td>
<p>
  Data
</p>
</td>
<td>
<p>
  数据集合
</p>
</td>
<td>
<p>
  包括了多个信息
</p>
</td>
</tr>
</table>
<h3>代码实现</h3>
<p>
  ①编写代码
</p>
<p><img loading="lazy" decoding="async" width="1090" height="692" src="/wp-content/uploads/2018/05/word-image-3797.png" class="wp-image-4259" srcset="/wp-content/uploads/2018/05/word-image-3797.png 1090w, /wp-content/uploads/2018/05/word-image-3797-300x190.png 300w, /wp-content/uploads/2018/05/word-image-3797-768x488.png 768w, /wp-content/uploads/2018/05/word-image-3797-1024x650.png 1024w" sizes="(max-width: 1090px) 100vw, 1090px" /></p>
<p>
  ②效果
</p>
<p><img loading="lazy" decoding="async" width="1006" height="131" src="/wp-content/uploads/2018/05/word-image-3798.png" class="wp-image-4260" srcset="/wp-content/uploads/2018/05/word-image-3798.png 1006w, /wp-content/uploads/2018/05/word-image-3798-300x39.png 300w, /wp-content/uploads/2018/05/word-image-3798-768x100.png 768w" sizes="(max-width: 1006px) 100vw, 1006px" /></p>
<h1>短信接口</h1>
<h2>短信接口注册</h2>
<p>
  ①注册会员
</p>
<p><a href="http://www.yuntongxun.com/">http://www.yuntongxun.com/</a>
</p>
<p><img loading="lazy" decoding="async" width="1217" height="508" src="/wp-content/uploads/2018/05/word-image-3799.png" class="wp-image-4261" srcset="/wp-content/uploads/2018/05/word-image-3799.png 1217w, /wp-content/uploads/2018/05/word-image-3799-300x125.png 300w, /wp-content/uploads/2018/05/word-image-3799-768x321.png 768w, /wp-content/uploads/2018/05/word-image-3799-1024x427.png 1024w" sizes="(max-width: 1217px) 100vw, 1217px" /></p>
<p>
  ②登录进入控制台查看身份标识
</p>
<p><img loading="lazy" decoding="async" width="1332" height="604" src="/wp-content/uploads/2018/05/word-image-3800.png" class="wp-image-4262" srcset="/wp-content/uploads/2018/05/word-image-3800.png 1332w, /wp-content/uploads/2018/05/word-image-3800-300x136.png 300w, /wp-content/uploads/2018/05/word-image-3800-768x348.png 768w, /wp-content/uploads/2018/05/word-image-3800-1024x464.png 1024w" sizes="(max-width: 1332px) 100vw, 1332px" /></p>
<p>
  ③创建应用
</p>
<p><img loading="lazy" decoding="async" width="1195" height="587" src="/wp-content/uploads/2018/05/word-image-3801.png" class="wp-image-4263" srcset="/wp-content/uploads/2018/05/word-image-3801.png 1195w, /wp-content/uploads/2018/05/word-image-3801-300x147.png 300w, /wp-content/uploads/2018/05/word-image-3801-768x377.png 768w, /wp-content/uploads/2018/05/word-image-3801-1024x503.png 1024w" sizes="(max-width: 1195px) 100vw, 1195px" /><br />
<img loading="lazy" decoding="async" width="948" height="560" src="/wp-content/uploads/2018/05/word-image-3802.png" class="wp-image-4264" srcset="/wp-content/uploads/2018/05/word-image-3802.png 948w, /wp-content/uploads/2018/05/word-image-3802-300x177.png 300w, /wp-content/uploads/2018/05/word-image-3802-768x454.png 768w" sizes="(max-width: 948px) 100vw, 948px" /></p>
<p>
  查看应用列表
</p>
<p><img loading="lazy" decoding="async" width="1012" height="451" src="/wp-content/uploads/2018/05/word-image-3803.png" class="wp-image-4265" srcset="/wp-content/uploads/2018/05/word-image-3803.png 1012w, /wp-content/uploads/2018/05/word-image-3803-300x134.png 300w, /wp-content/uploads/2018/05/word-image-3803-768x342.png 768w" sizes="(max-width: 1012px) 100vw, 1012px" /><br />
<img loading="lazy" decoding="async" width="856" height="565" src="/wp-content/uploads/2018/05/word-image-3804.png" class="wp-image-4266" srcset="/wp-content/uploads/2018/05/word-image-3804.png 856w, /wp-content/uploads/2018/05/word-image-3804-300x198.png 300w, /wp-content/uploads/2018/05/word-image-3804-768x507.png 768w" sizes="(max-width: 856px) 100vw, 856px" /></p>
<p>
  ④查看模板列表
</p>
<p><img loading="lazy" decoding="async" width="1126" height="537" src="/wp-content/uploads/2018/05/word-image-3805.png" class="wp-image-4267" srcset="/wp-content/uploads/2018/05/word-image-3805.png 1126w, /wp-content/uploads/2018/05/word-image-3805-300x143.png 300w, /wp-content/uploads/2018/05/word-image-3805-768x366.png 768w, /wp-content/uploads/2018/05/word-image-3805-1024x488.png 1024w" sizes="(max-width: 1126px) 100vw, 1126px" /></p>
<p>
  ⑤设置测试号码
</p>
<p><img loading="lazy" decoding="async" width="1110" height="555" src="/wp-content/uploads/2018/05/word-image-3806.png" class="wp-image-4268" srcset="/wp-content/uploads/2018/05/word-image-3806.png 1110w, /wp-content/uploads/2018/05/word-image-3806-300x150.png 300w, /wp-content/uploads/2018/05/word-image-3806-768x384.png 768w, /wp-content/uploads/2018/05/word-image-3806-1024x512.png 1024w" sizes="(max-width: 1110px) 100vw, 1110px" /></p>
<h2>查看使用文档或者找demo</h2>
<p>
  ①找到文档入口地址
</p>
<p><img loading="lazy" decoding="async" width="1317" height="159" src="/wp-content/uploads/2018/05/word-image-3807.png" class="wp-image-4269" srcset="/wp-content/uploads/2018/05/word-image-3807.png 1317w, /wp-content/uploads/2018/05/word-image-3807-300x36.png 300w, /wp-content/uploads/2018/05/word-image-3807-768x93.png 768w, /wp-content/uploads/2018/05/word-image-3807-1024x124.png 1024w" sizes="(max-width: 1317px) 100vw, 1317px" /></p>
<p>
  ②找到短信文档的入口
</p>
<p><img loading="lazy" decoding="async" width="1076" height="439" src="/wp-content/uploads/2018/05/word-image-3808.png" class="wp-image-4270" srcset="/wp-content/uploads/2018/05/word-image-3808.png 1076w, /wp-content/uploads/2018/05/word-image-3808-300x122.png 300w, /wp-content/uploads/2018/05/word-image-3808-768x313.png 768w, /wp-content/uploads/2018/05/word-image-3808-1024x418.png 1024w" sizes="(max-width: 1076px) 100vw, 1076px" /></p>
<p>
  ③下载demo
</p>
<p><img loading="lazy" decoding="async" width="950" height="509" src="/wp-content/uploads/2018/05/word-image-3809.png" class="wp-image-4271" srcset="/wp-content/uploads/2018/05/word-image-3809.png 950w, /wp-content/uploads/2018/05/word-image-3809-300x161.png 300w, /wp-content/uploads/2018/05/word-image-3809-768x411.png 768w" sizes="(max-width: 950px) 100vw, 950px" /></p>
<p>
  ④目录说明
</p>
<p><img loading="lazy" decoding="async" width="891" height="263" src="/wp-content/uploads/2018/05/word-image-3810.png" class="wp-image-4272" srcset="/wp-content/uploads/2018/05/word-image-3810.png 891w, /wp-content/uploads/2018/05/word-image-3810-300x89.png 300w, /wp-content/uploads/2018/05/word-image-3810-768x227.png 768w" sizes="(max-width: 891px) 100vw, 891px" /></p>
<h2>测试短信发送</h2>
<p>
  ①将下载的demo拷贝到web目录下
</p>
<p><img loading="lazy" decoding="async" width="936" height="389" src="/wp-content/uploads/2018/05/word-image-3811.png" class="wp-image-4273" srcset="/wp-content/uploads/2018/05/word-image-3811.png 936w, /wp-content/uploads/2018/05/word-image-3811-300x125.png 300w, /wp-content/uploads/2018/05/word-image-3811-768x319.png 768w" sizes="(max-width: 936px) 100vw, 936px" /></p>
<p>
  ②修改发送短信的文件
</p>
<p><img loading="lazy" decoding="async" width="1138" height="674" src="/wp-content/uploads/2018/05/word-image-3812.png" class="wp-image-4274" srcset="/wp-content/uploads/2018/05/word-image-3812.png 1138w, /wp-content/uploads/2018/05/word-image-3812-300x178.png 300w, /wp-content/uploads/2018/05/word-image-3812-768x455.png 768w, /wp-content/uploads/2018/05/word-image-3812-1024x606.png 1024w" sizes="(max-width: 1138px) 100vw, 1138px" /></p>
<p>
  ③继续修改发送短信文件实现发送短信
</p>
<p><img loading="lazy" decoding="async" width="1051" height="496" src="/wp-content/uploads/2018/05/word-image-3813.png" class="wp-image-4275" srcset="/wp-content/uploads/2018/05/word-image-3813.png 1051w, /wp-content/uploads/2018/05/word-image-3813-300x142.png 300w, /wp-content/uploads/2018/05/word-image-3813-768x362.png 768w, /wp-content/uploads/2018/05/word-image-3813-1024x483.png 1024w" sizes="(max-width: 1051px) 100vw, 1051px" /></p>
<p>
  ④测试查看
</p>
<p><img loading="lazy" decoding="async" width="750" height="236" src="/wp-content/uploads/2018/05/word-image-3814.png" class="wp-image-4276" srcset="/wp-content/uploads/2018/05/word-image-3814.png 750w, /wp-content/uploads/2018/05/word-image-3814-300x94.png 300w" sizes="(max-width: 750px) 100vw, 750px" /></p>
<h2>短信注册的流程</h2>
<p><img loading="lazy" decoding="async" width="1066" height="452" src="/wp-content/uploads/2018/05/word-image-3815.png" class="wp-image-4277" srcset="/wp-content/uploads/2018/05/word-image-3815.png 1066w, /wp-content/uploads/2018/05/word-image-3815-300x127.png 300w, /wp-content/uploads/2018/05/word-image-3815-768x326.png 768w, /wp-content/uploads/2018/05/word-image-3815-1024x434.png 1024w" sizes="(max-width: 1066px) 100vw, 1066px" /></p>
<h2>项目中实现短信注册</h2>
<h3>将发送短信封装成为函数</h3>
<p>
  ①拷贝SDK类文件
</p>
<p><img loading="lazy" decoding="async" width="915" height="337" src="/wp-content/uploads/2018/05/word-image-3816.png" class="wp-image-4278" srcset="/wp-content/uploads/2018/05/word-image-3816.png 915w, /wp-content/uploads/2018/05/word-image-3816-300x110.png 300w, /wp-content/uploads/2018/05/word-image-3816-768x283.png 768w" sizes="(max-width: 915px) 100vw, 915px" /></p>
<p>
  ②创建发送短信的函数
</p>
<p><img loading="lazy" decoding="async" width="1068" height="671" src="/wp-content/uploads/2018/05/word-image-3817.png" class="wp-image-4279" srcset="/wp-content/uploads/2018/05/word-image-3817.png 1068w, /wp-content/uploads/2018/05/word-image-3817-300x188.png 300w, /wp-content/uploads/2018/05/word-image-3817-768x483.png 768w, /wp-content/uploads/2018/05/word-image-3817-1024x643.png 1024w" sizes="(max-width: 1068px) 100vw, 1068px" /><br />
<img loading="lazy" decoding="async" width="1077" height="500" src="/wp-content/uploads/2018/05/word-image-3818.png" class="wp-image-4280" srcset="/wp-content/uploads/2018/05/word-image-3818.png 1077w, /wp-content/uploads/2018/05/word-image-3818-300x139.png 300w, /wp-content/uploads/2018/05/word-image-3818-768x357.png 768w, /wp-content/uploads/2018/05/word-image-3818-1024x475.png 1024w" sizes="(max-width: 1077px) 100vw, 1077px" /><br />
<img loading="lazy" decoding="async" width="1026" height="170" src="/wp-content/uploads/2018/05/word-image-3819.png" class="wp-image-4281" srcset="/wp-content/uploads/2018/05/word-image-3819.png 1026w, /wp-content/uploads/2018/05/word-image-3819-300x50.png 300w, /wp-content/uploads/2018/05/word-image-3819-768x127.png 768w, /wp-content/uploads/2018/05/word-image-3819-1024x170.png 1024w" sizes="(max-width: 1026px) 100vw, 1026px" /></p>
<p>
  ③编写测试代码
</p>
<p><img loading="lazy" decoding="async" width="1083" height="395" src="/wp-content/uploads/2018/05/word-image-3820.png" class="wp-image-4282" srcset="/wp-content/uploads/2018/05/word-image-3820.png 1083w, /wp-content/uploads/2018/05/word-image-3820-300x109.png 300w, /wp-content/uploads/2018/05/word-image-3820-768x280.png 768w, /wp-content/uploads/2018/05/word-image-3820-1024x373.png 1024w" sizes="(max-width: 1083px) 100vw, 1083px" /><br />
<img loading="lazy" decoding="async" width="583" height="167" src="/wp-content/uploads/2018/05/word-image-3821.png" class="wp-image-4283" srcset="/wp-content/uploads/2018/05/word-image-3821.png 583w, /wp-content/uploads/2018/05/word-image-3821-300x86.png 300w" sizes="(max-width: 583px) 100vw, 583px" /></p>
<h3>正式使用短信验证码注册</h3>
<p>
  ①修改注册表单
</p>
<p><img loading="lazy" decoding="async" width="1128" height="700" src="/wp-content/uploads/2018/05/word-image-3822.png" class="wp-image-4284" srcset="/wp-content/uploads/2018/05/word-image-3822.png 1128w, /wp-content/uploads/2018/05/word-image-3822-300x186.png 300w, /wp-content/uploads/2018/05/word-image-3822-768x477.png 768w, /wp-content/uploads/2018/05/word-image-3822-1024x635.png 1024w" sizes="(max-width: 1128px) 100vw, 1128px" /></p>
<p>
  ②绑定点击事件触发ajax
</p>
<p><img loading="lazy" decoding="async" width="924" height="676" src="/wp-content/uploads/2018/05/word-image-3823.png" class="wp-image-4285" srcset="/wp-content/uploads/2018/05/word-image-3823.png 924w, /wp-content/uploads/2018/05/word-image-3823-300x219.png 300w, /wp-content/uploads/2018/05/word-image-3823-768x562.png 768w" sizes="(max-width: 924px) 100vw, 924px" /></p>
<p>
  ③创建方法实现请求接口发送短信
</p>
<p><img loading="lazy" decoding="async" width="1090" height="673" src="/wp-content/uploads/2018/05/word-image-3824.png" class="wp-image-4286" srcset="/wp-content/uploads/2018/05/word-image-3824.png 1090w, /wp-content/uploads/2018/05/word-image-3824-300x185.png 300w, /wp-content/uploads/2018/05/word-image-3824-768x474.png 768w, /wp-content/uploads/2018/05/word-image-3824-1024x632.png 1024w" sizes="(max-width: 1090px) 100vw, 1090px" /><br />
<img loading="lazy" decoding="async" width="1048" height="343" src="/wp-content/uploads/2018/05/word-image-3825.png" class="wp-image-4287" srcset="/wp-content/uploads/2018/05/word-image-3825.png 1048w, /wp-content/uploads/2018/05/word-image-3825-300x98.png 300w, /wp-content/uploads/2018/05/word-image-3825-768x251.png 768w, /wp-content/uploads/2018/05/word-image-3825-1024x335.png 1024w" sizes="(max-width: 1048px) 100vw, 1048px" /></p>
<p>
  ④查看session中的内容
</p>
<p><img loading="lazy" decoding="async" width="881" height="334" src="/wp-content/uploads/2018/05/word-image-3826.png" class="wp-image-4288" srcset="/wp-content/uploads/2018/05/word-image-3826.png 881w, /wp-content/uploads/2018/05/word-image-3826-300x114.png 300w, /wp-content/uploads/2018/05/word-image-3826-768x291.png 768w" sizes="(max-width: 881px) 100vw, 881px" /><br />
<img loading="lazy" decoding="async" width="521" height="200" src="/wp-content/uploads/2018/05/word-image-3827.png" class="wp-image-4289" srcset="/wp-content/uploads/2018/05/word-image-3827.png 521w, /wp-content/uploads/2018/05/word-image-3827-300x115.png 300w" sizes="(max-width: 521px) 100vw, 521px" /></p>
<p>
  ⑤实现倒计时效果
</p>
<p><img loading="lazy" decoding="async" width="1066" height="707" src="/wp-content/uploads/2018/05/word-image-3828.png" class="wp-image-4290" srcset="/wp-content/uploads/2018/05/word-image-3828.png 1066w, /wp-content/uploads/2018/05/word-image-3828-300x199.png 300w, /wp-content/uploads/2018/05/word-image-3828-768x509.png 768w, /wp-content/uploads/2018/05/word-image-3828-1024x679.png 1024w" sizes="(max-width: 1066px) 100vw, 1066px" /><br />
<img loading="lazy" decoding="async" width="788" height="408" src="/wp-content/uploads/2018/05/word-image-3829.png" class="wp-image-4291" srcset="/wp-content/uploads/2018/05/word-image-3829.png 788w, /wp-content/uploads/2018/05/word-image-3829-300x155.png 300w, /wp-content/uploads/2018/05/word-image-3829-768x398.png 768w" sizes="(max-width: 788px) 100vw, 788px" /></p>
<h2>手机短信注册入库</h2>
<p>
  ①修改表结构
</p>
<p><img loading="lazy" decoding="async" width="783" height="386" src="/wp-content/uploads/2018/05/word-image-3830.png" class="wp-image-4292" srcset="/wp-content/uploads/2018/05/word-image-3830.png 783w, /wp-content/uploads/2018/05/word-image-3830-300x148.png 300w, /wp-content/uploads/2018/05/word-image-3830-768x379.png 768w" sizes="(max-width: 783px) 100vw, 783px" /></p>
<p>
  ②修改自定义模型中字段
</p>
<p><img loading="lazy" decoding="async" width="1018" height="429" src="/wp-content/uploads/2018/05/word-image-3831.png" class="wp-image-4293" srcset="/wp-content/uploads/2018/05/word-image-3831.png 1018w, /wp-content/uploads/2018/05/word-image-3831-300x126.png 300w, /wp-content/uploads/2018/05/word-image-3831-768x324.png 768w" sizes="(max-width: 1018px) 100vw, 1018px" /></p>
<p>
  ③实现注册入库
</p>
<p><img loading="lazy" decoding="async" width="1076" height="613" src="/wp-content/uploads/2018/05/word-image-3832.png" class="wp-image-4294" srcset="/wp-content/uploads/2018/05/word-image-3832.png 1076w, /wp-content/uploads/2018/05/word-image-3832-300x171.png 300w, /wp-content/uploads/2018/05/word-image-3832-768x438.png 768w, /wp-content/uploads/2018/05/word-image-3832-1024x583.png 1024w" sizes="(max-width: 1076px) 100vw, 1076px" /><br />
<img loading="lazy" decoding="async" width="1066" height="492" src="/wp-content/uploads/2018/05/word-image-3833.png" class="wp-image-4295" srcset="/wp-content/uploads/2018/05/word-image-3833.png 1066w, /wp-content/uploads/2018/05/word-image-3833-300x138.png 300w, /wp-content/uploads/2018/05/word-image-3833-768x354.png 768w, /wp-content/uploads/2018/05/word-image-3833-1024x473.png 1024w" sizes="(max-width: 1066px) 100vw, 1066px" /></p>
<p>
  注册后查看数据
</p>
<p><img loading="lazy" decoding="async" width="847" height="317" src="/wp-content/uploads/2018/05/word-image-3834.png" class="wp-image-4296" srcset="/wp-content/uploads/2018/05/word-image-3834.png 847w, /wp-content/uploads/2018/05/word-image-3834-300x112.png 300w, /wp-content/uploads/2018/05/word-image-3834-768x287.png 768w" sizes="(max-width: 847px) 100vw, 847px" /></p>
<h1>购物车下单</h1>
<h2>3.1、显示结算页</h2>
<p>
  ①修改购物车中的结算连接
</p>
<p><img loading="lazy" decoding="async" width="1071" height="487" src="/wp-content/uploads/2018/05/word-image-3835.png" class="wp-image-4297" srcset="/wp-content/uploads/2018/05/word-image-3835.png 1071w, /wp-content/uploads/2018/05/word-image-3835-300x136.png 300w, /wp-content/uploads/2018/05/word-image-3835-768x349.png 768w, /wp-content/uploads/2018/05/word-image-3835-1024x466.png 1024w" sizes="(max-width: 1071px) 100vw, 1071px" /></p>
<p>
  ②创建方法校验是否登录
</p>
<p><img loading="lazy" decoding="async" width="984" height="585" src="/wp-content/uploads/2018/05/word-image-3836.png" class="wp-image-4298" srcset="/wp-content/uploads/2018/05/word-image-3836.png 984w, /wp-content/uploads/2018/05/word-image-3836-300x178.png 300w, /wp-content/uploads/2018/05/word-image-3836-768x457.png 768w" sizes="(max-width: 984px) 100vw, 984px" /></p>
<p>
  ③创建Order控制器方法
</p>
<p><img loading="lazy" decoding="async" width="980" height="611" src="/wp-content/uploads/2018/05/word-image-3837.png" class="wp-image-4299" srcset="/wp-content/uploads/2018/05/word-image-3837.png 980w, /wp-content/uploads/2018/05/word-image-3837-300x187.png 300w, /wp-content/uploads/2018/05/word-image-3837-768x479.png 768w" sizes="(max-width: 980px) 100vw, 980px" /></p>
<p>
  ④处理模板显示数据
</p>
<p><img loading="lazy" decoding="async" width="1087" height="695" src="/wp-content/uploads/2018/05/word-image-3838.png" class="wp-image-4300" srcset="/wp-content/uploads/2018/05/word-image-3838.png 1087w, /wp-content/uploads/2018/05/word-image-3838-300x192.png 300w, /wp-content/uploads/2018/05/word-image-3838-768x491.png 768w, /wp-content/uploads/2018/05/word-image-3838-1024x655.png 1024w" sizes="(max-width: 1087px) 100vw, 1087px" /><br />
<img loading="lazy" decoding="async" width="1263" height="665" src="/wp-content/uploads/2018/05/word-image-3839.png" class="wp-image-4301" srcset="/wp-content/uploads/2018/05/word-image-3839.png 1263w, /wp-content/uploads/2018/05/word-image-3839-300x158.png 300w, /wp-content/uploads/2018/05/word-image-3839-768x404.png 768w, /wp-content/uploads/2018/05/word-image-3839-1024x539.png 1024w" sizes="(max-width: 1263px) 100vw, 1263px" /></p>
<h2>3.2、结算下单</h2>
<h3>3.2.1、数据表创建</h3>
<p>
  ①创建订单总表
</p>
<p>
  CREATE TABLE `shop_order` (
</p>
<p>
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
</p>
<p>
    `user_id` int(11) NOT NULL DEFAULT &#8216;0&#8217;,
</p>
<p>
    `tel` char(11) NOT NULL DEFAULT &#8221; COMMENT &#8216;联系电话&#8217;,
</p>
<p>
    `address` varchar(255) NOT NULL DEFAULT &#8221; COMMENT &#8216;收货人地址&#8217;,
</p>
<p>
    `shr` varchar(255) NOT NULL DEFAULT &#8221; COMMENT &#8216;收货人&#8217;,
</p>
<p>
    `total_price` decimal(10,2) NOT NULL DEFAULT &#8216;0.00&#8217; COMMENT &#8216;总价格&#8217;,
</p>
<p>
    `addtime` int(11) NOT NULL DEFAULT &#8216;0&#8217; COMMENT &#8216;下单时间&#8217;,
</p>
<p>
    `com` char(10) NOT NULL DEFAULT &#8221; COMMENT &#8216;快递公司的编号&#8217;,
</p>
<p>
    `no` varchar(255) NOT NULL DEFAULT &#8221; COMMENT &#8216;快递的运单号&#8217;,
</p>
<p>
    `status` tinyint(4) NOT NULL DEFAULT &#8216;0&#8217; COMMENT &#8216;订单的状态 0表示下单  1已支付 2、已发货&#8217;,
</p>
<p>
    PRIMARY KEY (`id`)
</p>
<p>
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
</p>
<p>
  ②创建订单详情表
</p>
<p>
  CREATE TABLE `shop_order_detail` (
</p>
<p>
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
</p>
<p>
    `order_id` int(11) NOT NULL DEFAULT &#8216;0&#8217; COMMENT &#8216;订单ID对应order表中的ID字段&#8217;,
</p>
<p>
    `goods_id` int(11) NOT NULL DEFAULT &#8216;0&#8217; COMMENT &#8216;商品ID&#8217;,
</p>
<p>
    `goods_attr_id` varchar(255) NOT NULL DEFAULT &#8221; COMMENT &#8216;商品属性值的ID组合&#8217;,
</p>
<p>
    `goods_count` int(11) NOT NULL DEFAULT &#8216;0&#8217; COMMENT &#8216;购买的数量&#8217;,
</p>
<p>
    PRIMARY KEY (`id`)
</p>
<p>
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
</p>
<h3>3.2.2、实现订单的入口</h3>
<p>
  ①修改表单提交
</p>
<p>
  处理提交的地址
</p>
<p><img loading="lazy" decoding="async" width="1061" height="388" src="/wp-content/uploads/2018/05/word-image-3840.png" class="wp-image-4302" srcset="/wp-content/uploads/2018/05/word-image-3840.png 1061w, /wp-content/uploads/2018/05/word-image-3840-300x110.png 300w, /wp-content/uploads/2018/05/word-image-3840-768x281.png 768w, /wp-content/uploads/2018/05/word-image-3840-1024x374.png 1024w" sizes="(max-width: 1061px) 100vw, 1061px" /></p>
<p>
  设置为表单提交
</p>
<p><img loading="lazy" decoding="async" width="1120" height="702" src="/wp-content/uploads/2018/05/word-image-3841.png" class="wp-image-4303" srcset="/wp-content/uploads/2018/05/word-image-3841.png 1120w, /wp-content/uploads/2018/05/word-image-3841-300x188.png 300w, /wp-content/uploads/2018/05/word-image-3841-768x481.png 768w, /wp-content/uploads/2018/05/word-image-3841-1024x642.png 1024w" sizes="(max-width: 1120px) 100vw, 1120px" /></p>
<p>
  ②创建方法实现订单数据入库功能
</p>
<p><img loading="lazy" decoding="async" width="910" height="613" src="/wp-content/uploads/2018/05/word-image-3842.png" class="wp-image-4304" srcset="/wp-content/uploads/2018/05/word-image-3842.png 910w, /wp-content/uploads/2018/05/word-image-3842-300x202.png 300w, /wp-content/uploads/2018/05/word-image-3842-768x517.png 768w" sizes="(max-width: 910px) 100vw, 910px" /></p>
<p>
  ③创建模型方法
</p>
<p><img loading="lazy" decoding="async" width="1092" height="679" src="/wp-content/uploads/2018/05/word-image-3843.png" class="wp-image-4305" srcset="/wp-content/uploads/2018/05/word-image-3843.png 1092w, /wp-content/uploads/2018/05/word-image-3843-300x187.png 300w, /wp-content/uploads/2018/05/word-image-3843-768x478.png 768w, /wp-content/uploads/2018/05/word-image-3843-1024x637.png 1024w" sizes="(max-width: 1092px) 100vw, 1092px" /><br />
<img loading="lazy" decoding="async" width="1065" height="547" src="/wp-content/uploads/2018/05/word-image-3844.png" class="wp-image-4306" srcset="/wp-content/uploads/2018/05/word-image-3844.png 1065w, /wp-content/uploads/2018/05/word-image-3844-300x154.png 300w, /wp-content/uploads/2018/05/word-image-3844-768x394.png 768w, /wp-content/uploads/2018/05/word-image-3844-1024x526.png 1024w" sizes="(max-width: 1065px) 100vw, 1065px" /><br />
<img loading="lazy" decoding="async" width="1079" height="267" src="/wp-content/uploads/2018/05/word-image-3845.png" class="wp-image-4307" srcset="/wp-content/uploads/2018/05/word-image-3845.png 1079w, /wp-content/uploads/2018/05/word-image-3845-300x74.png 300w, /wp-content/uploads/2018/05/word-image-3845-768x190.png 768w, /wp-content/uploads/2018/05/word-image-3845-1024x253.png 1024w" sizes="(max-width: 1079px) 100vw, 1079px" /></p>
<h1>面向接口编程</h1>
<h2>面向接口编程介绍</h2>
<p>
  当有多个子项目存在时，如果有业务逻辑需要修改，对应的每个子项目都需要进行代码的修改。此方式就会比较麻烦。考虑项目的扩展性。可以对每一个子项目按照MVC值保留 V与C。一旦涉及到数据操作。全部通过调用接口实现。对于接口组合到一起就是API项目
</p>
<p><img loading="lazy" decoding="async" width="840" height="452" src="/wp-content/uploads/2018/05/word-image-3846.png" class="wp-image-4308" srcset="/wp-content/uploads/2018/05/word-image-3846.png 840w, /wp-content/uploads/2018/05/word-image-3846-300x161.png 300w, /wp-content/uploads/2018/05/word-image-3846-768x413.png 768w" sizes="(max-width: 840px) 100vw, 840px" /></p>
<h2>接口项目部署</h2>
<p>
  ①下载TP5的源码
</p>
<p><img loading="lazy" decoding="async" width="910" height="507" src="/wp-content/uploads/2018/05/word-image-3847.png" class="wp-image-4309" srcset="/wp-content/uploads/2018/05/word-image-3847.png 910w, /wp-content/uploads/2018/05/word-image-3847-300x167.png 300w, /wp-content/uploads/2018/05/word-image-3847-768x428.png 768w" sizes="(max-width: 910px) 100vw, 910px" /></p>
<p>
  ②拷贝TP源码到项目目录下
</p>
<p><img loading="lazy" decoding="async" width="1043" height="507" src="/wp-content/uploads/2018/05/word-image-3848.png" class="wp-image-4310" srcset="/wp-content/uploads/2018/05/word-image-3848.png 1043w, /wp-content/uploads/2018/05/word-image-3848-300x146.png 300w, /wp-content/uploads/2018/05/word-image-3848-768x373.png 768w, /wp-content/uploads/2018/05/word-image-3848-1024x498.png 1024w" sizes="(max-width: 1043px) 100vw, 1043px" /></p>
<p>
  ③配置虚拟主机
</p>
<p><img loading="lazy" decoding="async" width="899" height="480" src="/wp-content/uploads/2018/05/word-image-3849.png" class="wp-image-4311" srcset="/wp-content/uploads/2018/05/word-image-3849.png 899w, /wp-content/uploads/2018/05/word-image-3849-300x160.png 300w, /wp-content/uploads/2018/05/word-image-3849-768x410.png 768w" sizes="(max-width: 899px) 100vw, 899px" /></p>
<p>
  ③设置host文件
</p>
<p><img loading="lazy" decoding="async" width="560" height="448" src="/wp-content/uploads/2018/05/word-image-3850.png" class="wp-image-4312" srcset="/wp-content/uploads/2018/05/word-image-3850.png 560w, /wp-content/uploads/2018/05/word-image-3850-300x240.png 300w" sizes="(max-width: 560px) 100vw, 560px" /></p>
<p>
  ④重启Apache访问测试
</p>
<p><img loading="lazy" decoding="async" width="960" height="496" src="/wp-content/uploads/2018/05/word-image-3851.png" class="wp-image-4313" srcset="/wp-content/uploads/2018/05/word-image-3851.png 960w, /wp-content/uploads/2018/05/word-image-3851-300x155.png 300w, /wp-content/uploads/2018/05/word-image-3851-768x397.png 768w" sizes="(max-width: 960px) 100vw, 960px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/4240.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
