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

<channel>
	<title>支付宝 &#8211; 个人随笔</title>
	<atom:link href="/label/%E6%94%AF%E4%BB%98%E5%AE%9D/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description></description>
	<lastBuildDate>Sat, 19 May 2018 15:33:26 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.1</generator>

<image>
	<url>/wp-content/uploads/2022/01/cropped-截屏2022-01-01-18.57.09-32x32.png</url>
	<title>支付宝 &#8211; 个人随笔</title>
	<link>/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Laravel在线教育平台（六）数据字典、数据迁移、后台试卷管理、试卷导出、答题处理、支付宝</title>
		<link>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/5738.html</link>
					<comments>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/5738.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 15:33:26 +0000</pubDate>
				<category><![CDATA[Laravel]]></category>
		<category><![CDATA[Laravel在线教育平台]]></category>
		<category><![CDATA[后台框架]]></category>
		<category><![CDATA[后台试卷管理]]></category>
		<category><![CDATA[支付宝]]></category>
		<category><![CDATA[数据字典]]></category>
		<category><![CDATA[数据迁移]]></category>
		<category><![CDATA[答题处理]]></category>
		<category><![CDATA[试卷导出]]></category>
		<guid isPermaLink="false">/?p=5738</guid>

					<description><![CDATA[Laravel框架实战-在线教育平台（6） ︴准备 1、数据字典 后台试卷表 表名 paper 序号 字段 类 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1><a id="post-5738-_Toc488249285"></a>Laravel框架实战-在线教育平台（6）</h1>
<h1><a id="post-5738-_Toc488076574"></a>︴准备  </h1>
<h2>1、数据字典</h2>
<h3>后台试卷表</h3>
<table>
<tr>
<td>
<p><strong>表名</strong>
</p>
</td>
<td colspan="6">
<p>
  paper
</p>
</td>
</tr>
<tr>
<td>
<p><strong>序号</strong>
</p>
</td>
<td>
<p><strong>字段</strong>
</p>
</td>
<td>
<p><strong>类型</strong>
</p>
</td>
<td>
<p><strong>说明</strong>
</p>
</td>
<td>
<p><strong>空</strong>
</p>
</td>
<td>
<p><strong>默认值</strong>
</p>
</td>
<td>
<p><strong>主键</strong>
</p>
</td>
</tr>
<tr>
<td>
<p>
  1
</p>
</td>
<td>
<p>
  id
</p>
</td>
<td>
<p>
  int
</p>
</td>
<td>
<p>
  自增主键
</p>
</td>
<td>
<p>
  N
</p>
</td>
<td>
<p>
  N/A
</p>
</td>
<td>
<p>
  是
</p>
</td>
</tr>
<tr>
<td>
<p>
  2
</p>
</td>
<td>
<p>
  paper_name
</p>
</td>
<td>
<p>
  varchar(50)
</p>
</td>
<td>
<p>
  试卷名
</p>
</td>
<td>
<p>
  N
</p>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<p>
  3
</p>
</td>
<td>
<p>
  course_id
</p>
</td>
<td>
<p>
  tinyint
</p>
</td>
<td>
<p>
  关联课程ID，所属的课程
</p>
</td>
<td>
<p>
  N
</p>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<p>
  4
</p>
</td>
<td>
<p>
  score
</p>
</td>
<td>
<p>
  tinyint
</p>
</td>
<td>
<p>
  试卷总分
</p>
</td>
<td>
<p>
  N
</p>
</td>
<td>
<p>
  100
</p>
</td>
<td></td>
</tr>
<tr>
<td>
<p>
  5
</p>
</td>
<td>
<p>
  updated_at
</p>
</td>
<td>
<p>
  int
</p>
</td>
<td>
<p>
  创建于
</p>
</td>
<td>
<p>
  Y
</p>
</td>
<td>
<p>
  0
</p>
</td>
<td></td>
</tr>
<tr>
<td>
<p>
  6
</p>
</td>
<td>
<p>
  created_at
</p>
</td>
<td>
<p>
  int
</p>
</td>
<td>
<p>
  更新于
</p>
</td>
<td>
<p>
  Y
</p>
</td>
<td>
<p>
  0
</p>
</td>
<td></td>
</tr>
</table>
<h3>后台试题表</h3>
<table>
<tr>
<td>
<p><strong>表名</strong>
</p>
</td>
<td colspan="6">
<p>
  question
</p>
</td>
</tr>
<tr>
<td>
<p><strong>序号</strong>
</p>
</td>
<td>
<p><strong>字段</strong>
</p>
</td>
<td>
<p><strong>类型</strong>
</p>
</td>
<td>
<p><strong>说明</strong>
</p>
</td>
<td>
<p><strong>空</strong>
</p>
</td>
<td>
<p><strong>默认值</strong>
</p>
</td>
<td>
<p><strong>主键</strong>
</p>
</td>
</tr>
<tr>
<td>
<p>
  1
</p>
</td>
<td>
<p>
  id
</p>
</td>
<td>
<p>
  int
</p>
</td>
<td>
<p>
  自增主键
</p>
</td>
<td>
<p>
  N
</p>
</td>
<td>
<p>
  N/A
</p>
</td>
<td>
<p>
  是
</p>
</td>
</tr>
<tr>
<td>
<p>
  2
</p>
</td>
<td>
<p>
  type
</p>
</td>
<td>
<p>
  tinyint
</p>
</td>
<td>
<p>
  类型：1-单选，2-多选
</p>
</td>
<td>
<p>
  N
</p>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<p>
  3
</p>
</td>
<td>
<p>
  question
</p>
</td>
<td>
<p>
  varchar(255)
</p>
</td>
<td>
<p>
  试题具体内容
</p>
</td>
<td>
<p>
  N
</p>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<p>
  4
</p>
</td>
<td>
<p>
  paper_id
</p>
</td>
<td>
<p>
  tinyint
</p>
</td>
<td>
<p>
  关联试卷ID
</p>
</td>
<td>
<p>
  N
</p>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<p>
  5
</p>
</td>
<td>
<p>
  score
</p>
</td>
<td>
<p>
  tinyint
</p>
</td>
<td>
<p>
  该题总分
</p>
</td>
<td>
<p>
  N
</p>
</td>
<td>
<p>
  2
</p>
</td>
<td></td>
</tr>
<tr>
<td>
<p>
  6
</p>
</td>
<td>
<p>
  options
</p>
</td>
<td>
<p>
  varchar(255)
</p>
</td>
<td>
<p>
  选项内容
</p>
</td>
<td>
<p>
  N
</p>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<p>
  7
</p>
</td>
<td>
<p>
  answer
</p>
</td>
<td>
<p>
  varchar(1)
</p>
</td>
<td>
<p>
  正确答案
</p>
</td>
<td>
<p>
  N
</p>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<p>
  8
</p>
</td>
<td>
<p>
  remark
</p>
</td>
<td>
<p>
  varchar(255)
</p>
</td>
<td>
<p>
  试题备注说明
</p>
</td>
<td>
<p>
  Y
</p>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<p>
  9
</p>
</td>
<td>
<p>
  updated_at
</p>
</td>
<td>
<p>
  int
</p>
</td>
<td>
<p>
  创建于
</p>
</td>
<td>
<p>
  Y
</p>
</td>
<td>
<p>
  0
</p>
</td>
<td></td>
</tr>
<tr>
<td>
<p>
  10
</p>
</td>
<td>
<p>
  created_at
</p>
</td>
<td>
<p>
  int
</p>
</td>
<td>
<p>
  更新于
</p>
</td>
<td>
<p>
  Y
</p>
</td>
<td>
<p>
  0
</p>
</td>
<td></td>
</tr>
</table>
<h3>答题表</h3>
<table>
<tr>
<td>
<p><strong>表名</strong>
</p>
</td>
<td colspan="6">
<p>
  answer
</p>
</td>
</tr>
<tr>
<td>
<p><strong>序号</strong>
</p>
</td>
<td>
<p><strong>字段</strong>
</p>
</td>
<td>
<p><strong>类型</strong>
</p>
</td>
<td>
<p><strong>说明</strong>
</p>
</td>
<td>
<p><strong>空</strong>
</p>
</td>
<td>
<p><strong>默认值</strong>
</p>
</td>
<td>
<p><strong>主键</strong>
</p>
</td>
</tr>
<tr>
<td>
<p>
  1
</p>
</td>
<td>
<p>
  id
</p>
</td>
<td>
<p>
  int
</p>
</td>
<td>
<p>
  自增主键
</p>
</td>
<td>
<p>
  N
</p>
</td>
<td>
<p>
  N/A
</p>
</td>
<td>
<p>
  是
</p>
</td>
</tr>
<tr>
<td>
<p>
  2
</p>
</td>
<td>
<p>
  paper_id
</p>
</td>
<td>
<p>
  tinyint
</p>
</td>
<td>
<p>
  试卷ID
</p>
</td>
<td>
<p>
  N
</p>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<p>
  3
</p>
</td>
<td>
<p>
  question_id
</p>
</td>
<td>
<p>
  tinyint
</p>
</td>
<td>
<p>
  关联课程ID，所属的课程
</p>
</td>
<td>
<p>
  N
</p>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<p>
  4
</p>
</td>
<td>
<p>
  member_id
</p>
</td>
<td>
<p>
  tinyint
</p>
</td>
<td>
<p>
  会员ID
</p>
</td>
<td>
<p>
  N
</p>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<p>
  5
</p>
</td>
<td>
<p>
  is_correct
</p>
</td>
<td>
<p>
  tinyint
</p>
</td>
<td>
<p>
  是否正确：1-正确，2-错误
</p>
</td>
<td>
<p>
  N
</p>
</td>
<td>
<p>
  2
</p>
</td>
<td></td>
</tr>
<tr>
<td>
<p>
  6
</p>
</td>
<td>
<p>
  score
</p>
</td>
<td>
<p>
  tinyint
</p>
</td>
<td>
<p>
  得分
</p>
</td>
<td>
<p>
  N
</p>
</td>
<td>
<p>
  0
</p>
</td>
<td></td>
</tr>
<tr>
<td>
<p>
  7
</p>
</td>
<td>
<p>
  answer
</p>
</td>
<td>
<p>
  char(4)
</p>
</td>
<td>
<p>
  学生的答案
</p>
</td>
<td>
<p>
  Y
</p>
</td>
<td></td>
<td></td>
</tr>
<tr>
<td>
<p>
  8
</p>
</td>
<td>
<p>
  updated_at
</p>
</td>
<td>
<p>
  int
</p>
</td>
<td>
<p>
  创建于
</p>
</td>
<td>
<p>
  Y
</p>
</td>
<td>
<p>
  0
</p>
</td>
<td></td>
</tr>
<tr>
<td>
<p>
  9
</p>
</td>
<td>
<p>
  created_at
</p>
</td>
<td>
<p>
  int
</p>
</td>
<td>
<p>
  更新于
</p>
</td>
<td>
<p>
  Y
</p>
</td>
<td>
<p>
  0
</p>
</td>
<td></td>
</tr>
</table>
<h2>数据迁移</h2>
<p>
  步骤1：创建迁移文件（该迁移文件一次性创建三个表）
</p>
<p>
  步骤2：编写迁移文件
</p>
<p>
  步骤3：执行迁移文件
</p>
<p><img fetchpriority="high" decoding="async" width="1332" height="574" src="/wp-content/uploads/2018/05/word-image-5210.png" class="wp-image-5741" srcset="/wp-content/uploads/2018/05/word-image-5210.png 1332w, /wp-content/uploads/2018/05/word-image-5210-300x129.png 300w, /wp-content/uploads/2018/05/word-image-5210-768x331.png 768w, /wp-content/uploads/2018/05/word-image-5210-1024x441.png 1024w" sizes="(max-width: 1332px) 100vw, 1332px" /></p>
<p>
  &lt;?php
</p>
<p>
  use Illuminate\Support\Facades\Schema;
</p>
<p>
  use Illuminate\Database\Schema\Blueprint;
</p>
<p>
  use Illuminate\Database\Migrations\Migration;
</p>
<p>
  class CreateKaoshiTable extends Migration
</p>
<p>
  {
</p>
<p>
      /**
</p>
<p>
       * Run the migrations.
</p>
<p>
       *
</p>
<p>
       * @return void
</p>
<p>
       */
</p>
<p>
      public function up()
</p>
<p>
      {
</p>
<p>
          #试卷
</p>
<p>
          Schema::create(&#8216;paper&#8217;, function (Blueprint $table) {
</p>
<p>
              $table-&gt;increments(&#8216;id&#8217;);
</p>
<p>
              $table-&gt;string(&#8216;paper_name&#8217;, 50)-&gt;comment(&#8216;试卷名&#8217;);
</p>
<p>
              $table-&gt;unsignedTinyInteger(&#8216;course_id&#8217;)-&gt;comment(&#8216;关联课程ID，所属的课程&#8217;);
</p>
<p>
              $table-&gt;unsignedTinyInteger(&#8216;score&#8217;)-&gt;default(100)-&gt;comment(&#8216;试卷总分&#8217;);
</p>
<p>
              $table-&gt;unsignedInteger(&#8216;created_at&#8217;)-&gt;default(0)-&gt;comment(&#8216;创建于&#8217;);
</p>
<p>
              $table-&gt;unsignedInteger(&#8216;updated_at&#8217;)-&gt;default(0)-&gt;comment(&#8216;更新于&#8217;);
</p>
<p>
          });
</p>
<p>
          #试题
</p>
<p>
          Schema::create(&#8216;question&#8217;, function (Blueprint $table) {
</p>
<p>
              $table-&gt;increments(&#8216;id&#8217;);
</p>
<p>
              $table-&gt;unsignedTinyInteger(&#8216;type&#8217;)-&gt;default(1)-&gt;comment(&#8216;类型:1-单选,2-多选&#8217;);
</p>
<p>
              $table-&gt;unsignedTinyInteger(&#8216;paper_id&#8217;)-&gt;comment(&#8216;关联试卷ID&#8217;);
</p>
<p>
              $table-&gt;unsignedTinyInteger(&#8216;score&#8217;)-&gt;comment(&#8216;该题总分&#8217;);
</p>
<p>
              $table-&gt;string(&#8216;question&#8217;)-&gt;comment(&#8216;试题具体内容&#8217;);
</p>
<p>
              $table-&gt;string(&#8216;options&#8217;)-&gt;comment(&#8216;选项内容&#8217;);
</p>
<p>
              $table-&gt;string(&#8216;answer&#8217;)-&gt;comment(&#8216;正确答案&#8217;);
</p>
<p>
              $table-&gt;string(&#8216;remark&#8217;)-&gt;comment(&#8216;试题备注说明&#8217;);
</p>
<p>
              $table-&gt;unsignedInteger(&#8216;created_at&#8217;)-&gt;default(0)-&gt;comment(&#8216;创建于&#8217;);
</p>
<p>
              $table-&gt;unsignedInteger(&#8216;updated_at&#8217;)-&gt;default(0)-&gt;comment(&#8216;更新于&#8217;);
</p>
<p>
          });
</p>
<p>
          #答题表
</p>
<p>
          Schema::create(&#8216;answer&#8217;, function (Blueprint $table) {
</p>
<p>
              $table-&gt;increments(&#8216;id&#8217;);
</p>
<p>
              $table-&gt;unsignedTinyInteger(&#8216;paper_id&#8217;)-&gt;comment(&#8216;关联试卷ID&#8217;);
</p>
<p>
              $table-&gt;unsignedTinyInteger(&#8216;question_id&#8217;)-&gt;comment(&#8216;关联课程ID，所属的课程&#8217;);
</p>
<p>
              $table-&gt;unsignedTinyInteger(&#8216;member_id&#8217;)-&gt;comment(&#8216;会员ID&#8217;);
</p>
<p>
              $table-&gt;unsignedTinyInteger(&#8216;is_correct&#8217;)-&gt;comment(&#8216;是否正确:1-是,2-否&#8217;);
</p>
<p>
              $table-&gt;unsignedTinyInteger(&#8216;score&#8217;)-&gt;default(0)-&gt;comment(&#8216;得分&#8217;);
</p>
<p>
              $table-&gt;char(&#8216;answer&#8217;, 4)-&gt;comment(&#8216;学生的答案&#8217;);
</p>
<p>
              $table-&gt;unsignedInteger(&#8216;created_at&#8217;)-&gt;default(0)-&gt;comment(&#8216;创建于&#8217;);
</p>
<p>
              $table-&gt;unsignedInteger(&#8216;updated_at&#8217;)-&gt;default(0)-&gt;comment(&#8216;更新于&#8217;);
</p>
<p>
          });
</p>
<p>
      }
</p>
<p>
      /**
</p>
<p>
       * Reverse the migrations.
</p>
<p>
       *
</p>
<p>
       * @return void
</p>
<p>
       */
</p>
<p>
      public function down()
</p>
<p>
      {
</p>
<p>
          //
</p>
<p>
      }
</p>
<p>
  }
</p>
<p><img decoding="async" width="393" height="95" src="/wp-content/uploads/2018/05/word-image-5211.png" class="wp-image-5742" srcset="/wp-content/uploads/2018/05/word-image-5211.png 393w, /wp-content/uploads/2018/05/word-image-5211-300x73.png 300w" sizes="(max-width: 393px) 100vw, 393px" /></p>
<h2>模型</h2>
<p>
  paper
</p>
<p>
  &lt;?php
</p>
<p>
  namespace App\Http\Model;
</p>
<p>
  use Illuminate\Database\Eloquent\Model;
</p>
<p>
  class Paper extends Model
</p>
<p>
  {
</p>
<p>
      /**
</p>
<p>
       * 声明表名（注：laravel会自动加s所以自己声明覆盖）
</p>
<p>
       * @var string
</p>
<p>
       */
</p>
<p>
      protected $table = &#8216;paper&#8217;;
</p>
<p>
      /**
</p>
<p>
       * Unix时间戳形式填充创建于和更新于（注：模型默认托管时间但是是datetime类型）
</p>
<p>
       * @var string
</p>
<p>
       */
</p>
<p>
      protected $dateFormat = &#8216;U&#8217;;
</p>
<p>
      /**
</p>
<p>
       * 声明可批量设置的属性（注：当使用create静态方式时）
</p>
<p>
       * @var array
</p>
<p>
       */
</p>
<p>
      protected $fillable = [&#8216;paper_name&#8217;, &#8216;course_id&#8217;, &#8216;score&#8217;];
</p>
<p>
  }
</p>
<p>
  question
</p>
<p>
  &lt;?php
</p>
<p>
  namespace App\Http\Model;
</p>
<p>
  use Illuminate\Database\Eloquent\Model;
</p>
<p>
  class Question extends Model
</p>
<p>
  {
</p>
<p>
      /**
</p>
<p>
       * 声明表名（注：laravel会自动加s所以自己声明覆盖）
</p>
<p>
       * @var string
</p>
<p>
       */
</p>
<p>
      protected $table = &#8216;question&#8217;;
</p>
<p>
      /**
</p>
<p>
       * Unix时间戳形式填充创建于和更新于（注：模型默认托管时间但是是datetime类型）
</p>
<p>
       * @var string
</p>
<p>
       */
</p>
<p>
      protected $dateFormat = &#8216;U&#8217;;
</p>
<p>
      /**
</p>
<p>
       * 声明可批量设置的属性（注：当使用create静态方式时）
</p>
<p>
       * @var array
</p>
<p>
       */
</p>
<p>
      protected $fillable = [&#8216;type&#8217;, &#8216;paper_id&#8217;, &#8216;score&#8217;, &#8216;question&#8217;, &#8216;options&#8217;, &#8216;answer&#8217;, &#8216;remark&#8217;];
</p>
<p>
  }
</p>
<p>
  answer
</p>
<p>
  &lt;?php
</p>
<p>
  namespace App\Http\Model;
</p>
<p>
  use Illuminate\Database\Eloquent\Model;
</p>
<p>
  class Answer extends Model
</p>
<p>
  {
</p>
<p>
      /**
</p>
<p>
       * 声明表名（注：laravel会自动加s所以自己声明覆盖）
</p>
<p>
       * @var string
</p>
<p>
       */
</p>
<p>
      protected $table = &#8216;answer&#8217;;
</p>
<p>
      /**
</p>
<p>
       * Unix时间戳形式填充创建于和更新于（注：模型默认托管时间但是是datetime类型）
</p>
<p>
       * @var string
</p>
<p>
       */
</p>
<p>
      protected $dateFormat = &#8216;U&#8217;;
</p>
<p>
      /**
</p>
<p>
       * 声明可批量设置的属性（注：当使用create静态方式时）
</p>
<p>
       * @var array
</p>
<p>
       */
</p>
<p>
      protected $fillable = [&#8216;paper_id&#8217;, &#8216;question_id&#8217;, &#8216;member_id&#8217;, &#8216;is_correct&#8217;, &#8216;score&#8217;, &#8216;answer&#8217;];
</p>
<p>
  }
</p>
<h1><a id="post-5738-_Toc488249288"></a>一、后台试卷管理</h1>
<h2>1、设置添加试卷入口</h2>
<p><img decoding="async" width="1135" height="308" src="/wp-content/uploads/2018/05/word-image-5212.png" class="wp-image-5743" srcset="/wp-content/uploads/2018/05/word-image-5212.png 1135w, /wp-content/uploads/2018/05/word-image-5212-300x81.png 300w, /wp-content/uploads/2018/05/word-image-5212-768x208.png 768w, /wp-content/uploads/2018/05/word-image-5212-1024x278.png 1024w" sizes="(max-width: 1135px) 100vw, 1135px" /></p>
<p>
  &lt;dl id=&#8221;menu-tongji&#8221;&gt;
</p>
<p>
  		&lt;dt&gt;&lt;i class=&#8221;Hui-iconfont&#8221;&gt;&amp;#xe61a;&lt;/i&gt; 考试管理&lt;i class=&#8221;Hui-iconfont menu_dropdown-arrow&#8221;&gt;&amp;#xe6d5;&lt;/i&gt;&lt;/dt&gt;
</p>
<p>
  		&lt;dd&gt;
</p>
<p>
  			&lt;ul&gt;
</p>
<p>
  				&lt;li&gt;&lt;a data-href=&#8221;{{ url(&#8216;admin/paper/index&#8217;) }}&#8221; data-title=&#8221;试卷管理&#8221;   href=&#8221;javascript:void(0)&#8221;&gt;试卷管理&lt;/a&gt;&lt;/li&gt;
</p>
<p>
  				&lt;li&gt;&lt;a data-href=&#8221;{{ url(&#8216;admin/question/index&#8217;) }}&#8221; data-title=&#8221;试题管理&#8221;  href=&#8221;javascript:void(0)&#8221;&gt;试题管理&lt;/a&gt;&lt;/li&gt;
</p>
<p>
  		&lt;/ul&gt;
</p>
<p>
  	&lt;/dd&gt;
</p>
<p>
  &lt;/dl&gt;
</p>
<p><img loading="lazy" decoding="async" width="391" height="444" src="/wp-content/uploads/2018/05/word-image-5213.png" class="wp-image-5744" srcset="/wp-content/uploads/2018/05/word-image-5213.png 391w, /wp-content/uploads/2018/05/word-image-5213-264x300.png 264w" sizes="(max-width: 391px) 100vw, 391px" /></p>
<h2>列表</h2>
<ul>
<li>
    步骤1：定义路由
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="885" height="301" src="/wp-content/uploads/2018/05/word-image-5214.png" class="wp-image-5745" srcset="/wp-content/uploads/2018/05/word-image-5214.png 885w, /wp-content/uploads/2018/05/word-image-5214-300x102.png 300w, /wp-content/uploads/2018/05/word-image-5214-768x261.png 768w" sizes="(max-width: 885px) 100vw, 885px" /></p>
<ul>
<li>
    步骤2：创建控制器和方法、方法通过模型获取数据库所有数据，并传递给视图
  </li>
</ul>
<p>
  步骤1：修改模型，增加关联方法
</p>
<p><img loading="lazy" decoding="async" width="1102" height="449" src="/wp-content/uploads/2018/05/word-image-5215.png" class="wp-image-5746" srcset="/wp-content/uploads/2018/05/word-image-5215.png 1102w, /wp-content/uploads/2018/05/word-image-5215-300x122.png 300w, /wp-content/uploads/2018/05/word-image-5215-768x313.png 768w, /wp-content/uploads/2018/05/word-image-5215-1024x417.png 1024w" sizes="(max-width: 1102px) 100vw, 1102px" /></p>
<p>
  /**
</p>
<p>
   * 关联课程
</p>
<p>
   */
</p>
<p>
  public function course()
</p>
<p>
  {
</p>
<p>
      return $this-&gt;hasOne(&#8216;App\Http\Model\Course&#8217;, &#8216;id&#8217;, &#8216;course_id&#8217;);
</p>
<p>
  }
</p>
<p>
  步骤2：控制器代码
</p>
<p><img loading="lazy" decoding="async" width="939" height="544" src="/wp-content/uploads/2018/05/word-image-5216.png" class="wp-image-5747" srcset="/wp-content/uploads/2018/05/word-image-5216.png 939w, /wp-content/uploads/2018/05/word-image-5216-300x174.png 300w, /wp-content/uploads/2018/05/word-image-5216-768x445.png 768w" sizes="(max-width: 939px) 100vw, 939px" /></p>
<p>
  &lt;?php
</p>
<p>
  namespace App\Http\Controllers\Admin;
</p>
<p>
  use App\Http\Model\Paper;
</p>
<p>
  use Illuminate\Http\Request;
</p>
<p>
  use App\Http\Controllers\Controller;
</p>
<p>
  class PaperController extends Controller
</p>
<p>
  {
</p>
<p>
      //列表
</p>
<p>
      public function index()
</p>
<p>
      {
</p>
<p>
          //1.查询所有数据
</p>
<p>
          $papers = Paper::with(&#8216;course&#8217;)-&gt;get();
</p>
<p>
          //2.加载视图并传递数据
</p>
<p>
          return view(&#8216;admin.paper.index&#8217;, compact(&#8216;papers&#8217;));
</p>
<p>
      }
</p>
<p>
  }
</p>
<ul>
<li>
    步骤3：视图循环显示（注：页面随便复制一个功能的列表进行修改）
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1316" height="645" src="/wp-content/uploads/2018/05/word-image-5217.png" class="wp-image-5748" srcset="/wp-content/uploads/2018/05/word-image-5217.png 1316w, /wp-content/uploads/2018/05/word-image-5217-300x147.png 300w, /wp-content/uploads/2018/05/word-image-5217-768x376.png 768w, /wp-content/uploads/2018/05/word-image-5217-1024x502.png 1024w" sizes="(max-width: 1316px) 100vw, 1316px" /></p>
<p>
  &lt;!DOCTYPE HTML&gt;
</p>
<p>
  &lt;html&gt;
</p>
<p>
  &lt;head&gt;
</p>
<p>
  &lt;meta charset=&#8221;utf-8&#8243;&gt;
</p>
<p>
  &lt;meta name=&#8221;renderer&#8221; content=&#8221;webkit|ie-comp|ie-stand&#8221;&gt;
</p>
<p>
  &lt;meta http-equiv=&#8221;X-UA-Compatible&#8221; content=&#8221;IE=edge,chrome=1&#8243;&gt;
</p>
<p>
  &lt;meta name=&#8221;viewport&#8221; content=&#8221;width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no&#8221; /&gt;
</p>
<p>
  &lt;meta http-equiv=&#8221;Cache-Control&#8221; content=&#8221;no-siteapp&#8221; /&gt;
</p>
<p>
  &lt;!&#8211;[if lt IE 9]&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/html5shiv.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/respond.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;![endif]&#8211;&gt;
</p>
<p>
  &lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;{{ asset(&#8216;admin/static&#8217;) }}/h-ui/css/H-ui.min.css&#8221; /&gt;
</p>
<p>
  &lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;{{ asset(&#8216;admin/static&#8217;) }}/h-ui.admin/css/H-ui.admin.css&#8221; /&gt;
</p>
<p>
  &lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/Hui-iconfont/1.0.8/iconfont.css&#8221; /&gt;
</p>
<p>
  &lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;{{ asset(&#8216;admin/static&#8217;) }}/h-ui.admin/skin/default/skin.css&#8221; id=&#8221;skin&#8221; /&gt;
</p>
<p>
  &lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;{{ asset(&#8216;admin/static&#8217;) }}/h-ui.admin/css/style.css&#8221; /&gt;
</p>
<p>
  &lt;!&#8211;[if IE 6]&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/DD_belatedPNG_0.0.8a-min.js&#8221; &gt;&lt;/script&gt;
</p>
<p>
  &lt;script&gt;DD_belatedPNG.fix(&#8216;*&#8217;);&lt;/script&gt;
</p>
<p>
  &lt;![endif]&#8211;&gt;
</p>
<p>
  &lt;title&gt;试卷管理&lt;/title&gt;
</p>
<p>
  &lt;/head&gt;
</p>
<p>
  &lt;body&gt;
</p>
<p>
  &lt;nav class=&#8221;breadcrumb&#8221;&gt;&lt;i class=&#8221;Hui-iconfont&#8221;&gt;&amp;#xe67f;&lt;/i&gt; 首页 &lt;span class=&#8221;c-gray en&#8221;&gt;&amp;gt;&lt;/span&gt; 管理员管理 &lt;span class=&#8221;c-gray en&#8221;&gt;&amp;gt;&lt;/span&gt; 试卷管理 &lt;a class=&#8221;btn btn-success radius r&#8221; style=&#8221;line-height:1.6em;margin-top:3px&#8221; href=&#8221;javascript:location.replace(location.href);&#8221; title=&#8221;刷新&#8221; &gt;&lt;i class=&#8221;Hui-iconfont&#8221;&gt;&amp;#xe68f;&lt;/i&gt;&lt;/a&gt;&lt;/nav&gt;
</p>
<p>
  &lt;div class=&#8221;page-container&#8221;&gt;
</p>
<p>
  	&lt;div class=&#8221;text-c&#8221;&gt;
</p>
<p>
  		&lt;form class=&#8221;Huiform&#8221; method=&#8221;post&#8221; action=&#8221;&#8221; target=&#8221;_self&#8221;&gt;
</p>
<p>
  			&lt;input type=&#8221;text&#8221; class=&#8221;input-text&#8221; style=&#8221;width:250px&#8221; placeholder=&#8221;试卷名称&#8221; id=&#8221;search_content&#8221; name=&#8221;&#8221;&gt;
</p>
<p>
  			&lt;button type=&#8221;button&#8221; class=&#8221;btn btn-success&#8221; id=&#8221;search&#8221; name=&#8221;&#8221;&gt;&lt;i class=&#8221;Hui-iconfont&#8221;&gt;&amp;#xe665;&lt;/i&gt; 搜试卷节点&lt;/button&gt;
</p>
<p>
  		&lt;/form&gt;
</p>
<p>
  	&lt;/div&gt;
</p>
<p>
  	&lt;div class=&#8221;cl pd-5 bg-1 bk-gray mt-20&#8243;&gt;
</p>
<p>
  		 &lt;span class=&#8221;l&#8221;&gt;
</p>
<p>
  		 &lt;a href=&#8221;javascript:;&#8221; onclick=&#8221;datadel()&#8221; class=&#8221;btn btn-danger radius&#8221;&gt;
</p>
<p>
  		 	&lt;i class=&#8221;Hui-iconfont&#8221;&gt;&amp;#xe6e2;&lt;/i&gt; 批量删除
</p>
<p>
  		 &lt;/a&gt;
</p>
<p>
  		 &lt;a href=&#8221;javascript:;&#8221; onclick=&#8221;admin_permission_add(&#8216;添加试卷节点&#8217;,'{{ url(&#8216;admin/auth/add&#8217;) }}&#8217;,&#8217;400&#8242;,&#8217;360&#8242;)&#8221; class=&#8221;btn btn-primary radius&#8221;&gt;
</p>
<p>
  		 	&lt;i class=&#8221;Hui-iconfont&#8221;&gt;&amp;#xe600;&lt;/i&gt; 添加试卷节点
</p>
<p>
  		 &lt;/a&gt;
</p>
<p>
  		&lt;/span&gt;
</p>
<p>
  		&lt;span class=&#8221;r&#8221;&gt;共有数据：&lt;strong&gt;54&lt;/strong&gt; 条&lt;/span&gt; &lt;/div&gt;
</p>
<p>
  	&lt;table class=&#8221;table table-border table-bordered table-bg&#8221;&gt;
</p>
<p>
  		&lt;thead&gt;
</p>
<p>
  			&lt;tr&gt;
</p>
<p>
  				&lt;th scope=&#8221;col&#8221; colspan=&#8221;8&#8243;&gt;试卷节点&lt;/th&gt;
</p>
<p>
  			&lt;/tr&gt;
</p>
<p>
  			&lt;tr class=&#8221;text-c&#8221;&gt;
</p>
<p>
  				&lt;th width=&#8221;25&#8243;&gt;&lt;input type=&#8221;checkbox&#8221; name=&#8221;&#8221; value=&#8221;&#8221;&gt;&lt;/th&gt;
</p>
<p>
  				&lt;th&gt;ID&lt;/th&gt;
</p>
<p>
  				&lt;th&gt;试卷名&lt;/th&gt;
</p>
<p>
  				&lt;th&gt;所属的课程&lt;/th&gt;
</p>
<p>
  				&lt;th&gt;试卷总分&lt;/th&gt;
</p>
<p>
  				&lt;th&gt;创建于&lt;/th&gt;
</p>
<p>
  				&lt;th&gt;更新于&lt;/th&gt;
</p>
<p>
  				&lt;th width=&#8221;100&#8243;&gt;操作&lt;/th&gt;
</p>
<p>
  			&lt;/tr&gt;
</p>
<p>
  		&lt;/thead&gt;
</p>
<p>
  		&lt;tbody&gt;
</p>
<p>
  			@foreach ($papers as $paper)
</p>
<p>
  			&lt;tr class=&#8221;text-c&#8221;&gt;
</p>
<p>
  				&lt;td&gt;&lt;input type=&#8221;checkbox&#8221; value=&#8221;{{ $paper-&gt;id }}&#8221; name=&#8221;&#8221;&gt;&lt;/td&gt;
</p>
<p>
  				&lt;td&gt;{{ $paper-&gt;id }}&lt;/td&gt;
</p>
<p>
  				&lt;td&gt;{{ $paper-&gt;paper_name }}&lt;/td&gt;
</p>
<p>
  				&lt;!&#8211; &lt;td&gt;{{ $paper-&gt;course_id }}&lt;/td&gt; &#8211;&gt;
</p>
<p>
  				&lt;td&gt;{{ $paper-&gt;course-&gt;course_name }}&lt;/td&gt;
</p>
<p>
  				&lt;td&gt;{{ $paper-&gt;score }}&lt;/td&gt;
</p>
<p>
  				&lt;td&gt;{{ $paper-&gt;created_at }}&lt;/td&gt;
</p>
<p>
  				&lt;td&gt;{{ $paper-&gt;updated_at }}&lt;/td&gt;
</p>
<p>
  				&lt;td&gt;&lt;a title=&#8221;编辑&#8221; href=&#8221;javascript:;&#8221; onclick=&#8221;admin_permission_edit(&#8216;角色编辑&#8217;,&#8217;admin-permission-add.html&#8217;,&#8217;1&#8242;,&#8221;,&#8217;310&#8242;)&#8221; class=&#8221;ml-5&#8243; style=&#8221;text-decoration:none&#8221;&gt;&lt;i class=&#8221;Hui-iconfont&#8221;&gt;&amp;#xe6df;&lt;/i&gt;&lt;/a&gt; &lt;a title=&#8221;删除&#8221; href=&#8221;javascript:;&#8221; onclick=&#8221;admin_permission_del(this,&#8217;1&#8242;)&#8221; class=&#8221;ml-5&#8243; style=&#8221;text-decoration:none&#8221;&gt;&lt;i class=&#8221;Hui-iconfont&#8221;&gt;&amp;#xe6e2;&lt;/i&gt;&lt;/a&gt;&lt;/td&gt;
</p>
<p>
  			&lt;/tr&gt;
</p>
<p>
  			@endforeach
</p>
<p>
  		&lt;/tbody&gt;
</p>
<p>
  	&lt;/table&gt;
</p>
<p>
  &lt;/div&gt;
</p>
<p>
  &lt;!&#8211;_footer 作为公共模版分离出去&#8211;&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/jquery/1.9.1/jquery.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/layer/2.4/layer.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/static&#8217;) }}/h-ui/js/H-ui.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/static&#8217;) }}/h-ui.admin/js/H-ui.admin.js&#8221;&gt;&lt;/script&gt; &lt;!&#8211;/_footer 作为公共模版分离出去&#8211;&gt;
</p>
<p>
  &lt;!&#8211;请在下方写此页面业务相关的脚本&#8211;&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/datatables/1.10.0/jquery.dataTables.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  var table = $(&#8216;table&#8217;).DataTable({
</p>
<p>
      iDisplayLength:2,	    //限制每页显示条数
</p>
<p>
      // searching : false, 		 //禁用搜索
</p>
<p>
      bLengthChange: false,   //去掉每页显示多少条数据方法
</p>
<p>
  });
</p>
<p>
  //客户端搜索功能更
</p>
<p>
  $(&#8216;#search&#8217;).click(function(){
</p>
<p>
      var search_content = $(&#8216;#search_content&#8217;).val();
</p>
<p>
      table.search(search_content).draw();
</p>
<p>
  });
</p>
<p>
  $(function(){
</p>
<p>
      $(&#8216;#DataTables_Table_0_filter&#8217;).hide();
</p>
<p>
  });
</p>
<p>
  /*
</p>
<p>
  	参数解释：
</p>
<p>
  	title	标题
</p>
<p>
  	url		请求的url
</p>
<p>
  	id		需要操作的数据id
</p>
<p>
  	w		弹出层宽度（缺省调默认值）
</p>
<p>
  	h		弹出层高度（缺省调默认值）
</p>
<p>
  */
</p>
<p>
  /*管理员-试卷-添加*/
</p>
<p>
  function admin_permission_add(title,url,w,h){
</p>
<p>
  	layer_show(title,url,w,h);
</p>
<p>
  }
</p>
<p>
  /*管理员-试卷-编辑*/
</p>
<p>
  function admin_permission_edit(title,url,id,w,h){
</p>
<p>
  	layer_show(title,url,w,h);
</p>
<p>
  }
</p>
<p>
  /*管理员-试卷-删除*/
</p>
<p>
  function admin_permission_del(obj,id){
</p>
<p>
  	layer.confirm(&#8216;确认要删除吗？&#8217;,function(index){
</p>
<p>
  		$.ajax({
</p>
<p>
  			type: &#8216;POST&#8217;,
</p>
<p>
  			url: &#8221;,
</p>
<p>
  			dataType: &#8216;json&#8217;,
</p>
<p>
  			success: function(data){
</p>
<p>
  				$(obj).parents(&#8220;tr&#8221;).remove();
</p>
<p>
  				layer.msg(&#8216;已删除!&#8217;,{icon:1,time:1000});
</p>
<p>
  			},
</p>
<p>
  			error:function(data) {
</p>
<p>
  				console.log(data.msg);
</p>
<p>
  			},
</p>
<p>
  		});
</p>
<p>
  	});
</p>
<p>
  }
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;/body&gt;
</p>
<p>
  &lt;/html&gt;
</p>
</p>
<h2>3、添加试卷</h2>
<h3>1）加载视图</h3>
<ul>
<li>
    步骤1：定义路由（支持get和post提价）
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1057" height="263" src="/wp-content/uploads/2018/05/word-image-5218.png" class="wp-image-5749" srcset="/wp-content/uploads/2018/05/word-image-5218.png 1057w, /wp-content/uploads/2018/05/word-image-5218-300x75.png 300w, /wp-content/uploads/2018/05/word-image-5218-768x191.png 768w, /wp-content/uploads/2018/05/word-image-5218-1024x255.png 1024w" sizes="(max-width: 1057px) 100vw, 1057px" /></p>
<ul>
<li>
    步骤2：更改试卷列表视图中的添加试卷按钮链接
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1230" height="223" src="/wp-content/uploads/2018/05/word-image-5219.png" class="wp-image-5750" srcset="/wp-content/uploads/2018/05/word-image-5219.png 1230w, /wp-content/uploads/2018/05/word-image-5219-300x54.png 300w, /wp-content/uploads/2018/05/word-image-5219-768x139.png 768w, /wp-content/uploads/2018/05/word-image-5219-1024x186.png 1024w" sizes="(max-width: 1230px) 100vw, 1230px" /></p>
<ul>
<li>
    步骤3：更改add.blade.php视图（因为之前是直接复制auth的添加视图）
  </li>
</ul>
<p>
  步骤1：修改控制器查询所有课程
</p>
<p><img loading="lazy" decoding="async" width="1035" height="465" src="/wp-content/uploads/2018/05/word-image-5220.png" class="wp-image-5751" srcset="/wp-content/uploads/2018/05/word-image-5220.png 1035w, /wp-content/uploads/2018/05/word-image-5220-300x135.png 300w, /wp-content/uploads/2018/05/word-image-5220-768x345.png 768w, /wp-content/uploads/2018/05/word-image-5220-1024x460.png 1024w" sizes="(max-width: 1035px) 100vw, 1035px" /></p>
<p>
  步骤2：创建视图
</p>
<p><img loading="lazy" decoding="async" width="1236" height="686" src="/wp-content/uploads/2018/05/word-image-5221.png" class="wp-image-5752" srcset="/wp-content/uploads/2018/05/word-image-5221.png 1236w, /wp-content/uploads/2018/05/word-image-5221-300x167.png 300w, /wp-content/uploads/2018/05/word-image-5221-768x426.png 768w, /wp-content/uploads/2018/05/word-image-5221-1024x568.png 1024w" sizes="(max-width: 1236px) 100vw, 1236px" /></p>
<p>
  &lt;!DOCTYPE HTML&gt;
</p>
<p>
  &lt;html&gt;
</p>
<p>
  &lt;head&gt;
</p>
<p>
  &lt;meta charset=&#8221;utf-8&#8243;&gt;
</p>
<p>
  &lt;meta name=&#8221;renderer&#8221; content=&#8221;webkit|ie-comp|ie-stand&#8221;&gt;
</p>
<p>
  &lt;meta http-equiv=&#8221;X-UA-Compatible&#8221; content=&#8221;IE=edge,chrome=1&#8243;&gt;
</p>
<p>
  &lt;meta name=&#8221;viewport&#8221; content=&#8221;width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no&#8221; /&gt;
</p>
<p>
  &lt;meta http-equiv=&#8221;Cache-Control&#8221; content=&#8221;no-siteapp&#8221; /&gt;
</p>
<p>
  &lt;!&#8211;[if lt IE 9]&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/html5shiv.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/respond.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;![endif]&#8211;&gt;
</p>
<p>
  &lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;{{ asset(&#8216;admin/static&#8217;) }}/h-ui/css/H-ui.min.css&#8221; /&gt;
</p>
<p>
  &lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;{{ asset(&#8216;admin/static&#8217;) }}/h-ui.admin/css/H-ui.admin.css&#8221; /&gt;
</p>
<p>
  &lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/Hui-iconfont/1.0.8/iconfont.css&#8221; /&gt;
</p>
<p>
  &lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;{{ asset(&#8216;admin/static&#8217;) }}/h-ui.admin/skin/default/skin.css&#8221; id=&#8221;skin&#8221; /&gt;
</p>
<p>
  &lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;{{ asset(&#8216;admin/static&#8217;) }}/h-ui.admin/css/style.css&#8221; /&gt;
</p>
<p>
  &lt;!&#8211;[if IE 6]&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/DD_belatedPNG_0.0.8a-min.js&#8221; &gt;&lt;/script&gt;
</p>
<p>
  &lt;script&gt;DD_belatedPNG.fix(&#8216;*&#8217;);&lt;/script&gt;
</p>
<p>
  &lt;![endif]&#8211;&gt;
</p>
<p>
  &lt;title&gt;添加管理员 &#8211; 管理员管理 &#8211; H-ui.admin v3.1&lt;/title&gt;
</p>
<p>
  &lt;meta name=&#8221;keywords&#8221; content=&#8221;H-ui.admin v3.1,H-ui网站后台模版,后台模版下载,后台管理系统模版,HTML后台模版下载&#8221;&gt;
</p>
<p>
  &lt;meta name=&#8221;description&#8221; content=&#8221;H-ui.admin v3.1，是一款由国人开发的轻量级扁平化网站后台模板，完全免费开源的网站后台管理系统模版，适合中小型CMS后台系统。&#8221;&gt;
</p>
<p>
  &lt;/head&gt;
</p>
<p>
  &lt;body&gt;
</p>
<p>
  &lt;article class=&#8221;page-container&#8221;&gt;
</p>
<p>
  	&lt;form class=&#8221;form form-horizontal&#8221; id=&#8221;form-admin-add&#8221;&gt;
</p>
<p>
  		{{ csrf_field() }}
</p>
<p>
  	&lt;div class=&#8221;row cl&#8221;&gt;
</p>
<p>
  		&lt;label class=&#8221;form-label col-xs-4 col-sm-3&#8243;&gt;&lt;span class=&#8221;c-red&#8221;&gt;*&lt;/span&gt;试卷名称：&lt;/label&gt;
</p>
<p>
  		&lt;div class=&#8221;formControls col-xs-8 col-sm-9&#8243;&gt;
</p>
<p>
  			&lt;input type=&#8221;text&#8221; class=&#8221;input-text&#8221; id=&#8221;paper_name&#8221; name=&#8221;paper_name&#8221;&gt;
</p>
<p>
  		&lt;/div&gt;
</p>
<p>
  	&lt;/div&gt;
</p>
<p>
  	&lt;div class=&#8221;row cl&#8221;&gt;
</p>
<p>
  		&lt;label class=&#8221;form-label col-xs-4 col-sm-3&#8243;&gt;&lt;span class=&#8221;c-red&#8221;&gt;*&lt;/span&gt;总分：&lt;/label&gt;
</p>
<p>
  		&lt;div class=&#8221;formControls col-xs-8 col-sm-9&#8243;&gt;
</p>
<p>
  			&lt;input type=&#8221;text&#8221; class=&#8221;input-text&#8221; autocomplete=&#8221;off&#8221;  id=&#8221;score&#8221; name=&#8221;score&#8221;&gt;
</p>
<p>
  		&lt;/div&gt;
</p>
<p>
  	&lt;/div&gt;
</p>
<p>
  	&lt;div class=&#8221;row cl&#8221;&gt;
</p>
<p>
  		&lt;label class=&#8221;form-label col-xs-4 col-sm-3&#8243;&gt;关联课程：&lt;/label&gt;
</p>
<p>
  		&lt;div class=&#8221;formControls col-xs-8 col-sm-9&#8243;&gt; &lt;span class=&#8221;select-box&#8221; style=&#8221;width:150px;&#8221;&gt;
</p>
<p>
  			&lt;select class=&#8221;select&#8221; name=&#8221;pid&#8221; size=&#8221;1&#8243;&gt;
</p>
<p>
  				@foreach ($courses as $course)
</p>
<p>
  				&lt;option value=&#8221;{{ $course-&gt;id }}&#8221;&gt;{{ $course-&gt;course_name }}&lt;/option&gt;
</p>
<p>
  				@endforeach
</p>
<p>
  			&lt;/select&gt;
</p>
<p>
  			&lt;/span&gt; &lt;/div&gt;
</p>
<p>
  	&lt;/div&gt;
</p>
<p>
  	&lt;div class=&#8221;row cl&#8221;&gt;
</p>
<p>
  		&lt;div class=&#8221;col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3&#8243;&gt;
</p>
<p>
  			&lt;input class=&#8221;btn btn-primary radius&#8221; type=&#8221;submit&#8221; value=&#8221;&amp;nbsp;&amp;nbsp;提交&amp;nbsp;&amp;nbsp;&#8221;&gt;
</p>
<p>
  		&lt;/div&gt;
</p>
<p>
  	&lt;/div&gt;
</p>
<p>
  	&lt;/form&gt;
</p>
<p>
  &lt;/article&gt;
</p>
<p>
  &lt;!&#8211;_footer 作为公共模版分离出去&#8211;&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/jquery/1.9.1/jquery.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/layer/2.4/layer.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/static&#8217;) }}/h-ui/js/H-ui.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/static&#8217;) }}/h-ui.admin/js/H-ui.admin.js&#8221;&gt;&lt;/script&gt; &lt;!&#8211;/_footer 作为公共模版分离出去&#8211;&gt;
</p>
<p>
  &lt;!&#8211;请在下方写此页面业务相关的脚本&#8211;&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/jquery.validation/1.14.0/jquery.validate.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/jquery.validation/1.14.0/validate-methods.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/jquery.validation/1.14.0/messages_zh.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  $(function(){
</p>
<p>
  	$(&#8216;.skin-minimal input&#8217;).iCheck({
</p>
<p>
  		checkboxClass: &#8216;icheckbox-blue&#8217;,
</p>
<p>
  		radioClass: &#8216;iradio-blue&#8217;,
</p>
<p>
  		increaseArea: &#8216;20%&#8217;
</p>
<p>
  	});
</p>
</p>
<p>
  	$(&#8220;#form-admin-add&#8221;).validate({
</p>
<p>
  		rules:{
</p>
<p>
  			atuh_name:{
</p>
<p>
  				required:true,
</p>
<p>
  				minlength:4,
</p>
<p>
  				maxlength:16
</p>
<p>
  			},
</p>
<p>
  			controller:{
</p>
<p>
  				required:true,
</p>
<p>
  			},
</p>
<p>
  			action:{
</p>
<p>
  				required:true,
</p>
<p>
  			},
</p>
<p>
  		},
</p>
<p>
  		onkeyup:false,
</p>
<p>
  		focusCleanup:true,
</p>
<p>
  		success:&#8221;valid&#8221;,
</p>
<p>
  		submitHandler:function(form){
</p>
<p>
  			$(form).ajaxSubmit({
</p>
<p>
  				type: &#8216;post&#8217;,
</p>
<p>
  				url: &#8220;{{ url(&#8216;admin/auth/add&#8217;) }}&#8221;,
</p>
<p>
  				success: function(data){
</p>
<p>
  				    //在父元素提示
</p>
<p>
                      parent.layer.msg(&#8216;添加成功!&#8217;,{icon:1,time:1000});
</p>
<p>
  					//成功则关闭窗口
</p>
<p>
                      var index = parent.layer.getFrameIndex(window.name);
</p>
<p>
                      parent.$(&#8216;.btn-refresh&#8217;).click();
</p>
<p>
                      parent.layer.close(index);
</p>
<p>
  				},
</p>
<p>
                  error: function(XmlHttpRequest, textStatus, errorThrown){
</p>
<p>
  					layer.msg(&#8216;error!&#8217;,{icon:1,time:1000});
</p>
<p>
  				}
</p>
<p>
  			});
</p>
<p>
  		}
</p>
<p>
  	});
</p>
<p>
  });
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;!&#8211;/请在上方写此页面业务相关的脚本&#8211;&gt;
</p>
<p>
  &lt;/body&gt;
</p>
<p>
  &lt;/html&gt;
</p>
<h3>数据处理</h3>
<ul>
<li>
    步骤1：修改视图表单提js插件
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="968" height="575" src="/wp-content/uploads/2018/05/word-image-5222.png" class="wp-image-5753" srcset="/wp-content/uploads/2018/05/word-image-5222.png 968w, /wp-content/uploads/2018/05/word-image-5222-300x178.png 300w, /wp-content/uploads/2018/05/word-image-5222-768x456.png 768w" sizes="(max-width: 968px) 100vw, 968px" /></p>
<ul>
<li>
    步骤2：控制器录入数据
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1097" height="552" src="/wp-content/uploads/2018/05/word-image-5223.png" class="wp-image-5754" srcset="/wp-content/uploads/2018/05/word-image-5223.png 1097w, /wp-content/uploads/2018/05/word-image-5223-300x151.png 300w, /wp-content/uploads/2018/05/word-image-5223-768x386.png 768w, /wp-content/uploads/2018/05/word-image-5223-1024x515.png 1024w" sizes="(max-width: 1097px) 100vw, 1097px" /></p>
<p>
  &lt;?php
</p>
<p>
  namespace App\Http\Controllers\Admin;
</p>
<p>
  use App\Http\Model\Paper;
</p>
<p>
  use App\Http\Model\Course;
</p>
<p>
  use Illuminate\Http\Request;
</p>
<p>
  use App\Http\Controllers\Controller;
</p>
<p>
  class PaperController extends Controller
</p>
<p>
  {
</p>
<p>
      //列表
</p>
<p>
      public function index()
</p>
<p>
      {
</p>
<p>
          //1.查询所有数据
</p>
<p>
          $papers = Paper::with(&#8216;course&#8217;)-&gt;get();
</p>
<p>
          //2.加载视图并传递数据
</p>
<p>
          return view(&#8216;admin.paper.index&#8217;, compact(&#8216;papers&#8217;));
</p>
<p>
      }
</p>
<p>
      //添加
</p>
<p>
      public function add(Request $request)
</p>
<p>
      {
</p>
<p>
          //1.判断HTTP请求类型
</p>
<p>
          if ($request-&gt;isMethod(&#8216;post&#8217;)) {
</p>
<p>
          	//2.接受数据
</p>
<p>
          	$postData = $request-&gt;only([&#8216;paper_name&#8217;, &#8216;score&#8217;, &#8216;course_id&#8217;]);
</p>
<p>
          	//3.创建数据
</p>
<p>
          	$rs = Paper::create($postData);
</p>
<p>
          	//4.判断
</p>
<p>
          	return $rs ? 1 : 0;
</p>
<p>
          } else {
</p>
<p>
              //2.查询所有课程
</p>
<p>
              $courses = Course::get();
</p>
<p>
              //3.加载视图并传递数据
</p>
<p>
              return view(&#8216;admin.paper.add&#8217;, compact(&#8216;courses&#8217;));
</p>
<p>
          }
</p>
<p>
      }
</p>
<p>
  }
</p>
<h1>后台试题管理</h1>
<h2>1、列表</h2>
<ul>
<li>
    步骤1：定义路由
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1082" height="367" src="/wp-content/uploads/2018/05/word-image-5224.png" class="wp-image-5755" srcset="/wp-content/uploads/2018/05/word-image-5224.png 1082w, /wp-content/uploads/2018/05/word-image-5224-300x102.png 300w, /wp-content/uploads/2018/05/word-image-5224-768x260.png 768w, /wp-content/uploads/2018/05/word-image-5224-1024x347.png 1024w" sizes="(max-width: 1082px) 100vw, 1082px" /></p>
<ul>
<li>
    步骤2：设置入口
  </li>
</ul>
<p>
  入口1
</p>
<p><img loading="lazy" decoding="async" width="1251" height="342" src="/wp-content/uploads/2018/05/word-image-5225.png" class="wp-image-5756" srcset="/wp-content/uploads/2018/05/word-image-5225.png 1251w, /wp-content/uploads/2018/05/word-image-5225-300x82.png 300w, /wp-content/uploads/2018/05/word-image-5225-768x210.png 768w, /wp-content/uploads/2018/05/word-image-5225-1024x280.png 1024w" sizes="(max-width: 1251px) 100vw, 1251px" /></p>
<p>
  入口2
</p>
<p><img loading="lazy" decoding="async" width="1207" height="410" src="/wp-content/uploads/2018/05/word-image-5226.png" class="wp-image-5757" srcset="/wp-content/uploads/2018/05/word-image-5226.png 1207w, /wp-content/uploads/2018/05/word-image-5226-300x102.png 300w, /wp-content/uploads/2018/05/word-image-5226-768x261.png 768w, /wp-content/uploads/2018/05/word-image-5226-1024x348.png 1024w" sizes="(max-width: 1207px) 100vw, 1207px" /></p>
<ul>
<li>
    步骤3：创建控制器和方法，并获取所有数据传递给视图
  </li>
</ul>
<ol>
<li>
  定义模型，关联试题
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1138" height="462" src="/wp-content/uploads/2018/05/word-image-5227.png" class="wp-image-5758" srcset="/wp-content/uploads/2018/05/word-image-5227.png 1138w, /wp-content/uploads/2018/05/word-image-5227-300x122.png 300w, /wp-content/uploads/2018/05/word-image-5227-768x312.png 768w, /wp-content/uploads/2018/05/word-image-5227-1024x416.png 1024w" sizes="(max-width: 1138px) 100vw, 1138px" /></p>
<p>
  2）控制器
</p>
<p><img loading="lazy" decoding="async" width="1146" height="510" src="/wp-content/uploads/2018/05/word-image-5228.png" class="wp-image-5759" srcset="/wp-content/uploads/2018/05/word-image-5228.png 1146w, /wp-content/uploads/2018/05/word-image-5228-300x134.png 300w, /wp-content/uploads/2018/05/word-image-5228-768x342.png 768w, /wp-content/uploads/2018/05/word-image-5228-1024x456.png 1024w" sizes="(max-width: 1146px) 100vw, 1146px" /></p>
<p>
  &lt;?php
</p>
<p>
  namespace App\Http\Controllers\Admin;
</p>
<p>
  use App\Http\Model\Question;
</p>
<p>
  use Illuminate\Http\Request;
</p>
<p>
  use App\Http\Controllers\Controller;
</p>
<p>
  class QuestionController extends Controller
</p>
<p>
  {
</p>
<p>
      //列表
</p>
<p>
      public function index(Request $request)
</p>
<p>
      {
</p>
<p>
          //1.接受试题ID：有-显示该试题的列表，无-显示所有试题
</p>
<p>
          $paper_id = $request-&gt;input(&#8216;paper_id&#8217;);
</p>
<p>
          //2.查询所有数据
</p>
<p>
          if ($paper_id) {
</p>
<p>
              $questions = Question::with(&#8216;paper&#8217;)-&gt;where(&#8216;paper_id&#8217;, $paper_id)-&gt;get();
</p>
<p>
          } else {
</p>
<p>
              $questions = Question::with(&#8216;paper&#8217;)-&gt;get();
</p>
<p>
          }
</p>
<p>
          //3.加载视图并传递数据
</p>
<p>
          return view(&#8216;admin.question.index&#8217;, compact(&#8216;questions&#8217;));
</p>
<p>
      }
</p>
<p>
  }
</p>
<ul>
<li>
    步骤4：常见视图循环显示数据
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1264" height="581" src="/wp-content/uploads/2018/05/word-image-5229.png" class="wp-image-5760" srcset="/wp-content/uploads/2018/05/word-image-5229.png 1264w, /wp-content/uploads/2018/05/word-image-5229-300x138.png 300w, /wp-content/uploads/2018/05/word-image-5229-768x353.png 768w, /wp-content/uploads/2018/05/word-image-5229-1024x471.png 1024w" sizes="(max-width: 1264px) 100vw, 1264px" /></p>
<p>
  &lt;!DOCTYPE HTML&gt;
</p>
<p>
  &lt;html&gt;
</p>
<p>
  &lt;head&gt;
</p>
<p>
  &lt;meta charset=&#8221;utf-8&#8243;&gt;
</p>
<p>
  &lt;meta name=&#8221;renderer&#8221; content=&#8221;webkit|ie-comp|ie-stand&#8221;&gt;
</p>
<p>
  &lt;meta http-equiv=&#8221;X-UA-Compatible&#8221; content=&#8221;IE=edge,chrome=1&#8243;&gt;
</p>
<p>
  &lt;meta name=&#8221;viewport&#8221; content=&#8221;width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no&#8221; /&gt;
</p>
<p>
  &lt;meta http-equiv=&#8221;Cache-Control&#8221; content=&#8221;no-siteapp&#8221; /&gt;
</p>
<p>
  &lt;!&#8211;[if lt IE 9]&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/html5shiv.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/respond.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;![endif]&#8211;&gt;
</p>
<p>
  &lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;{{ asset(&#8216;admin/static&#8217;) }}/h-ui/css/H-ui.min.css&#8221; /&gt;
</p>
<p>
  &lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;{{ asset(&#8216;admin/static&#8217;) }}/h-ui.admin/css/H-ui.admin.css&#8221; /&gt;
</p>
<p>
  &lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/Hui-iconfont/1.0.8/iconfont.css&#8221; /&gt;
</p>
<p>
  &lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;{{ asset(&#8216;admin/static&#8217;) }}/h-ui.admin/skin/default/skin.css&#8221; id=&#8221;skin&#8221; /&gt;
</p>
<p>
  &lt;link rel=&#8221;stylesheet&#8221; type=&#8221;text/css&#8221; href=&#8221;{{ asset(&#8216;admin/static&#8217;) }}/h-ui.admin/css/style.css&#8221; /&gt;
</p>
<p>
  &lt;!&#8211;[if IE 6]&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/DD_belatedPNG_0.0.8a-min.js&#8221; &gt;&lt;/script&gt;
</p>
<p>
  &lt;script&gt;DD_belatedPNG.fix(&#8216;*&#8217;);&lt;/script&gt;
</p>
<p>
  &lt;![endif]&#8211;&gt;
</p>
<p>
  &lt;title&gt;试卷管理&lt;/title&gt;
</p>
<p>
  &lt;/head&gt;
</p>
<p>
  &lt;body&gt;
</p>
<p>
  &lt;nav class=&#8221;breadcrumb&#8221;&gt;&lt;i class=&#8221;Hui-iconfont&#8221;&gt;&amp;#xe67f;&lt;/i&gt; 首页 &lt;span class=&#8221;c-gray en&#8221;&gt;&amp;gt;&lt;/span&gt; 管理员管理 &lt;span class=&#8221;c-gray en&#8221;&gt;&amp;gt;&lt;/span&gt; 试卷管理 &lt;a class=&#8221;btn btn-success radius r&#8221; style=&#8221;line-height:1.6em;margin-top:3px&#8221; href=&#8221;javascript:location.replace(location.href);&#8221; title=&#8221;刷新&#8221; &gt;&lt;i class=&#8221;Hui-iconfont&#8221;&gt;&amp;#xe68f;&lt;/i&gt;&lt;/a&gt;&lt;/nav&gt;
</p>
<p>
  &lt;div class=&#8221;page-container&#8221;&gt;
</p>
<p>
  	&lt;div class=&#8221;text-c&#8221;&gt;
</p>
<p>
  		&lt;form class=&#8221;Huiform&#8221; method=&#8221;post&#8221; action=&#8221;&#8221; target=&#8221;_self&#8221;&gt;
</p>
<p>
  			&lt;input type=&#8221;text&#8221; class=&#8221;input-text&#8221; style=&#8221;width:250px&#8221; placeholder=&#8221;试卷名称&#8221; id=&#8221;search_content&#8221; name=&#8221;&#8221;&gt;
</p>
<p>
  			&lt;button type=&#8221;button&#8221; class=&#8221;btn btn-success&#8221; id=&#8221;search&#8221; name=&#8221;&#8221;&gt;&lt;i class=&#8221;Hui-iconfont&#8221;&gt;&amp;#xe665;&lt;/i&gt; 搜试卷节点&lt;/button&gt;
</p>
<p>
  		&lt;/form&gt;
</p>
<p>
  	&lt;/div&gt;
</p>
<p>
  	&lt;div class=&#8221;cl pd-5 bg-1 bk-gray mt-20&#8243;&gt;
</p>
<p>
  		 &lt;span class=&#8221;l&#8221;&gt;
</p>
<p>
  		 &lt;a href=&#8221;javascript:;&#8221; onclick=&#8221;datadel()&#8221; class=&#8221;btn btn-danger radius&#8221;&gt;
</p>
<p>
  		 	&lt;i class=&#8221;Hui-iconfont&#8221;&gt;&amp;#xe6e2;&lt;/i&gt; 批量删除
</p>
<p>
  		 &lt;/a&gt;
</p>
<p>
  		 &lt;a href=&#8221;javascript:;&#8221; onclick=&#8221;admin_permission_add(&#8216;添加试卷节点&#8217;,'{{ url(&#8216;admin/paper/add&#8217;) }}&#8217;,&#8217;400&#8242;,&#8217;360&#8242;)&#8221; class=&#8221;btn btn-primary radius&#8221;&gt;
</p>
<p>
  		 	&lt;i class=&#8221;Hui-iconfont&#8221;&gt;&amp;#xe600;&lt;/i&gt; 添加试卷节点
</p>
<p>
  		 &lt;/a&gt;
</p>
<p>
  		&lt;/span&gt;
</p>
<p>
  		&lt;span class=&#8221;r&#8221;&gt;共有数据：&lt;strong&gt;54&lt;/strong&gt; 条&lt;/span&gt; &lt;/div&gt;
</p>
<p>
  	&lt;table class=&#8221;table table-border table-bordered table-bg&#8221;&gt;
</p>
<p>
  		&lt;thead&gt;
</p>
<p>
  			&lt;tr&gt;
</p>
<p>
  				&lt;th scope=&#8221;col&#8221; colspan=&#8221;11&#8243;&gt;试卷节点&lt;/th&gt;
</p>
<p>
  			&lt;/tr&gt;
</p>
<p>
  			&lt;tr class=&#8221;text-c&#8221;&gt;
</p>
<p>
  				&lt;th width=&#8221;25&#8243;&gt;&lt;input type=&#8221;checkbox&#8221; name=&#8221;&#8221; value=&#8221;&#8221;&gt;&lt;/th&gt;
</p>
<p>
  				&lt;th&gt;ID&lt;/th&gt;
</p>
<p>
  				&lt;th&gt;类型&lt;/th&gt;
</p>
<p>
  				&lt;th&gt;所属试卷&lt;/th&gt;
</p>
<p>
  				&lt;th&gt;分数&lt;/th&gt;
</p>
<p>
  				&lt;th&gt;问题&lt;/th&gt;
</p>
<p>
  				&lt;th&gt;答案选项&lt;/th&gt;
</p>
<p>
  				&lt;th&gt;答案&lt;/th&gt;
</p>
<p>
  				&lt;th&gt;说明&lt;/th&gt;
</p>
<p>
  				&lt;th&gt;创建于&lt;/th&gt;
</p>
<p>
  				&lt;th width=&#8221;100&#8243;&gt;操作&lt;/th&gt;
</p>
<p>
  			&lt;/tr&gt;
</p>
<p>
  		&lt;/thead&gt;
</p>
<p>
  		&lt;tbody&gt;
</p>
<p>
  			@foreach ($questions as $question)
</p>
<p>
  			&lt;tr class=&#8221;text-c&#8221;&gt;
</p>
<p>
  				&lt;td&gt;&lt;input type=&#8221;checkbox&#8221; value=&#8221;{{ $question-&gt;id }}&#8221; name=&#8221;&#8221;&gt;&lt;/td&gt;
</p>
<p>
  				&lt;td&gt;{{ $question-&gt;id }}&lt;/td&gt;
</p>
<p>
  				&lt;td&gt;
</p>
<p>
  					@if ($question-&gt;type == 1)单选题
</p>
<p>
  					@else 多选题
</p>
<p>
  					@endif
</p>
<p>
  				&lt;/td&gt;
</p>
<p>
  				&lt;!&#8211; &lt;td&gt;{{ $question-&gt;paper_id }}&lt;/td&gt; &#8211;&gt;
</p>
<p>
  				&lt;td&gt;{{ $question-&gt;paper-&gt;paper_name }}&lt;/td&gt;
</p>
<p>
  				&lt;td&gt;{{ $question-&gt;score }}&lt;/td&gt;
</p>
<p>
  				&lt;td&gt;{{ $question-&gt;question }}&lt;/td&gt;
</p>
<p>
  				&lt;td&gt;{{ $question-&gt;options }}&lt;/td&gt;
</p>
<p>
  				&lt;td&gt;{{ $question-&gt;answer }}&lt;/td&gt;
</p>
<p>
  				&lt;td&gt;{{ $question-&gt;remark }}&lt;/td&gt;
</p>
<p>
  				&lt;td&gt;{{ $question-&gt;created_at }}&lt;/td&gt;
</p>
<p>
  				&lt;td&gt;&lt;a title=&#8221;编辑&#8221; href=&#8221;javascript:;&#8221; onclick=&#8221;admin_permission_edit(&#8216;角色编辑&#8217;,&#8217;admin-permission-add.html&#8217;,&#8217;1&#8242;,&#8221;,&#8217;310&#8242;)&#8221; class=&#8221;ml-5&#8243; style=&#8221;text-decoration:none&#8221;&gt;&lt;i class=&#8221;Hui-iconfont&#8221;&gt;&amp;#xe6df;&lt;/i&gt;&lt;/a&gt; &lt;a title=&#8221;删除&#8221; href=&#8221;javascript:;&#8221; onclick=&#8221;admin_permission_del(this,&#8217;1&#8242;)&#8221; class=&#8221;ml-5&#8243; style=&#8221;text-decoration:none&#8221;&gt;&lt;i class=&#8221;Hui-iconfont&#8221;&gt;&amp;#xe6e2;&lt;/i&gt;&lt;/a&gt;&lt;/td&gt;
</p>
<p>
  			&lt;/tr&gt;
</p>
<p>
  			@endforeach
</p>
<p>
  		&lt;/tbody&gt;
</p>
<p>
  	&lt;/table&gt;
</p>
<p>
  &lt;/div&gt;
</p>
<p>
  &lt;!&#8211;_footer 作为公共模版分离出去&#8211;&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/jquery/1.9.1/jquery.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/layer/2.4/layer.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/static&#8217;) }}/h-ui/js/H-ui.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/static&#8217;) }}/h-ui.admin/js/H-ui.admin.js&#8221;&gt;&lt;/script&gt; &lt;!&#8211;/_footer 作为公共模版分离出去&#8211;&gt;
</p>
<p>
  &lt;!&#8211;请在下方写此页面业务相关的脚本&#8211;&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221; src=&#8221;{{ asset(&#8216;admin/lib&#8217;) }}/datatables/1.10.0/jquery.dataTables.min.js&#8221;&gt;&lt;/script&gt;
</p>
<p>
  &lt;script type=&#8221;text/javascript&#8221;&gt;
</p>
<p>
  var table = $(&#8216;table&#8217;).DataTable({
</p>
<p>
      iDisplayLength:10,	    //限制每页显示条数
</p>
<p>
      // searching : false, 		 //禁用搜索
</p>
<p>
      bLengthChange: false,   //去掉每页显示多少条数据方法
</p>
<p>
  });
</p>
<p>
  //客户端搜索功能更
</p>
<p>
  $(&#8216;#search&#8217;).click(function(){
</p>
<p>
      var search_content = $(&#8216;#search_content&#8217;).val();
</p>
<p>
      table.search(search_content).draw();
</p>
<p>
  });
</p>
<p>
  $(function(){
</p>
<p>
      $(&#8216;#DataTables_Table_0_filter&#8217;).hide();
</p>
<p>
  });
</p>
<p>
  /*
</p>
<p>
  	参数解释：
</p>
<p>
  	title	标题
</p>
<p>
  	url		请求的url
</p>
<p>
  	id		需要操作的数据id
</p>
<p>
  	w		弹出层宽度（缺省调默认值）
</p>
<p>
  	h		弹出层高度（缺省调默认值）
</p>
<p>
  */
</p>
<p>
  /*管理员-试卷-添加*/
</p>
<p>
  function admin_permission_add(title,url,w,h){
</p>
<p>
  	layer_show(title,url,w,h);
</p>
<p>
  }
</p>
<p>
  /*管理员-试卷-编辑*/
</p>
<p>
  function admin_permission_edit(title,url,id,w,h){
</p>
<p>
  	layer_show(title,url,w,h);
</p>
<p>
  }
</p>
<p>
  /*管理员-试卷-删除*/
</p>
<p>
  function admin_permission_del(obj,id){
</p>
<p>
  	layer.confirm(&#8216;确认要删除吗？&#8217;,function(index){
</p>
<p>
  		$.ajax({
</p>
<p>
  			type: &#8216;POST&#8217;,
</p>
<p>
  			url: &#8221;,
</p>
<p>
  			dataType: &#8216;json&#8217;,
</p>
<p>
  			success: function(data){
</p>
<p>
  				$(obj).parents(&#8220;tr&#8221;).remove();
</p>
<p>
  				layer.msg(&#8216;已删除!&#8217;,{icon:1,time:1000});
</p>
<p>
  			},
</p>
<p>
  			error:function(data) {
</p>
<p>
  				console.log(data.msg);
</p>
<p>
  			},
</p>
<p>
  		});
</p>
<p>
  	});
</p>
<p>
  }
</p>
<p>
  &lt;/script&gt;
</p>
<p>
  &lt;/body&gt;
</p>
<p>
  &lt;/html&gt;
</p>
<p><img loading="lazy" decoding="async" width="1355" height="386" src="/wp-content/uploads/2018/05/word-image-5230.png" class="wp-image-5761" srcset="/wp-content/uploads/2018/05/word-image-5230.png 1355w, /wp-content/uploads/2018/05/word-image-5230-300x85.png 300w, /wp-content/uploads/2018/05/word-image-5230-768x219.png 768w, /wp-content/uploads/2018/05/word-image-5230-1024x292.png 1024w" sizes="(max-width: 1355px) 100vw, 1355px" /></p>
<h2>后台试题导入和导出</h2>
<h3>︴下载工具库</h3>
<p>
  资料：<a href="https://packagist.org/packages/maatwebsite/excel">https://packagist.org/packages/maatwebsite/excel</a>
</p>
<ul>
<li>
    步骤1：下载
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="674" height="453" src="/wp-content/uploads/2018/05/word-image-5231.png" class="wp-image-5762" srcset="/wp-content/uploads/2018/05/word-image-5231.png 674w, /wp-content/uploads/2018/05/word-image-5231-300x202.png 300w" sizes="(max-width: 674px) 100vw, 674px" /></p>
<ul>
<li>
    步骤2：配置
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="885" height="261" src="/wp-content/uploads/2018/05/word-image-5232.png" class="wp-image-5763" srcset="/wp-content/uploads/2018/05/word-image-5232.png 885w, /wp-content/uploads/2018/05/word-image-5232-300x88.png 300w, /wp-content/uploads/2018/05/word-image-5232-768x226.png 768w" sizes="(max-width: 885px) 100vw, 885px" /><br />
<img loading="lazy" decoding="async" width="922" height="207" src="/wp-content/uploads/2018/05/word-image-5233.png" class="wp-image-5764" srcset="/wp-content/uploads/2018/05/word-image-5233.png 922w, /wp-content/uploads/2018/05/word-image-5233-300x67.png 300w, /wp-content/uploads/2018/05/word-image-5233-768x172.png 768w" sizes="(max-width: 922px) 100vw, 922px" /></p>
<h3>︴导出语法</h3>
<p><img loading="lazy" decoding="async" width="651" height="357" src="/wp-content/uploads/2018/05/word-image-5234.png" class="wp-image-5765" srcset="/wp-content/uploads/2018/05/word-image-5234.png 651w, /wp-content/uploads/2018/05/word-image-5234-300x165.png 300w" sizes="(max-width: 651px) 100vw, 651px" /></p>
<p>
  $data = [
</p>
<p>
      [&#8216;编号&#8217;,&#8217;姓名&#8217;,&#8217;年龄&#8217;],
</p>
<p>
      [&#8216;1&#8242;,&#8217;a1&#8242;,&#8217;1&#8217;],
</p>
<p>
      [&#8216;2&#8242;,&#8217;a2&#8242;,&#8217;2&#8217;],
</p>
<p>
      [&#8216;3&#8242;,&#8217;a3&#8242;,&#8217;3&#8217;]
</p>
<p>
  ];
</p>
<p>
  Excel::create(&#8216;学习成绩&#8217;, function($excel) use ($data) {
</p>
<p>
      $excel-&gt;sheet(&#8216;score&#8217;, function($sheet) use ($data) {
</p>
<p>
          $sheet-&gt;rows($data);
</p>
<p>
      });
</p>
<p>
  })-&gt;export(&#8216;xls&#8217;);
</p>
<h3>︴导入语法</h3>
<p>
  $excel_file_path = getcwd() . &#8216;/t2.xls&#8217;; //你的Excel文件存放地址
</p>
<p>
  $excel_data = Excel::load($excel_file_path, function($reader) {
</p>
<p>
  $res = $reader-&gt;getSheet(0)-&gt;toArray();
</p>
<p>
      // 直接打印内容即可看到效果
</p>
<p>
      echo &#8216;job.xlsx 表格内容为:&#8217;;
</p>
<p>
      dd($res);
</p>
<p>
  });
</p>
<h3>1）试题导入（excel）</h3>
<ul>
<li>
    步骤1：定义路由
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1046" height="134" src="/wp-content/uploads/2018/05/word-image-5235.png" class="wp-image-5766" srcset="/wp-content/uploads/2018/05/word-image-5235.png 1046w, /wp-content/uploads/2018/05/word-image-5235-300x38.png 300w, /wp-content/uploads/2018/05/word-image-5235-768x98.png 768w, /wp-content/uploads/2018/05/word-image-5235-1024x131.png 1024w" sizes="(max-width: 1046px) 100vw, 1046px" /></p>
<ul>
<li>
    步骤2：试卷列表设置导入连接
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1288" height="366" src="/wp-content/uploads/2018/05/word-image-5236.png" class="wp-image-5767" srcset="/wp-content/uploads/2018/05/word-image-5236.png 1288w, /wp-content/uploads/2018/05/word-image-5236-300x85.png 300w, /wp-content/uploads/2018/05/word-image-5236-768x218.png 768w, /wp-content/uploads/2018/05/word-image-5236-1024x291.png 1024w" sizes="(max-width: 1288px) 100vw, 1288px" /></p>
<ul>
<li>
    步骤3：创建导入试题方法，并完成导入功能
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="888" height="636" src="/wp-content/uploads/2018/05/word-image-5237.png" class="wp-image-5768" srcset="/wp-content/uploads/2018/05/word-image-5237.png 888w, /wp-content/uploads/2018/05/word-image-5237-300x215.png 300w, /wp-content/uploads/2018/05/word-image-5237-768x550.png 768w" sizes="(max-width: 888px) 100vw, 888px" /></p>
<p>
  //导入试题
</p>
<p>
  public function add(Request $request)
</p>
<p>
  {
</p>
<p>
      //步骤1：获取参数
</p>
<p>
      $paper_id = $request-&gt;input(&#8216;paper_id&#8217;);
</p>
<p>
      //步骤2；判断excel文件是否存在
</p>
<p>
      $file = getcwd() . &#8216;/excel/&#8217; . $paper_id .&#8217;.xlsx&#8217;;
</p>
<p>
      if (file_exists($file)) {
</p>
<p>
          //步骤3：读取excel内容
</p>
<p>
          $excel_data = Excel::load($file, function($reader) {
</p>
<p>
          $res = $reader-&gt;getSheet(0)-&gt;toArray();
</p>
<p>
              // 直接打印内容即可看到效果
</p>
<p>
              // echo &#8216;job.xlsx 表格内容为:&#8217;;
</p>
<p>
              // dd($res);
</p>
<p>
              //步骤4：通过循环将试题插入数据库
</p>
<p>
              foreach ($res as $k=&gt;$v) {
</p>
<p>
                  if ($k == 0) continue; //跳过表格标题
</p>
<p>
                  $type = $v[0] == &#8216;单选题&#8217; ? 1 : 2;
</p>
<p>
                  $remark = $v[6] ? $v[6] : &#8221;;
</p>
<p>
                  $data = [
</p>
<p>
                      &#8216;type&#8217; =&gt; $type,
</p>
<p>
                      &#8216;paper_id&#8217; =&gt; intval($v[1]),
</p>
<p>
                      &#8216;score&#8217; =&gt; $v[4],
</p>
<p>
                      &#8216;question&#8217; =&gt; $v[2],
</p>
<p>
                      &#8216;options&#8217; =&gt; $v[3],
</p>
<p>
                      &#8216;answer&#8217; =&gt; $v[5],
</p>
<p>
                      &#8216;remark&#8217; =&gt; $remark
</p>
<p>
                  ];
</p>
<p>
                  Question::create($data);
</p>
<p>
              }
</p>
<p>
          });
</p>
<p>
          //步骤5：跳转到试卷试题列表页
</p>
<p>
          return redirect(&#8216;admin/question/index?paper_id=&#8217;.$paper_id);
</p>
<p>
      }
</p>
<p>
      return redirect(&#8216;admin/paper/index&#8217;);
</p>
<p>
  }
</p>
<h3>2）试题导出（excel）</h3>
<ul>
<li>
    步骤1：定义路由
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1061" height="319" src="/wp-content/uploads/2018/05/word-image-5238.png" class="wp-image-5769" srcset="/wp-content/uploads/2018/05/word-image-5238.png 1061w, /wp-content/uploads/2018/05/word-image-5238-300x90.png 300w, /wp-content/uploads/2018/05/word-image-5238-768x231.png 768w, /wp-content/uploads/2018/05/word-image-5238-1024x308.png 1024w" sizes="(max-width: 1061px) 100vw, 1061px" /></p>
<ul>
<li>
    步骤2：创建控制器方法并完成功能
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1019" height="634" src="/wp-content/uploads/2018/05/word-image-5239.png" class="wp-image-5770" srcset="/wp-content/uploads/2018/05/word-image-5239.png 1019w, /wp-content/uploads/2018/05/word-image-5239-300x187.png 300w, /wp-content/uploads/2018/05/word-image-5239-768x478.png 768w" sizes="(max-width: 1019px) 100vw, 1019px" /></p>
<p>
  //导出试题
</p>
<p>
  public function export(Request $request)
</p>
<p>
  {
</p>
<p>
      //步骤1：获取参数
</p>
<p>
      $paper_id = $request-&gt;input(&#8216;paper_id&#8217;);
</p>
<p>
      //步骤2；根据试卷ID获取所有试题
</p>
<p>
      $questions = Question::with(&#8216;paper&#8217;)-&gt;where(&#8216;paper_id&#8217;, $paper_id)-&gt;get();
</p>
<p>
      //步骤3：组装导出数据
</p>
<p>
      $data[] = [&#8216;类型&#8217;,&#8217;所属试卷&#8217;,&#8217;问题&#8217;,&#8217;选项&#8217;,&#8217;分数&#8217;,&#8217;答案&#8217;,&#8217;说明&#8217;];
</p>
<p>
      foreach ($questions as $key =&gt; $question) {
</p>
<p>
          $type = $question-&gt;type == 1 ? &#8216;单选题&#8217; : &#8216;多选题&#8217;;
</p>
<p>
          $data[] = [
</p>
<p>
              $type,
</p>
<p>
              $question-&gt;paper-&gt;paper_name,
</p>
<p>
              $question-&gt;question,
</p>
<p>
              $question-&gt;options,
</p>
<p>
              $question-&gt;score,
</p>
<p>
              $question-&gt;answer,
</p>
<p>
              $question-&gt;remark
</p>
<p>
          ];
</p>
<p>
          $name = $question-&gt;paper-&gt;paper_name;
</p>
<p>
      }
</p>
<p>
      Excel::create($name, function($excel) use ($data) {
</p>
<p>
          $excel-&gt;sheet(&#8216;score&#8217;, function($sheet) use ($data) {
</p>
<p>
              $sheet-&gt;rows($data);
</p>
<p>
          });
</p>
<p>
      })-&gt;export(&#8216;xls&#8217;);
</p>
<p>
      return redirect(&#8216;admin/paper/index&#8217;);
</p>
<p>
  }
</p>
<h1>三、前台答题功能</h1>
<h2>展示试题</h2>
<ul>
<li>
    步骤1：定义路由
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="913" height="488" src="/wp-content/uploads/2018/05/word-image-5240.png" class="wp-image-5771" srcset="/wp-content/uploads/2018/05/word-image-5240.png 913w, /wp-content/uploads/2018/05/word-image-5240-300x160.png 300w, /wp-content/uploads/2018/05/word-image-5240-768x410.png 768w" sizes="(max-width: 913px) 100vw, 913px" /></p>
<ul>
<li>
    步骤1：创建控制器方法并查询所有题目试题
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="923" height="542" src="/wp-content/uploads/2018/05/word-image-5241.png" class="wp-image-5772" srcset="/wp-content/uploads/2018/05/word-image-5241.png 923w, /wp-content/uploads/2018/05/word-image-5241-300x176.png 300w, /wp-content/uploads/2018/05/word-image-5241-768x451.png 768w" sizes="(max-width: 923px) 100vw, 923px" /></p>
<ul>
<li>
    步骤3：视图循环显示
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="908" height="619" src="/wp-content/uploads/2018/05/word-image-5242.png" class="wp-image-5773" srcset="/wp-content/uploads/2018/05/word-image-5242.png 908w, /wp-content/uploads/2018/05/word-image-5242-300x205.png 300w, /wp-content/uploads/2018/05/word-image-5242-768x524.png 768w, /wp-content/uploads/2018/05/word-image-5242-220x150.png 220w" sizes="(max-width: 908px) 100vw, 908px" /></p>
<p>
  &lt;!DOCTYPE html&gt;
</p>
<p>
  &lt;html&gt;
</p>
<p>
  &lt;head&gt;
</p>
<p>
  	&lt;title&gt;考试&lt;/title&gt;
</p>
<p>
  	&lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  	* { padding:0px; margin:0px; }
</p>
<p>
  	body
</p>
<p>
  	{
</p>
<p>
  	    font-family:&#8221;微软雅黑&#8221;,&#8221;Lucida Grande&#8221;,Helvetica,Arial,Verdana,sans-serif;
</p>
<p>
  	    word-break:break-all;
</p>
<p>
  	    word-wrap: break-word;
</p>
<p>
  	    background: #ddf4ff url(&#8220;https://image.wjx.cn/images/newbg/oldbg2-bg.jpg&#8221;) repeat-x;
</p>
<p>
  	}
</p>
<p>
  	#main { width: 920px;margin: auto;}
</p>
<p>
  	#main .title {width: 100%; height:105px;background: url(&#8220;https://image.wjx.cn/images/newbg/oldbg2.jpg&#8221;) no-repeat top center;  }
</p>
<p>
  	#main h1 { color:#19a8ee; text-align: center; font-size: 24px !important; }
</p>
<p>
  	#main h2 { margin-left: 30px; }
</p>
<p>
  	#main h3 { margin-bottom: 10px; }
</p>
<p>
  	#main .content {background: #fff;}
</p>
<p>
  	#main .content .question { width: 800px; margin: auto; border-bottom: 1px solid #EFEFEF;padding-top: 20px;}
</p>
<p>
  	#main .content .question input { width: 20px; height: 20px; vertical-align: middle; margin: 8px 0px; }
</p>
<p>
  	#main #submit { width: 80px; height: 40px; margin-left: 420px; cursor: pointer;}
</p>
<p>
  	&lt;/style&gt;
</p>
<p>
  &lt;/head&gt;
</p>
<p>
  &lt;body&gt;
</p>
<p>
  	&lt;div id=&#8221;main&#8221;&gt;
</p>
<p>
  		&lt;div class=&#8221;title&#8221;&gt;&lt;/div&gt;
</p>
<p>
  		&lt;div class=&#8221;content&#8221;&gt;
</p>
<p>
  			&lt;h1&gt;试卷A&lt;/h1&gt;
</p>
<p>
  			&lt;h2&gt;单选&lt;/h2&gt;
</p>
<p>
  			@foreach ($questions as $k=&gt;$question)
</p>
<p>
  			@if ($question-&gt;type == 1)
</p>
<p>
  			&lt;div class=&#8221;question&#8221;&gt;
</p>
<p>
  				&lt;div&gt;
</p>
<p>
  					&lt;h3&gt;{{$k + 1}}.{{$question-&gt;question}}&lt;/h3&gt;
</p>
<p>
  					@foreach (explode(&#8216;,&#8217;, $question-&gt;options) as $option)
</p>
<p>
  					&lt;input type=&#8221;radio&#8221; name=&#8221;a&#8221; value=&#8221;&#8221; /&gt;{{ $option }}&lt;br /&gt;
</p>
<p>
  					@endforeach
</p>
<p>
  				&lt;/div&gt;
</p>
<p>
  			&lt;/div&gt;
</p>
<p>
  			@endif
</p>
<p>
  			@endforeach
</p>
<p>
  			&lt;h2&gt;多选&lt;/h2&gt;)
</p>
<p>
  			@php
</p>
<p>
  			$k = 0;
</p>
<p>
  			@endphp
</p>
<p>
  			@foreach ($questions as $question)
</p>
<p>
  			@if ($question-&gt;type == 2)
</p>
<p>
  			&lt;div class=&#8221;question&#8221;&gt;
</p>
<p>
  				&lt;div&gt;
</p>
<p>
  					&lt;h3&gt;{{$k + 1}}.{{$question-&gt;question}}&lt;/h3&gt;
</p>
<p>
  					@foreach (explode(&#8216;,&#8217;, $question-&gt;options) as $option)
</p>
<p>
  					&lt;input type=&#8221;checkbox&#8221; name=&#8221;a&#8221; value=&#8221;1&#8243; /&gt;{{ $option }}&lt;br /&gt;
</p>
<p>
  					@endforeach
</p>
<p>
  				&lt;/div&gt;
</p>
<p>
  			&lt;/div&gt;
</p>
<p>
  			@endif
</p>
<p>
  			@endforeach
</p>
<p>
  			&lt;br/&gt;
</p>
<p>
  			&lt;br/&gt;
</p>
<p>
  			&lt;input type=&#8221;submit&#8221; name=&#8221;提交&#8221; id=&#8221;submit&#8221;&gt;
</p>
<p>
  		&lt;/div&gt;
</p>
<p>
  	&lt;/div&gt;
</p>
<p>
  &lt;/body&gt;
</p>
<p>
  &lt;/html&gt;
</p>
<h2>答题处理</h2>
<ul>
<li>
    步骤1：定义路由
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1018" height="284" src="/wp-content/uploads/2018/05/word-image-5243.png" class="wp-image-5774" srcset="/wp-content/uploads/2018/05/word-image-5243.png 1018w, /wp-content/uploads/2018/05/word-image-5243-300x84.png 300w, /wp-content/uploads/2018/05/word-image-5243-768x214.png 768w" sizes="(max-width: 1018px) 100vw, 1018px" /></p>
<ul>
<li>
    步骤2：修改视图
  </li>
</ul>
<p>
  &lt;!DOCTYPE html&gt;
</p>
<p>
  &lt;html&gt;
</p>
<p>
  &lt;head&gt;
</p>
<p>
  	&lt;title&gt;考试&lt;/title&gt;
</p>
<p>
  	&lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  	* { padding:0px; margin:0px; }
</p>
<p>
  	body
</p>
<p>
  	{
</p>
<p>
  	    font-family:&#8221;微软雅黑&#8221;,&#8221;Lucida Grande&#8221;,Helvetica,Arial,Verdana,sans-serif;
</p>
<p>
  	    word-break:break-all;
</p>
<p>
  	    word-wrap: break-word;
</p>
<p>
  	    background: #ddf4ff url(&#8220;https://image.wjx.cn/images/newbg/oldbg2-bg.jpg&#8221;) repeat-x;
</p>
<p>
  	}
</p>
<p>
  	#main { width: 920px;margin: auto;}
</p>
<p>
  	#main .title {width: 100%; height:105px;background: url(&#8220;https://image.wjx.cn/images/newbg/oldbg2.jpg&#8221;) no-repeat top center;  }
</p>
<p>
  	#main h1 { color:#19a8ee; text-align: center; font-size: 24px !important; }
</p>
<p>
  	#main h2 { margin-left: 30px; }
</p>
<p>
  	#main h3 { margin-bottom: 10px; }
</p>
<p>
  	#main .content {background: #fff;}
</p>
<p>
  	#main .content .question { width: 800px; margin: auto; border-bottom: 1px solid #EFEFEF;padding-top: 20px;}
</p>
<p>
  	#main .content .question input { width: 20px; height: 20px; vertical-align: middle; margin: 8px 0px; }
</p>
<p>
  	#main #submit { width: 80px; height: 40px; margin-left: 420px; cursor: pointer;}
</p>
<p>
  	&lt;/style&gt;
</p>
<p>
  &lt;/head&gt;
</p>
<p>
  &lt;body&gt;
</p>
<p>
  	<strong>@php</strong>
</p>
<p><strong>	$rs = [&#8216;A&#8217;, &#8216;B&#8217;, &#8216;C&#8217;, &#8216;D&#8217;];</strong>
</p>
<p><strong>	@endphp</strong>
</p>
<p>
  	&lt;form action=&#8221;{{ url(&#8216;home/answer/add&#8217;) }}&#8221; method=&#8221;post&#8221;&gt;
</p>
<p>
  	{{ csrf_field() }}
</p>
<p>
  	&lt;div id=&#8221;main&#8221;&gt;
</p>
<p>
  		&lt;div class=&#8221;title&#8221;&gt;&lt;/div&gt;
</p>
<p>
  		&lt;div class=&#8221;content&#8221;&gt;
</p>
<p>
  			&lt;h1&gt;试卷A&lt;/h1&gt;
</p>
<p>
  			&lt;h2&gt;单选&lt;/h2&gt;
</p>
<p>
  			@foreach ($questions as $k=&gt;$question)
</p>
<p>
  			@if ($question-&gt;type == 1)
</p>
<p>
  			&lt;div class=&#8221;question&#8221;&gt;
</p>
<p>
  				&lt;div&gt;
</p>
<p>
  					&lt;h3&gt;{{$k + 1}}.{{$question-&gt;question}}&lt;/h3&gt;
</p>
<p>
  					@foreach (explode(&#8216;,&#8217;, $question-&gt;options) as $temp=&gt;$option)
</p>
<p>
  					&lt;input type=&#8221;radio&#8221; <strong>name=&#8221;answer[{{ $question-&gt;id }}]&#8221; value=&#8221;{{ $rs[$temp] }}&#8221; </strong>/&gt;{{ $option }}&lt;br /&gt;
</p>
<p>
  					@endforeach
</p>
<p>
  				&lt;/div&gt;
</p>
<p>
  			&lt;/div&gt;
</p>
<p>
  			@endif
</p>
<p>
  			@endforeach
</p>
<p>
  			&lt;h2&gt;多选&lt;/h2&gt;
</p>
<p>
  			@php
</p>
<p>
  			$k = 0;
</p>
<p>
  			@endphp
</p>
<p>
  			@foreach ($questions as $question)
</p>
<p>
  			@if ($question-&gt;type == 2)
</p>
<p>
  			&lt;div class=&#8221;question&#8221;&gt;
</p>
<p>
  				&lt;div&gt;
</p>
<p>
  					&lt;h3&gt;{{$k + 1}}.{{$question-&gt;question}}&lt;/h3&gt;
</p>
<p>
  					@foreach (explode(&#8216;,&#8217;, $question-&gt;options) as $temp=&gt;$option)
</p>
<p>
  					&lt;input type=&#8221;checkbox&#8221; <strong>name=&#8221;answer[{{ $question-&gt;id }}][]&#8221; value=&#8221;{{ $rs[$temp] }}&#8221; </strong>/&gt;{{ $option }}&lt;br /&gt;
</p>
<p>
  					@endforeach
</p>
<p>
  				&lt;/div&gt;
</p>
<p>
  			&lt;/div&gt;
</p>
<p>
  			@endif
</p>
<p>
  			@endforeach
</p>
<p>
  			&lt;br/&gt;
</p>
<p>
  			&lt;br/&gt;
</p>
<p>
  			&lt;input type=&#8221;submit&#8221; name=&#8221;提交&#8221; id=&#8221;submit&#8221;&gt;
</p>
<p>
  		&lt;/div&gt;
</p>
<p>
  	&lt;/div&gt;
</p>
<p>
  	&lt;/form&gt;
</p>
<p>
  &lt;/body&gt;
</p>
<p>
  &lt;/html&gt;
</p>
<ul>
<li>
    步骤3：数据处理【难点、重点】
  </li>
</ul>
<p>
  主要学习视图的name设置以及这边的判断原理
</p>
<p><img loading="lazy" decoding="async" width="1167" height="641" src="/wp-content/uploads/2018/05/word-image-5244.png" class="wp-image-5775" srcset="/wp-content/uploads/2018/05/word-image-5244.png 1167w, /wp-content/uploads/2018/05/word-image-5244-300x165.png 300w, /wp-content/uploads/2018/05/word-image-5244-768x422.png 768w, /wp-content/uploads/2018/05/word-image-5244-1024x562.png 1024w" sizes="(max-width: 1167px) 100vw, 1167px" /></p>
<p>
  &lt;?php
</p>
<p>
  namespace App\Http\Controllers\Home;
</p>
<p>
  use App\Http\Model\Question;
</p>
<p>
  use App\Http\Model\Answer;
</p>
<p>
  use Illuminate\Http\Request;
</p>
<p>
  use App\Http\Controllers\Controller;
</p>
<p>
  class AnswerController extends Controller
</p>
<p>
  {
</p>
<p>
      //答题处理
</p>
<p>
      public function add(Request $request)
</p>
<p>
      {
</p>
<p>
      	//1.判断请求类型
</p>
<p>
          if ($request-&gt;isMethod(&#8216;post&#8217;)) {
</p>
<p>
              //2.接受数据
</p>
<p>
              $postData = $request-&gt;only(&#8216;answer&#8217;, &#8216;paper_id&#8217;);
</p>
<p>
              //dd($postData);
</p>
<p>
              //3.查询试卷对应的所有试题
</p>
<p>
              $questions = Question::where(&#8216;paper_id&#8217;, $postData[&#8216;paper_id&#8217;])-&gt;get();
</p>
<p>
              //4.循环判断提交的试题是否正确
</p>
<p>
              foreach ($questions as $key =&gt; $question) {
</p>
<p>
                  //4.1先判断当前试题是否在提交表单中：
</p>
<p>
                  //正常流   -&gt;肯定存在     处理：正确，错误
</p>
<p>
                  //非正常流-&gt;肯定不存在    处理：不管，不加入到answer直接没分
</p>
<p>
                  if (isset($postData[&#8216;answer&#8217;][$question-&gt;id])) {
</p>
<p>
                      //用户本地答案
</p>
<p>
                      $userSubmitAnswer = is_array($postData[&#8216;answer&#8217;][$question-&gt;id]) ? implode(&#8221;, $postData[&#8216;answer&#8217;][$question-&gt;id]) : $postData[&#8216;answer&#8217;][$question-&gt;id];
</p>
<p>
                      //判断是否正确
</p>
<p>
                      $temp = [
</p>
<p>
                          &#8216;paper_id&#8217; =&gt; $postData[&#8216;paper_id&#8217;],
</p>
<p>
                          &#8216;question_id&#8217; =&gt; $question-&gt;id,
</p>
<p>
                          &#8216;member_id&#8217;  =&gt; 0,
</p>
<p>
                          &#8216;score&#8217;    =&gt; $question-&gt;score,
</p>
<p>
                          &#8216;answer&#8217; =&gt; $userSubmitAnswer //用户答案
</p>
<p>
                      ];
</p>
<p>
                      if ($question-&gt;answer == $userSubmitAnswer) {
</p>
<p>
                          //答对
</p>
<p>
                          $temp[&#8216;is_correct&#8217;] = 1;  //是否正确:1-是,2-否
</p>
<p>
                      } else {
</p>
<p>
                          //答错
</p>
<p>
                          $temp[&#8216;is_correct&#8217;] =2 ; //是否正确:1-是,2-否
</p>
<p>
                      }
</p>
<p>
                      Answer::create($temp);
</p>
<p>
                  }
</p>
<p>
              }
</p>
<p>
              //处理完毕跳转到结果页
</p>
<p>
              return redirect(&#8216;home/answer/detail&#8217;);
</p>
<p>
          }
</p>
<p>
      }
</p>
<p>
      //答题结果显示
</p>
<p>
      public function detail()
</p>
<p>
      {
</p>
<p>
          return view(&#8216;home/answer/detail&#8217;);
</p>
<p>
      }
</p>
<p>
  }
</p>
<h2>展示答题结果</h2>
<ul>
<li>
    步骤1：定义路由
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1127" height="276" src="/wp-content/uploads/2018/05/word-image-5245.png" class="wp-image-5776" srcset="/wp-content/uploads/2018/05/word-image-5245.png 1127w, /wp-content/uploads/2018/05/word-image-5245-300x73.png 300w, /wp-content/uploads/2018/05/word-image-5245-768x188.png 768w, /wp-content/uploads/2018/05/word-image-5245-1024x251.png 1024w" sizes="(max-width: 1127px) 100vw, 1127px" /></p>
<ul>
<li>
    步骤2：创建控制器方法
  </li>
</ul>
<ol>
<li>
  设置模型
</li>
</ol>
<p><img loading="lazy" decoding="async" width="1115" height="499" src="/wp-content/uploads/2018/05/word-image-5246.png" class="wp-image-5777" srcset="/wp-content/uploads/2018/05/word-image-5246.png 1115w, /wp-content/uploads/2018/05/word-image-5246-300x134.png 300w, /wp-content/uploads/2018/05/word-image-5246-768x344.png 768w, /wp-content/uploads/2018/05/word-image-5246-1024x458.png 1024w" sizes="(max-width: 1115px) 100vw, 1115px" /></p>
<p>
  2）设置控制器
</p>
<p><img loading="lazy" decoding="async" width="1015" height="510" src="/wp-content/uploads/2018/05/word-image-5247.png" class="wp-image-5778" srcset="/wp-content/uploads/2018/05/word-image-5247.png 1015w, /wp-content/uploads/2018/05/word-image-5247-300x151.png 300w, /wp-content/uploads/2018/05/word-image-5247-768x386.png 768w" sizes="(max-width: 1015px) 100vw, 1015px" /></p>
<ul>
<li>
    步骤3：视图判断显示结果
  </li>
</ul>
<p>
  &lt;!DOCTYPE html&gt;
</p>
<p>
  &lt;html&gt;
</p>
<p>
  &lt;head&gt;
</p>
<p>
  	&lt;title&gt;考试&lt;/title&gt;
</p>
<p>
  	&lt;style type=&#8221;text/css&#8221;&gt;
</p>
<p>
  	* { padding:0px; margin:0px; }
</p>
<p>
  	body
</p>
<p>
  	{
</p>
<p>
  	    font-family:&#8221;微软雅黑&#8221;,&#8221;Lucida Grande&#8221;,Helvetica,Arial,Verdana,sans-serif;
</p>
<p>
  	    word-break:break-all;
</p>
<p>
  	    word-wrap: break-word;
</p>
<p>
  	    background: #ddf4ff url(&#8220;https://image.wjx.cn/images/newbg/oldbg2-bg.jpg&#8221;) repeat-x;
</p>
<p>
  	}
</p>
<p>
  	#main { width: 920px;margin: auto;}
</p>
<p>
  	#main .title {width: 100%; height:105px;background: url(&#8220;https://image.wjx.cn/images/newbg/oldbg2.jpg&#8221;) no-repeat top center;  }
</p>
<p>
  	#main h1 { color:#19a8ee; text-align: center; font-size: 24px !important; }
</p>
<p>
  	#main h2 { margin-left: 30px; }
</p>
<p>
  	#main h3 { margin-bottom: 10px; }
</p>
<p>
  	#main .content {background: #fff;}
</p>
<p>
  	#main .content .question { width: 800px; margin: auto; border-bottom: 1px solid #EFEFEF;padding-top: 20px;}
</p>
<p>
  	#main .content .question input { width: 20px; height: 20px; vertical-align: middle; margin: 8px 0px; }
</p>
<p>
  	#main #submit { width: 80px; height: 40px; margin-left: 420px; cursor: pointer;}
</p>
<p>
  	&lt;/style&gt;
</p>
<p>
  &lt;/head&gt;
</p>
<p>
  &lt;body&gt;
</p>
<p>
  	@php
</p>
<p>
  	$rs = [&#8216;A&#8217;, &#8216;B&#8217;, &#8216;C&#8217;, &#8216;D&#8217;];
</p>
<p>
  	@endphp
</p>
<p>
  	&lt;form action=&#8221;{{ url(&#8216;home/answer/add&#8217;) }}&#8221; method=&#8221;post&#8221;&gt;
</p>
<p>
  	{{ csrf_field() }}
</p>
<p>
  	&lt;div id=&#8221;main&#8221;&gt;
</p>
<p>
  		&lt;div class=&#8221;title&#8221;&gt;&lt;/div&gt;
</p>
<p>
  		&lt;div class=&#8221;content&#8221;&gt;
</p>
<p>
  			&lt;h1&gt;试卷A&lt;/h1&gt;
</p>
<p>
  			&lt;h2&gt;单选&lt;/h2&gt;
</p>
<p>
  			@foreach ($answers as $k=&gt;$answer)
</p>
<p>
  			@if ($answer-&gt;question-&gt;type == 1)
</p>
<p>
  			&lt;div class=&#8221;question&#8221;&gt;
</p>
<p>
  				&lt;div&gt;
</p>
<p>
  					&lt;h3&gt;
</p>
<p>
  						{{$k + 1}}.{{$answer-&gt;question-&gt;question}}&amp;nbsp;
</p>
<p>
  						@if ($answer-&gt;is_correct == 1)
</p>
<p>
  							&lt;font color=&#8221;green&#8221;&gt;正确&lt;/font&gt;
</p>
<p>
  						@else
</p>
<p>
  							&lt;font color=&#8221;red&#8221;&gt;错误&lt;/font&gt; ，正确答案：{{$answer-&gt;question-&gt;answer}}
</p>
<p>
  						@endif
</p>
<p>
  					&lt;/h3&gt;
</p>
<p>
  					@foreach (explode(&#8216;,&#8217;, $answer-&gt;question-&gt;options) as $temp=&gt;$option)
</p>
<p>
  					&lt;input type=&#8221;radio&#8221;
</p>
<p>
  						@if($rs[$temp] == $answer-&gt;answer)
</p>
<p>
  							checked
</p>
<p>
  						@endif
</p>
<p>
  					/&gt;{{ $option }}&lt;br /&gt;
</p>
<p>
  					@endforeach
</p>
<p>
  				&lt;/div&gt;
</p>
<p>
  			&lt;/div&gt;
</p>
<p>
  			@endif
</p>
<p>
  			@endforeach
</p>
<p>
  			&lt;h2&gt;多选&lt;/h2&gt;
</p>
<p>
  			@php
</p>
<p>
  			$k = 0;
</p>
<p>
  			@endphp
</p>
<p>
  			@foreach ($answers as $answer)
</p>
<p>
  			@if ($answer-&gt;question-&gt;type == 2)
</p>
<p>
  			&lt;div class=&#8221;question&#8221;&gt;
</p>
<p>
  				&lt;div&gt;
</p>
<p>
  					&lt;h3&gt;
</p>
<p>
  						{{$k + 1}}.{{$answer-&gt;question-&gt;question}}
</p>
</p>
<p>
  						@if ($answer-&gt;is_correct == 1)
</p>
<p>
  							&lt;font color=&#8221;green&#8221;&gt;正确&lt;/font&gt;
</p>
<p>
  						@else
</p>
<p>
  							&lt;font color=&#8221;red&#8221;&gt;错误&lt;/font&gt; ，正确答案：{{$answer-&gt;question-&gt;answer}}
</p>
<p>
  						@endif
</p>
<p>
  					&lt;/h3&gt;
</p>
<p>
  					@foreach (explode(&#8216;,&#8217;, $answer-&gt;question-&gt;options) as $temp=&gt;$option)
</p>
<p>
  					&lt;input type=&#8221;checkbox&#8221;
</p>
<p>
  						@if(strpos(&#8216;_&#8217;.$answer-&gt;answer, $rs[$temp]))
</p>
<p>
  							checked=checked
</p>
<p>
  						@endif
</p>
<p>
  					/&gt;{{ $option }}&lt;br /&gt;
</p>
<p>
  					@endforeach
</p>
<p>
  				&lt;/div&gt;
</p>
<p>
  			&lt;/div&gt;
</p>
<p>
  			@endif
</p>
<p>
  			@endforeach
</p>
<p>
  			&lt;br/&gt;
</p>
<p>
  			&lt;br/&gt;
</p>
<p>
  			&lt;input type=&#8221;submit&#8221; name=&#8221;提交&#8221; id=&#8221;submit&#8221;&gt;
</p>
<p>
  		&lt;/div&gt;
</p>
<p>
  	&lt;/div&gt;
</p>
<p>
  	&lt;/form&gt;
</p>
<p>
  &lt;/body&gt;
</p>
<p>
  &lt;/html&gt;
</p>
<p><img loading="lazy" decoding="async" width="845" height="680" src="/wp-content/uploads/2018/05/word-image-5248.png" class="wp-image-5779" srcset="/wp-content/uploads/2018/05/word-image-5248.png 845w, /wp-content/uploads/2018/05/word-image-5248-300x241.png 300w, /wp-content/uploads/2018/05/word-image-5248-768x618.png 768w" sizes="(max-width: 845px) 100vw, 845px" /></p>
<h1>在Laravle中使用支付宝</h1>
<h2>1、下载第三方支付宝SDK工具库</h2>
<ul>
<li>
    步骤1：下载
  </li>
</ul>
<p>
  composer require &#8220;echobool/alipay-laravel5:dev-master&#8221;
</p>
<p><img loading="lazy" decoding="async" width="542" height="247" src="/wp-content/uploads/2018/05/word-image-5249.png" class="wp-image-5780" srcset="/wp-content/uploads/2018/05/word-image-5249.png 542w, /wp-content/uploads/2018/05/word-image-5249-300x137.png 300w" sizes="(max-width: 542px) 100vw, 542px" /></p>
<ul>
<li>
    步骤2：配置
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="466" height="102" src="/wp-content/uploads/2018/05/word-image-5250.png" class="wp-image-5781" srcset="/wp-content/uploads/2018/05/word-image-5250.png 466w, /wp-content/uploads/2018/05/word-image-5250-300x66.png 300w" sizes="(max-width: 466px) 100vw, 466px" /><br />
<img loading="lazy" decoding="async" width="998" height="231" src="/wp-content/uploads/2018/05/word-image-5251.png" class="wp-image-5782" srcset="/wp-content/uploads/2018/05/word-image-5251.png 998w, /wp-content/uploads/2018/05/word-image-5251-300x69.png 300w, /wp-content/uploads/2018/05/word-image-5251-768x178.png 768w" sizes="(max-width: 998px) 100vw, 998px" /></p>
<ul>
<li>
    步骤3：更新配置
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="346" height="126" src="/wp-content/uploads/2018/05/word-image-5252.png" class="wp-image-5783" srcset="/wp-content/uploads/2018/05/word-image-5252.png 346w, /wp-content/uploads/2018/05/word-image-5252-300x109.png 300w" sizes="(max-width: 346px) 100vw, 346px" /></p>
<ul>
<li>
    步骤4：发布配置文件
  </li>
</ul>
<p>
  1）生成配置文件
</p>
<p><img loading="lazy" decoding="async" width="1085" height="437" src="/wp-content/uploads/2018/05/word-image-5253.png" class="wp-image-5784" srcset="/wp-content/uploads/2018/05/word-image-5253.png 1085w, /wp-content/uploads/2018/05/word-image-5253-300x121.png 300w, /wp-content/uploads/2018/05/word-image-5253-768x309.png 768w, /wp-content/uploads/2018/05/word-image-5253-1024x412.png 1024w" sizes="(max-width: 1085px) 100vw, 1085px" /></p>
<p>
  2）修改配置文件
</p>
<p>
  &lt;?php
</p>
<p>
  /**
</p>
<p>
   * Created by PhpStorm.
</p>
<p>
   * User: luojinyi
</p>
<p>
   * Date: 2017/6/26
</p>
<p>
   * Time: 下午5:21
</p>
<p>
   */
</p>
<p>
  return [
</p>
<p>
      //应用ID,您的APPID。
</p>
<p>
      &#8216;app_id&#8217; =&gt; &#8220;2016091200497515&#8221;,
</p>
<p>
      //商户私钥 不能用pkcs8.pem中的密钥！！！！！
</p>
<p>
      &#8216;merchant_private_key&#8217; =&gt; &#8220;MIIEogIBAAKCAQEAuVAxeZTkmobcdfsgOor2xK5vyHmLnGfDLK4latRGDu8Esil7vVx59IQK9rnDnO2KFn/zvk36PpsKyyV1c9p1IK+/pm/kpu9GkTJKJm5vSFx21UWzVCZlRLPy92UH9KGHyD4V28mzMCGuUwniy8O0oiwR9sL5Qcayh5/Ao47nnQ3VTby8bFyuEchsOd8fqVDJzyyAdHoWqqKsuYg+SJqdjP0dsJsryS427we2LEZ9k2IZhd2Mhuj7N28ZcI8NS3YAdh5Yw1+g1j6J0oReQ209awSnwkatwUEH1dSNCnI4tNQu7WfbKm9u1eKb6SE83bvKE11ombAftcaO/9X+be6XHwIDAQABAoIBAGlNmZ+mLTVmNzbPyiOaPdnL6fd4og3xpKXqG5cWIu1vgzKeghM7zo1Uz0oei3rMPLDGasKUWwRiZALGOXTpCa/WTsiMQtldlLMDacFm9dOfv2M35UyHOPqOax2MCrZHZ/ow1Yj8l9dc/EtxjbAOeMHC2z5m0u8+ssqAzB3lIdZLQiD+J744AzFZ09VcwtAzLpVBN67DCsqHd+MVwNMajcoUokMfXO7+KYO9uKFS50GDlhTs/nJXy7ihZ1GkLpKjXMBAlP2X3Iyv8Tibd1eKnXkzufCABPH1tnFsMwvW4PJ3DQY4pnyRb9Tq6Ydqcjrc4bgB9E5qUKeB/578R746WoECgYEA8ir1WjjTUYeskcs8Od9kqj/35WYDS704jD2VLp2Sjtodj+/em38s2l3xnH/+S7+msQFdsllmQYC/9yMZ65nNCGeoHKPrJvVgyl45KPxDeeCWrNq8UQBlOezyVg6BKQV8qFPHb/rag8OXhzcRxlIVqzZPFRSw1YVfLZSEADPYrMECgYEAw+XkgRkX6ia3JVFa8dpoFhHweDfuRncw9Wny0/6gFjNv/apl726BoS9jregeJfynqWDkDdkw05I6y9wiQyiXDWH6/JV97xXsoYqFIUfydFFGz2yHJ+l1rCLXjn+k1dmzTJLWU+bRxbVCqC2VAm6laJUkEuntDyCtnN+xf1cn298CgYB/4oG5CINH7d8LCwmeAkPVyHwv74RUDfP701WhzWKk/7hW17R1514XXz8Fh24SMH5lwTPqyF1AwC4f47B/g7QL+TmFDmdTJofbtpB2/WjgxuKrG8QQ/qV2RpPfMD+zGwuulLegghe9N6Agrss7MQPya3atykRsLceKeYCP3tFQwQKBgEX5rp/2yLYZUj6ASw4tSBTqH42x3OlK1jAzwku7no+PnCduYK8gOCnNdbu/OFW1ZGZ6d7wCoxBQIbSEU7DNpPdg0ni7JZrrp/UkN93lh1PJXJPnXngBSslMQNdj/Qtukj9+DBU4VCJdVwwgDCQsReWPsK0Y5lcLAzkQJqUoCtLdAoGAEm6PFZs3mQekOf1L43NfEdG5E8MvuguutBJaKqfuOLk5LnBgC2wP0XUL1Dz47oJNXoQxHse9QUOy7QijTLTz/tehDFUYDSwkJ1lEEvaEhmMqeR/MiUT+z2//MnG4AlNHyYU/cMU38CkgDPwinFv5TvjRMHWyx8ZSvQ2d99ptXHM=&#8221;,
</p>
<p>
      //异步通知地址
</p>
<p>
      &#8216;notify_url&#8217; =&gt; &#8220;http://外网可访问网关地址/alipay.trade.page.pay-PHP-UTF-8/notify_url.php&#8221;,
</p>
<p>
      //同步跳转
</p>
<p>
      &#8216;return_url&#8217; =&gt; &#8220;http://l.com/edu6/public/home/alipay/returnUrl&#8221;,
</p>
<p>
      //编码格式
</p>
<p>
      &#8216;charset&#8217; =&gt; &#8220;UTF-8&#8221;,
</p>
<p>
      //签名方式
</p>
<p>
      &#8216;sign_type&#8217; =&gt; &#8220;RSA2&#8221;,
</p>
<p>
      //支付宝网关
</p>
<p>
      &#8216;gatewayUrl&#8217; =&gt; &#8220;https://openapi.alipaydev.com/gateway.do&#8221;,
</p>
<p>
      //支付宝公钥,查看地址：https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
</p>
<p>
      &#8216;alipay_public_key&#8217; =&gt; &#8220;MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuVAxeZTkmobcdfsgOor2xK5vyHmLnGfDLK4latRGDu8Esil7vVx59IQK9rnDnO2KFn/zvk36PpsKyyV1c9p1IK+/pm/kpu9GkTJKJm5vSFx21UWzVCZlRLPy92UH9KGHyD4V28mzMCGuUwniy8O0oiwR9sL5Qcayh5/Ao47nnQ3VTby8bFyuEchsOd8fqVDJzyyAdHoWqqKsuYg+SJqdjP0dsJsryS427we2LEZ9k2IZhd2Mhuj7N28ZcI8NS3YAdh5Yw1+g1j6J0oReQ209awSnwkatwUEH1dSNCnI4tNQu7WfbKm9u1eKb6SE83bvKE11ombAftcaO/9X+be6XHwIDAQAB&#8221;,
</p>
<p>
      //支付时提交方式 true 为表单提交方式成功后跳转到return_url,
</p>
<p>
      //false 时为Curl方式 返回支付宝支付页面址址 自己跳转上去 支付成功不会跳转到return_url上， 我也不知道为什么，有人发现可以跳转请告诉 我一下 谢谢
</p>
<p>
      // email: 40281612@qq.com
</p>
<p>
      &#8216;trade_pay_type&#8217; =&gt; true,
</p>
<p>
  ];
</p>
<ul>
<li>
    步骤5：定义路由，创建控制器方法，并将官方demo代码放进去
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1186" height="301" src="/wp-content/uploads/2018/05/word-image-5254.png" class="wp-image-5785" srcset="/wp-content/uploads/2018/05/word-image-5254.png 1186w, /wp-content/uploads/2018/05/word-image-5254-300x76.png 300w, /wp-content/uploads/2018/05/word-image-5254-768x195.png 768w, /wp-content/uploads/2018/05/word-image-5254-1024x260.png 1024w" sizes="(max-width: 1186px) 100vw, 1186px" /></p>
<p>
  &lt;?php
</p>
<p>
  namespace App\Http\Controllers\Home;
</p>
<p>
  //文件头use一下
</p>
<p>
  use EchoBool\AlipayLaravel\Facades\Alipay;
</p>
<p>
  use Illuminate\Http\Request;
</p>
<p>
  use App\Http\Controllers\Controller;
</p>
<p>
  class AlipayController extends Controller
</p>
<p>
  {
</p>
<p>
      /**
</p>
<p>
       * 支付
</p>
<p>
       * @param Request $request
</p>
<p>
       * @return mixed
</p>
<p>
       */
</p>
<p>
      public function goPay(Request $request)
</p>
<p>
      {
</p>
<p>
          //商户订单号，商户网站订单系统中唯一订单号，必填
</p>
<p>
          $out_trade_no = date(&#8216;YmdHis&#8217;) . &#8216;00045623&#8217;;
</p>
<p>
          //订单名称，必填
</p>
<p>
          $subject = &#8216;锁贸通任务ID448&#8217;;
</p>
<p>
          //付款金额，必填
</p>
<p>
          $total_amount = 0.01;
</p>
<p>
          //商品描述，可空
</p>
<p>
          $body = &#8216;macbook pro2&#8217;;
</p>
<p>
          $customData = json_encode([&#8216;model_name&#8217; =&gt; &#8216;ewrwe&#8217;, &#8216;id&#8217; =&gt; 121]);//自定义参数
</p>
<p>
          $response = Alipay::tradePagePay($subject, $body, $out_trade_no, $total_amount, $customData);
</p>
<p>
          //输出表单
</p>
<p>
          return $response[&#8216;redirect_url&#8217;];
</p>
<p>
      }
</p>
<p>
      /**
</p>
<p>
       * 退款
</p>
<p>
       * @param Request $request
</p>
<p>
       */
</p>
<p>
      public function refund(Request $request)
</p>
<p>
      {
</p>
<p>
          //商户订单号
</p>
<p>
          $out_trade_no = $request-&gt;get(&#8216;trade_no&#8217;);
</p>
<p>
          $refund_amount = 0.01;
</p>
<p>
          $refund_reason = &#8216;任务取消退款&#8217;;
</p>
<p>
          $out_request_no = &#8216;201&#8217;;
</p>
<p>
          $response = Alipay::tradeRefund($out_trade_no, $refund_amount, $refund_reason, $out_request_no);
</p>
<p>
          dd($response);
</p>
<p>
      }
</p>
<p>
      /**
</p>
<p>
       * 退款查询
</p>
<p>
       * @param Request $request
</p>
<p>
       */
</p>
<p>
      public function refundQuery(Request $request)
</p>
<p>
      {
</p>
<p>
          //商户订单号
</p>
<p>
          $out_trade_no = $request-&gt;get(&#8216;trade_no&#8217;);
</p>
<p>
          $out_request_no = $request-&gt;get(&#8216;out_request_no&#8217;);
</p>
<p>
          $response = Alipay::refundQuery($out_trade_no,$out_request_no);
</p>
<p>
          dd($response);
</p>
<p>
      }
</p>
<p>
      /**
</p>
<p>
       * 交易是否成功查询
</p>
<p>
       * @param Request $request
</p>
<p>
       */
</p>
<p>
      public function tradePayQuery(Request $request)
</p>
<p>
      {
</p>
<p>
          //商户订单号
</p>
<p>
          $out_trade_no = $request-&gt;get(&#8216;trade_no&#8217;);
</p>
<p>
          $response = Alipay::tradePayQuery($out_trade_no);
</p>
<p>
          dd($response);
</p>
<p>
      }
</p>
<p>
      /**
</p>
<p>
       * 交易关闭
</p>
<p>
       * @param Request $request
</p>
<p>
       */
</p>
<p>
      public function tradeClose(Request $request)
</p>
<p>
      {
</p>
<p>
          //商户订单号
</p>
<p>
          $out_trade_no = $request-&gt;get(&#8216;trade_no&#8217;);
</p>
<p>
          $response = Alipay::Close($out_trade_no);
</p>
<p>
          dd($response);
</p>
<p>
      }
</p>
</p>
<p>
      /**
</p>
<p>
           * 异步通知
</p>
<p>
           * @param Request $request
</p>
<p>
           */
</p>
<p>
          public function notify(Request $request)
</p>
<p>
          {
</p>
<p>
              $result = Alipay::notify($_POST);
</p>
<p>
              /* 实际验证过程建议商户添加以下校验。
</p>
<p>
             1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号，
</p>
<p>
             2、判断total_amount是否确实为该订单的实际金额（即商户订单创建时的金额），
</p>
<p>
             3、校验通知中的seller_id（或者seller_email) 是否为out_trade_no这笔单据的对应的操作方（有的时候，一个商户可能有多个seller_id/seller_email）
</p>
<p>
             4、验证app_id是否为该商户本身。
</p>
<p>
             */
</p>
<p>
              if ($result) {//验证成功
</p>
<p>
                  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
</p>
<p>
                  //请在这里加上商户的业务逻辑程序代
</p>
</p>
<p>
                  //——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
</p>
</p>
<p>
                  //获取支付宝的通知返回参数，可参考技术文档中服务器异步通知参数列表
</p>
</p>
<p>
                  //商户订单号
</p>
</p>
<p>
                  $out_trade_no = $_POST[&#8216;out_trade_no&#8217;];
</p>
</p>
<p>
                  //支付宝交易号
</p>
</p>
<p>
                  $trade_no = $_POST[&#8216;trade_no&#8217;];
</p>
</p>
<p>
                  //交易状态
</p>
<p>
                  $trade_status = $_POST[&#8216;trade_status&#8217;];
</p>
</p>
<p>
                  if ($_POST[&#8216;trade_status&#8217;] == &#8216;TRADE_FINISHED&#8217;) {
</p>
</p>
<p>
                      //判断该笔订单是否在商户网站中已经做过处理
</p>
<p>
                      //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
</p>
<p>
                      //请务必判断请求时的total_amount与通知时获取的total_fee为一致的
</p>
<p>
                      //如果有做过处理，不执行商户的业务程序
</p>
</p>
<p>
                      //注意：
</p>
<p>
                      //退款日期超过可退款期限后（如三个月可退款），支付宝系统发送该交易状态通知
</p>
<p>
                  } else if ($_POST[&#8216;trade_status&#8217;] == &#8216;TRADE_SUCCESS&#8217;) {
</p>
<p>
                      //判断该笔订单是否在商户网站中已经做过处理
</p>
<p>
                      //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
</p>
<p>
                      //请务必判断请求时的total_amount与通知时获取的total_fee为一致的
</p>
<p>
                      //如果有做过处理，不执行商户的业务程序
</p>
<p>
                      //注意：
</p>
<p>
                      //付款完成后，支付宝系统发送该交易状态通知
</p>
<p>
                  }
</p>
<p>
                  //——请根据您的业务逻辑来编写程序（以上代码仅作参考）——
</p>
<p>
                  echo &#8220;success&#8221;;    //请不要修改或删除
</p>
<p>
              } else {
</p>
<p>
                  //验证失败
</p>
<p>
                  echo &#8220;fail&#8221;;
</p>
</p>
<p>
              }
</p>
<p>
          }
</p>
</p>
<p>
          /**
</p>
<p>
           * 同步通知 即支付成功后跳转到return_url 上时进行验证  如果支付方式是CURL方式将不会跳转 请注意
</p>
<p>
           * @param Request $request
</p>
<p>
           */
</p>
<p>
          public function returnUrl(Request $request)
</p>
<p>
          {
</p>
<p>
              $result = Alipay::notify($_GET);
</p>
<p>
              /* 实际验证过程建议商户添加以下校验。
</p>
<p>
                  1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号，
</p>
<p>
                  2、判断total_amount是否确实为该订单的实际金额（即商户订单创建时的金额），
</p>
<p>
                  3、校验通知中的seller_id（或者seller_email) 是否为out_trade_no这笔单据的对应的操作方（有的时候，一个商户可能有多个seller_id/seller_email）
</p>
<p>
                  4、验证app_id是否为该商户本身。
</p>
<p>
               */
</p>
</p>
<p>
              if ($result) {//验证成功
</p>
<p>
                  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
</p>
<p>
                  //请在这里加上商户的业务逻辑程序代码
</p>
</p>
<p>
                  //——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
</p>
<p>
                  //获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表
</p>
</p>
<p>
                  //商户订单号
</p>
<p>
                  $out_trade_no = htmlspecialchars($_GET[&#8216;out_trade_no&#8217;]);
</p>
</p>
<p>
                  //支付宝交易号
</p>
<p>
                  $trade_no = htmlspecialchars($_GET[&#8216;trade_no&#8217;]);
</p>
</p>
<p>
                  echo &#8220;验证成功&lt;br /&gt;支付宝交易号：&#8221; . $trade_no;
</p>
</p>
<p>
                  //——请根据您的业务逻辑来编写程序（以上代码仅作参考）——
</p>
</p>
<p>
                  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
</p>
<p>
              } else {
</p>
<p>
                  //验证失败
</p>
<p>
                  echo &#8220;验证失败&#8221;;
</p>
<p>
              }
</p>
<p>
          }
</p>
<p>
  }
</p>
<ul>
<li>
    步骤6：访问测试
  </li>
</ul>
<p><img loading="lazy" decoding="async" width="1074" height="625" src="/wp-content/uploads/2018/05/word-image-5255.png" class="wp-image-5786" srcset="/wp-content/uploads/2018/05/word-image-5255.png 1074w, /wp-content/uploads/2018/05/word-image-5255-300x175.png 300w, /wp-content/uploads/2018/05/word-image-5255-768x447.png 768w, /wp-content/uploads/2018/05/word-image-5255-1024x596.png 1024w" sizes="(max-width: 1074px) 100vw, 1074px" /></p>
<p>
  报错
</p>
<p><img loading="lazy" decoding="async" width="712" height="454" src="/wp-content/uploads/2018/05/word-image-5256.png" class="wp-image-5787" srcset="/wp-content/uploads/2018/05/word-image-5256.png 712w, /wp-content/uploads/2018/05/word-image-5256-300x191.png 300w" sizes="(max-width: 712px) 100vw, 712px" /></p>
<p>
  php artisan config:cache</p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/5738.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>TP3.2商城 （八）支付宝、邮件、QQ</title>
		<link>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/4136.html</link>
					<comments>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/4136.html#respond</comments>
		
		<dc:creator><![CDATA[Mr.Lee]]></dc:creator>
		<pubDate>Sat, 19 May 2018 12:22:22 +0000</pubDate>
				<category><![CDATA[TP3.2]]></category>
		<category><![CDATA[TP3.2商城]]></category>
		<category><![CDATA[后台框架]]></category>
		<category><![CDATA[QQ]]></category>
		<category><![CDATA[支付宝]]></category>
		<category><![CDATA[邮件]]></category>
		<guid isPermaLink="false">/?p=4136</guid>

					<description><![CDATA[支付宝 支付宝接口申请(了解) ①进入支付宝首页 ②点击企业进入蚂蚁金服 ③开始接入 ④使用企业账户进行登录  [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>支付宝</h1>
<h2>支付宝接口申请(了解)</h2>
<p>
  ①进入支付宝首页
</p>
<p><img loading="lazy" decoding="async" width="1133" height="264" src="/wp-content/uploads/2018/05/word-image-3678.png" class="wp-image-4137" srcset="/wp-content/uploads/2018/05/word-image-3678.png 1133w, /wp-content/uploads/2018/05/word-image-3678-300x70.png 300w, /wp-content/uploads/2018/05/word-image-3678-768x179.png 768w, /wp-content/uploads/2018/05/word-image-3678-1024x239.png 1024w" sizes="(max-width: 1133px) 100vw, 1133px" /></p>
<p>
  ②点击企业进入蚂蚁金服
</p>
<p><img loading="lazy" decoding="async" width="1286" height="491" src="/wp-content/uploads/2018/05/word-image-3679.png" class="wp-image-4138" srcset="/wp-content/uploads/2018/05/word-image-3679.png 1286w, /wp-content/uploads/2018/05/word-image-3679-300x115.png 300w, /wp-content/uploads/2018/05/word-image-3679-768x293.png 768w, /wp-content/uploads/2018/05/word-image-3679-1024x391.png 1024w" sizes="(max-width: 1286px) 100vw, 1286px" /></p>
<p>
  ③开始接入
</p>
<p><img loading="lazy" decoding="async" width="1015" height="475" src="/wp-content/uploads/2018/05/word-image-3680.png" class="wp-image-4139" srcset="/wp-content/uploads/2018/05/word-image-3680.png 1015w, /wp-content/uploads/2018/05/word-image-3680-300x140.png 300w, /wp-content/uploads/2018/05/word-image-3680-768x359.png 768w" sizes="(max-width: 1015px) 100vw, 1015px" /></p>
<p>
  ④使用企业账户进行登录
</p>
<p><img loading="lazy" decoding="async" width="1137" height="671" src="/wp-content/uploads/2018/05/word-image-3681.png" class="wp-image-4140" srcset="/wp-content/uploads/2018/05/word-image-3681.png 1137w, /wp-content/uploads/2018/05/word-image-3681-300x177.png 300w, /wp-content/uploads/2018/05/word-image-3681-768x453.png 768w, /wp-content/uploads/2018/05/word-image-3681-1024x604.png 1024w" sizes="(max-width: 1137px) 100vw, 1137px" /></p>
<h2>文档说明</h2>
<p>
  ①进入开放平台
</p>
<p><img loading="lazy" decoding="async" width="1313" height="236" src="/wp-content/uploads/2018/05/word-image-3682.png" class="wp-image-4141" srcset="/wp-content/uploads/2018/05/word-image-3682.png 1313w, /wp-content/uploads/2018/05/word-image-3682-300x54.png 300w, /wp-content/uploads/2018/05/word-image-3682-768x138.png 768w, /wp-content/uploads/2018/05/word-image-3682-1024x184.png 1024w" sizes="(max-width: 1313px) 100vw, 1313px" /></p>
<p>
  ②进入文档中心
</p>
<p><img loading="lazy" decoding="async" width="1337" height="505" src="/wp-content/uploads/2018/05/word-image-3683.png" class="wp-image-4142" srcset="/wp-content/uploads/2018/05/word-image-3683.png 1337w, /wp-content/uploads/2018/05/word-image-3683-300x113.png 300w, /wp-content/uploads/2018/05/word-image-3683-768x290.png 768w, /wp-content/uploads/2018/05/word-image-3683-1024x387.png 1024w" sizes="(max-width: 1337px) 100vw, 1337px" /></p>
<p>
  ③进入电脑网站支付文档
</p>
<p><img loading="lazy" decoding="async" width="1291" height="343" src="/wp-content/uploads/2018/05/word-image-3684.png" class="wp-image-4143" srcset="/wp-content/uploads/2018/05/word-image-3684.png 1291w, /wp-content/uploads/2018/05/word-image-3684-300x80.png 300w, /wp-content/uploads/2018/05/word-image-3684-768x204.png 768w, /wp-content/uploads/2018/05/word-image-3684-1024x272.png 1024w" sizes="(max-width: 1291px) 100vw, 1291px" /></p>
<p>
  ④在文档中找到demo
</p>
<p><img loading="lazy" decoding="async" width="1196" height="498" src="/wp-content/uploads/2018/05/word-image-3685.png" class="wp-image-4144" srcset="/wp-content/uploads/2018/05/word-image-3685.png 1196w, /wp-content/uploads/2018/05/word-image-3685-300x125.png 300w, /wp-content/uploads/2018/05/word-image-3685-768x320.png 768w, /wp-content/uploads/2018/05/word-image-3685-1024x426.png 1024w" sizes="(max-width: 1196px) 100vw, 1196px" /></p>
<p>
  ⑤查看下载代码的目录
</p>
<p><img loading="lazy" decoding="async" width="1034" height="457" src="/wp-content/uploads/2018/05/word-image-3686.png" class="wp-image-4145" srcset="/wp-content/uploads/2018/05/word-image-3686.png 1034w, /wp-content/uploads/2018/05/word-image-3686-300x133.png 300w, /wp-content/uploads/2018/05/word-image-3686-768x339.png 768w, /wp-content/uploads/2018/05/word-image-3686-1024x453.png 1024w" sizes="(max-width: 1034px) 100vw, 1034px" /></p>
<h2>接入测试支付</h2>
<h3>1.3.1、申请成为开发者</h3>
<p>
  由于个人不能使用支付宝收款接口。需要使用自己的个人账户成为开发者。开发者有默认到的测试应用可以进行开发
</p>
<p>
  ①申请成为开发者
</p>
<p><a href="https://open.alipay.com/platform/homeRoleSelection.htm">https://open.alipay.com/platform/homeRoleSelection.htm</a>
</p>
<p><img loading="lazy" decoding="async" width="1291" height="646" src="/wp-content/uploads/2018/05/word-image-3687.png" class="wp-image-4146" srcset="/wp-content/uploads/2018/05/word-image-3687.png 1291w, /wp-content/uploads/2018/05/word-image-3687-300x150.png 300w, /wp-content/uploads/2018/05/word-image-3687-768x384.png 768w, /wp-content/uploads/2018/05/word-image-3687-1024x512.png 1024w" sizes="(max-width: 1291px) 100vw, 1291px" /></p>
<p>
  ②进入管理中心
</p>
<p><img loading="lazy" decoding="async" width="1318" height="198" src="/wp-content/uploads/2018/05/word-image-3688.png" class="wp-image-4147" srcset="/wp-content/uploads/2018/05/word-image-3688.png 1318w, /wp-content/uploads/2018/05/word-image-3688-300x45.png 300w, /wp-content/uploads/2018/05/word-image-3688-768x115.png 768w, /wp-content/uploads/2018/05/word-image-3688-1024x154.png 1024w" sizes="(max-width: 1318px) 100vw, 1318px" /></p>
<p>
  外观如下
</p>
<p><img loading="lazy" decoding="async" width="1168" height="617" src="/wp-content/uploads/2018/05/word-image-3689.png" class="wp-image-4148" srcset="/wp-content/uploads/2018/05/word-image-3689.png 1168w, /wp-content/uploads/2018/05/word-image-3689-300x158.png 300w, /wp-content/uploads/2018/05/word-image-3689-768x406.png 768w, /wp-content/uploads/2018/05/word-image-3689-1024x541.png 1024w" sizes="(max-width: 1168px) 100vw, 1168px" /></p>
<p>
  ③进入研发服务
</p>
<p><img loading="lazy" decoding="async" width="894" height="256" src="/wp-content/uploads/2018/05/word-image-3690.png" class="wp-image-4149" srcset="/wp-content/uploads/2018/05/word-image-3690.png 894w, /wp-content/uploads/2018/05/word-image-3690-300x86.png 300w, /wp-content/uploads/2018/05/word-image-3690-768x220.png 768w" sizes="(max-width: 894px) 100vw, 894px" /></p>
<p>
  进入到研发服务界面
</p>
<p><img loading="lazy" decoding="async" width="1116" height="414" src="/wp-content/uploads/2018/05/word-image-3691.png" class="wp-image-4150" srcset="/wp-content/uploads/2018/05/word-image-3691.png 1116w, /wp-content/uploads/2018/05/word-image-3691-300x111.png 300w, /wp-content/uploads/2018/05/word-image-3691-768x285.png 768w, /wp-content/uploads/2018/05/word-image-3691-1024x380.png 1024w" sizes="(max-width: 1116px) 100vw, 1116px" /></p>
<p>
  ④查看沙箱的APPId
</p>
<p><img loading="lazy" decoding="async" width="841" height="200" src="/wp-content/uploads/2018/05/word-image-3692.png" class="wp-image-4151" srcset="/wp-content/uploads/2018/05/word-image-3692.png 841w, /wp-content/uploads/2018/05/word-image-3692-300x71.png 300w, /wp-content/uploads/2018/05/word-image-3692-768x183.png 768w" sizes="(max-width: 841px) 100vw, 841px" /></p>
<h3>1.3.2、设置密钥</h3>
<p>
  ①先设置密钥
</p>
<p><img loading="lazy" decoding="async" width="795" height="252" src="/wp-content/uploads/2018/05/word-image-3693.png" class="wp-image-4152" srcset="/wp-content/uploads/2018/05/word-image-3693.png 795w, /wp-content/uploads/2018/05/word-image-3693-300x95.png 300w, /wp-content/uploads/2018/05/word-image-3693-768x243.png 768w" sizes="(max-width: 795px) 100vw, 795px" /></p>
<p>
  界面如下
</p>
<p><img loading="lazy" decoding="async" width="793" height="417" src="/wp-content/uploads/2018/05/word-image-3694.png" class="wp-image-4153" srcset="/wp-content/uploads/2018/05/word-image-3694.png 793w, /wp-content/uploads/2018/05/word-image-3694-300x158.png 300w, /wp-content/uploads/2018/05/word-image-3694-768x404.png 768w" sizes="(max-width: 793px) 100vw, 793px" /></p>
<p>
  ②查看密钥的设置方式
</p>
<p>
  可以点击密钥生成方法查看如何填写密钥信息地址：<a href="https://docs.open.alipay.com/291/105971">https://docs.open.alipay.com/291/105971</a>
</p>
<p><img loading="lazy" decoding="async" width="910" height="482" src="/wp-content/uploads/2018/05/word-image-3695.png" class="wp-image-4154" srcset="/wp-content/uploads/2018/05/word-image-3695.png 910w, /wp-content/uploads/2018/05/word-image-3695-300x159.png 300w, /wp-content/uploads/2018/05/word-image-3695-768x407.png 768w" sizes="(max-width: 910px) 100vw, 910px" /></p>
<p>
  ③使用下载的工具生成密钥
</p>
<p><img loading="lazy" decoding="async" width="1286" height="732" src="/wp-content/uploads/2018/05/word-image-3696.png" class="wp-image-4155" srcset="/wp-content/uploads/2018/05/word-image-3696.png 1286w, /wp-content/uploads/2018/05/word-image-3696-300x171.png 300w, /wp-content/uploads/2018/05/word-image-3696-768x437.png 768w, /wp-content/uploads/2018/05/word-image-3696-1024x583.png 1024w" sizes="(max-width: 1286px) 100vw, 1286px" /></p>
<p>
  ④使用生成的密钥设置
</p>
<p><img loading="lazy" decoding="async" width="800" height="400" src="/wp-content/uploads/2018/05/word-image-3697.png" class="wp-image-4156" srcset="/wp-content/uploads/2018/05/word-image-3697.png 800w, /wp-content/uploads/2018/05/word-image-3697-300x150.png 300w, /wp-content/uploads/2018/05/word-image-3697-768x384.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<h3>1.3.3、本地测试支付</h3>
<p>
  ①拷贝下载的demo到web目录下
</p>
<p><img loading="lazy" decoding="async" width="954" height="437" src="/wp-content/uploads/2018/05/word-image-3698.png" class="wp-image-4157" srcset="/wp-content/uploads/2018/05/word-image-3698.png 954w, /wp-content/uploads/2018/05/word-image-3698-300x137.png 300w, /wp-content/uploads/2018/05/word-image-3698-768x352.png 768w" sizes="(max-width: 954px) 100vw, 954px" /></p>
<p>
  ②修改配置文件
</p>
<p><img loading="lazy" decoding="async" width="1064" height="691" src="/wp-content/uploads/2018/05/word-image-3699.png" class="wp-image-4158" srcset="/wp-content/uploads/2018/05/word-image-3699.png 1064w, /wp-content/uploads/2018/05/word-image-3699-300x195.png 300w, /wp-content/uploads/2018/05/word-image-3699-768x499.png 768w, /wp-content/uploads/2018/05/word-image-3699-1024x665.png 1024w" sizes="(max-width: 1064px) 100vw, 1064px" /></p>
<p>
  ③访问demo
</p>
<p><img loading="lazy" decoding="async" width="1256" height="393" src="/wp-content/uploads/2018/05/word-image-3700.png" class="wp-image-4159" srcset="/wp-content/uploads/2018/05/word-image-3700.png 1256w, /wp-content/uploads/2018/05/word-image-3700-300x94.png 300w, /wp-content/uploads/2018/05/word-image-3700-768x240.png 768w, /wp-content/uploads/2018/05/word-image-3700-1024x320.png 1024w" sizes="(max-width: 1256px) 100vw, 1256px" /></p>
<p>
  ④查看付款提交的action
</p>
<p><img loading="lazy" decoding="async" width="1183" height="503" src="/wp-content/uploads/2018/05/word-image-3701.png" class="wp-image-4160" srcset="/wp-content/uploads/2018/05/word-image-3701.png 1183w, /wp-content/uploads/2018/05/word-image-3701-300x128.png 300w, /wp-content/uploads/2018/05/word-image-3701-768x327.png 768w, /wp-content/uploads/2018/05/word-image-3701-1024x435.png 1024w" sizes="(max-width: 1183px) 100vw, 1183px" /></p>
<p>
  ⑤点击付款进入支付页
</p>
<p><img loading="lazy" decoding="async" width="1261" height="679" src="/wp-content/uploads/2018/05/word-image-3702.png" class="wp-image-4161" srcset="/wp-content/uploads/2018/05/word-image-3702.png 1261w, /wp-content/uploads/2018/05/word-image-3702-300x162.png 300w, /wp-content/uploads/2018/05/word-image-3702-768x414.png 768w, /wp-content/uploads/2018/05/word-image-3702-1024x551.png 1024w" sizes="(max-width: 1261px) 100vw, 1261px" /></p>
<p>
  由于付款需要使用账户 正常的个人账户不可以使用需要使用测试账户
</p>
<p>
  ⑥查看测试账户
</p>
<p><img loading="lazy" decoding="async" width="1036" height="670" src="/wp-content/uploads/2018/05/word-image-3703.png" class="wp-image-4162" srcset="/wp-content/uploads/2018/05/word-image-3703.png 1036w, /wp-content/uploads/2018/05/word-image-3703-300x194.png 300w, /wp-content/uploads/2018/05/word-image-3703-768x497.png 768w, /wp-content/uploads/2018/05/word-image-3703-1024x662.png 1024w" sizes="(max-width: 1036px) 100vw, 1036px" /></p>
<p>
  ⑦使用测试账户付款
</p>
<p><img loading="lazy" decoding="async" width="1318" height="602" src="/wp-content/uploads/2018/05/word-image-3704.png" class="wp-image-4163" srcset="/wp-content/uploads/2018/05/word-image-3704.png 1318w, /wp-content/uploads/2018/05/word-image-3704-300x137.png 300w, /wp-content/uploads/2018/05/word-image-3704-768x351.png 768w, /wp-content/uploads/2018/05/word-image-3704-1024x468.png 1024w" sizes="(max-width: 1318px) 100vw, 1318px" /></p>
<p>
  ⑧跳转到同步的回调地址
</p>
<p><img loading="lazy" decoding="async" width="1178" height="170" src="/wp-content/uploads/2018/05/word-image-3705.png" class="wp-image-4164" srcset="/wp-content/uploads/2018/05/word-image-3705.png 1178w, /wp-content/uploads/2018/05/word-image-3705-300x43.png 300w, /wp-content/uploads/2018/05/word-image-3705-768x111.png 768w, /wp-content/uploads/2018/05/word-image-3705-1024x148.png 1024w" sizes="(max-width: 1178px) 100vw, 1178px" /></p>
<h2>支付宝支付的流程</h2>
<p><img loading="lazy" decoding="async" width="1015" height="465" src="/wp-content/uploads/2018/05/word-image-3706.png" class="wp-image-4165" srcset="/wp-content/uploads/2018/05/word-image-3706.png 1015w, /wp-content/uploads/2018/05/word-image-3706-300x137.png 300w, /wp-content/uploads/2018/05/word-image-3706-768x352.png 768w" sizes="(max-width: 1015px) 100vw, 1015px" /></p>
<h2>项目中使用支付宝支付</h2>
<p>
  ①将测试的支付宝代码拷贝到项目中
</p>
<p><img loading="lazy" decoding="async" width="1246" height="457" src="/wp-content/uploads/2018/05/word-image-3707.png" class="wp-image-4166" srcset="/wp-content/uploads/2018/05/word-image-3707.png 1246w, /wp-content/uploads/2018/05/word-image-3707-300x110.png 300w, /wp-content/uploads/2018/05/word-image-3707-768x282.png 768w, /wp-content/uploads/2018/05/word-image-3707-1024x376.png 1024w" sizes="(max-width: 1246px) 100vw, 1246px" /></p>
<p>
  ②修改订单入库的返回数据代码
</p>
<p><img loading="lazy" decoding="async" width="1082" height="686" src="/wp-content/uploads/2018/05/word-image-3708.png" class="wp-image-4167" srcset="/wp-content/uploads/2018/05/word-image-3708.png 1082w, /wp-content/uploads/2018/05/word-image-3708-300x190.png 300w, /wp-content/uploads/2018/05/word-image-3708-768x487.png 768w, /wp-content/uploads/2018/05/word-image-3708-1024x649.png 1024w" sizes="(max-width: 1082px) 100vw, 1082px" /></p>
<p>
  ③拷贝支付的代码到下单处
</p>
<p><img loading="lazy" decoding="async" width="1214" height="703" src="/wp-content/uploads/2018/05/word-image-3709.png" class="wp-image-4168" srcset="/wp-content/uploads/2018/05/word-image-3709.png 1214w, /wp-content/uploads/2018/05/word-image-3709-300x174.png 300w, /wp-content/uploads/2018/05/word-image-3709-768x445.png 768w, /wp-content/uploads/2018/05/word-image-3709-1024x593.png 1024w" sizes="(max-width: 1214px) 100vw, 1214px" /><br />
<img loading="lazy" decoding="async" width="1062" height="551" src="/wp-content/uploads/2018/05/word-image-3710.png" class="wp-image-4169" srcset="/wp-content/uploads/2018/05/word-image-3710.png 1062w, /wp-content/uploads/2018/05/word-image-3710-300x156.png 300w, /wp-content/uploads/2018/05/word-image-3710-768x398.png 768w, /wp-content/uploads/2018/05/word-image-3710-1024x531.png 1024w" sizes="(max-width: 1062px) 100vw, 1062px" /></p>
<p>
  ④修改配置文件中的接口地址
</p>
<p><img loading="lazy" decoding="async" width="1082" height="673" src="/wp-content/uploads/2018/05/word-image-3711.png" class="wp-image-4170" srcset="/wp-content/uploads/2018/05/word-image-3711.png 1082w, /wp-content/uploads/2018/05/word-image-3711-300x187.png 300w, /wp-content/uploads/2018/05/word-image-3711-768x478.png 768w, /wp-content/uploads/2018/05/word-image-3711-1024x637.png 1024w" sizes="(max-width: 1082px) 100vw, 1082px" /></p>
<p>
  ⑤当支付时会报错
</p>
<p><img loading="lazy" decoding="async" width="1346" height="472" src="/wp-content/uploads/2018/05/word-image-3712.png" class="wp-image-4171" srcset="/wp-content/uploads/2018/05/word-image-3712.png 1346w, /wp-content/uploads/2018/05/word-image-3712-300x105.png 300w, /wp-content/uploads/2018/05/word-image-3712-768x269.png 768w, /wp-content/uploads/2018/05/word-image-3712-1024x359.png 1024w" sizes="(max-width: 1346px) 100vw, 1346px" /></p>
<p>
  修改函数名称即可
</p>
<p><img loading="lazy" decoding="async" width="1346" height="577" src="/wp-content/uploads/2018/05/word-image-3713.png" class="wp-image-4172" srcset="/wp-content/uploads/2018/05/word-image-3713.png 1346w, /wp-content/uploads/2018/05/word-image-3713-300x129.png 300w, /wp-content/uploads/2018/05/word-image-3713-768x329.png 768w, /wp-content/uploads/2018/05/word-image-3713-1024x439.png 1024w" sizes="(max-width: 1346px) 100vw, 1346px" /></p>
<p>
  ⑥处理同步回调
</p>
<p><img loading="lazy" decoding="async" width="1265" height="692" src="/wp-content/uploads/2018/05/word-image-3714.png" class="wp-image-4173" srcset="/wp-content/uploads/2018/05/word-image-3714.png 1265w, /wp-content/uploads/2018/05/word-image-3714-300x164.png 300w, /wp-content/uploads/2018/05/word-image-3714-768x420.png 768w, /wp-content/uploads/2018/05/word-image-3714-1024x560.png 1024w" sizes="(max-width: 1265px) 100vw, 1265px" /></p>
<p>
  ⑦处理异步
</p>
<p><img loading="lazy" decoding="async" width="1277" height="699" src="/wp-content/uploads/2018/05/word-image-3715.png" class="wp-image-4174" srcset="/wp-content/uploads/2018/05/word-image-3715.png 1277w, /wp-content/uploads/2018/05/word-image-3715-300x164.png 300w, /wp-content/uploads/2018/05/word-image-3715-768x420.png 768w, /wp-content/uploads/2018/05/word-image-3715-1024x561.png 1024w" sizes="(max-width: 1277px) 100vw, 1277px" /></p>
<p>
  支付效果如下
</p>
<p><img loading="lazy" decoding="async" width="1243" height="234" src="/wp-content/uploads/2018/05/word-image-3716.png" class="wp-image-4175" srcset="/wp-content/uploads/2018/05/word-image-3716.png 1243w, /wp-content/uploads/2018/05/word-image-3716-300x56.png 300w, /wp-content/uploads/2018/05/word-image-3716-768x145.png 768w, /wp-content/uploads/2018/05/word-image-3716-1024x193.png 1024w" sizes="(max-width: 1243px) 100vw, 1243px" /></p>
<p>
  注意：支付宝异步回调地址不能有任何的身份验证(支付宝自带验证)
</p>
<h1>邮件注册</h1>
<h2>邮件发送原理</h2>
<p><img loading="lazy" decoding="async" width="1257" height="493" src="/wp-content/uploads/2018/05/word-image-3717.png" class="wp-image-4176" srcset="/wp-content/uploads/2018/05/word-image-3717.png 1257w, /wp-content/uploads/2018/05/word-image-3717-300x118.png 300w, /wp-content/uploads/2018/05/word-image-3717-768x301.png 768w, /wp-content/uploads/2018/05/word-image-3717-1024x402.png 1024w" sizes="(max-width: 1257px) 100vw, 1257px" /></p>
<ol>
<li>
  a用户编写邮箱发送邮件
</li>
<li>
  邮件发送会请求a对应的邮件服务器，请求过程中使用smtp协议进行通信。
</li>
<li>
  当smtp服务收到请求，判断收件人是否为隶属于同一个平台。如果是直接将邮件内容存储到收件人的存储空间。否则请求收件人对应的邮件服务器
</li>
<li>
  收件人的smtp服务接受到请求。同样也会判断，如果确认为本平台的用户将内容存储到对应用户的存储空间
</li>
<li>
  收件人查看邮件时，使用pop3服务将存储空间中的内容获取回来
</li>
</ol>
<h2>实现发送邮件</h2>
<h3>申请邮箱账户</h3>
<p>
  ①注册163邮箱账户
</p>
<p><img loading="lazy" decoding="async" width="1277" height="580" src="/wp-content/uploads/2018/05/word-image-3718.png" class="wp-image-4178" srcset="/wp-content/uploads/2018/05/word-image-3718.png 1277w, /wp-content/uploads/2018/05/word-image-3718-300x136.png 300w, /wp-content/uploads/2018/05/word-image-3718-768x349.png 768w, /wp-content/uploads/2018/05/word-image-3718-1024x465.png 1024w" sizes="(max-width: 1277px) 100vw, 1277px" /></p>
<p>
  ②登录邮箱进入 首页
</p>
<p><img loading="lazy" decoding="async" width="1041" height="353" src="/wp-content/uploads/2018/05/word-image-3719.png" class="wp-image-4179" srcset="/wp-content/uploads/2018/05/word-image-3719.png 1041w, /wp-content/uploads/2018/05/word-image-3719-300x102.png 300w, /wp-content/uploads/2018/05/word-image-3719-768x260.png 768w, /wp-content/uploads/2018/05/word-image-3719-1024x347.png 1024w" sizes="(max-width: 1041px) 100vw, 1041px" /></p>
<h3>开启邮件服务</h3>
<p>
  ①进入开启的设置页
</p>
<p><img loading="lazy" decoding="async" width="1193" height="435" src="/wp-content/uploads/2018/05/word-image-3720.png" class="wp-image-4180" srcset="/wp-content/uploads/2018/05/word-image-3720.png 1193w, /wp-content/uploads/2018/05/word-image-3720-300x109.png 300w, /wp-content/uploads/2018/05/word-image-3720-768x280.png 768w, /wp-content/uploads/2018/05/word-image-3720-1024x373.png 1024w" sizes="(max-width: 1193px) 100vw, 1193px" /><br />
<img loading="lazy" decoding="async" width="1137" height="445" src="/wp-content/uploads/2018/05/word-image-3721.png" class="wp-image-4181" srcset="/wp-content/uploads/2018/05/word-image-3721.png 1137w, /wp-content/uploads/2018/05/word-image-3721-300x117.png 300w, /wp-content/uploads/2018/05/word-image-3721-768x301.png 768w, /wp-content/uploads/2018/05/word-image-3721-1024x401.png 1024w" sizes="(max-width: 1137px) 100vw, 1137px" /></p>
<p>
  ②开启权限(已经开启可以忽略)
</p>
<p><img loading="lazy" decoding="async" width="1151" height="401" src="/wp-content/uploads/2018/05/word-image-3722.png" class="wp-image-4182" srcset="/wp-content/uploads/2018/05/word-image-3722.png 1151w, /wp-content/uploads/2018/05/word-image-3722-300x105.png 300w, /wp-content/uploads/2018/05/word-image-3722-768x268.png 768w, /wp-content/uploads/2018/05/word-image-3722-1024x357.png 1024w" sizes="(max-width: 1151px) 100vw, 1151px" /></p>
<p>
  ③设置第三方授权密码
</p>
<p><img loading="lazy" decoding="async" width="1100" height="438" src="/wp-content/uploads/2018/05/word-image-3723.png" class="wp-image-4183" srcset="/wp-content/uploads/2018/05/word-image-3723.png 1100w, /wp-content/uploads/2018/05/word-image-3723-300x119.png 300w, /wp-content/uploads/2018/05/word-image-3723-768x306.png 768w, /wp-content/uploads/2018/05/word-image-3723-1024x408.png 1024w" sizes="(max-width: 1100px) 100vw, 1100px" /></p>
<p>
  此密码跟登录密码劲量不要设置为一致。此密码时给第三方使用。当第三方需要使用该邮箱发送邮件需要进行密码校验。密码校验使用第三方授权密码
</p>
<h3>使用PHPmailer实现邮箱发送</h3>
<p>
  ①将源码拷贝web目录下
</p>
<p><img loading="lazy" decoding="async" width="1319" height="489" src="/wp-content/uploads/2018/05/word-image-3724.png" class="wp-image-4184" srcset="/wp-content/uploads/2018/05/word-image-3724.png 1319w, /wp-content/uploads/2018/05/word-image-3724-300x111.png 300w, /wp-content/uploads/2018/05/word-image-3724-768x285.png 768w, /wp-content/uploads/2018/05/word-image-3724-1024x380.png 1024w" sizes="(max-width: 1319px) 100vw, 1319px" /></p>
<p>
  ②编写发送邮件的代码
</p>
<p><img loading="lazy" decoding="async" width="1052" height="701" src="/wp-content/uploads/2018/05/word-image-3725.png" class="wp-image-4185" srcset="/wp-content/uploads/2018/05/word-image-3725.png 1052w, /wp-content/uploads/2018/05/word-image-3725-300x200.png 300w, /wp-content/uploads/2018/05/word-image-3725-768x512.png 768w, /wp-content/uploads/2018/05/word-image-3725-1024x682.png 1024w" sizes="(max-width: 1052px) 100vw, 1052px" /></p>
<p>
  使用收件人的邮箱查看效果
</p>
<p><img loading="lazy" decoding="async" width="1189" height="556" src="/wp-content/uploads/2018/05/word-image-3726.png" class="wp-image-4186" srcset="/wp-content/uploads/2018/05/word-image-3726.png 1189w, /wp-content/uploads/2018/05/word-image-3726-300x140.png 300w, /wp-content/uploads/2018/05/word-image-3726-768x359.png 768w, /wp-content/uploads/2018/05/word-image-3726-1024x479.png 1024w" sizes="(max-width: 1189px) 100vw, 1189px" /></p>
<p>
  ③解决报错
</p>
<p><img loading="lazy" decoding="async" width="1339" height="176" src="/wp-content/uploads/2018/05/word-image-3727.png" class="wp-image-4187" srcset="/wp-content/uploads/2018/05/word-image-3727.png 1339w, /wp-content/uploads/2018/05/word-image-3727-300x39.png 300w, /wp-content/uploads/2018/05/word-image-3727-768x101.png 768w, /wp-content/uploads/2018/05/word-image-3727-1024x135.png 1024w" sizes="(max-width: 1339px) 100vw, 1339px" /></p>
<p>
  由于版本问题函数已经不存在因此注释掉对于代码即可
</p>
</p>
<p><img loading="lazy" decoding="async" width="1218" height="673" src="/wp-content/uploads/2018/05/word-image-3728.png" class="wp-image-4188" srcset="/wp-content/uploads/2018/05/word-image-3728.png 1218w, /wp-content/uploads/2018/05/word-image-3728-300x166.png 300w, /wp-content/uploads/2018/05/word-image-3728-768x424.png 768w, /wp-content/uploads/2018/05/word-image-3728-1024x566.png 1024w" sizes="(max-width: 1218px) 100vw, 1218px" /></p>
<h2>实现邮件注册</h2>
<h3>将发送邮件封装成为函数</h3>
<p>
  ①拷贝phpemailer源码
</p>
<p><img loading="lazy" decoding="async" width="1208" height="478" src="/wp-content/uploads/2018/05/word-image-3729.png" class="wp-image-4189" srcset="/wp-content/uploads/2018/05/word-image-3729.png 1208w, /wp-content/uploads/2018/05/word-image-3729-300x119.png 300w, /wp-content/uploads/2018/05/word-image-3729-768x304.png 768w, /wp-content/uploads/2018/05/word-image-3729-1024x405.png 1024w" sizes="(max-width: 1208px) 100vw, 1208px" /></p>
<p>
  ②创建发送邮件的公共函数
</p>
<p><img loading="lazy" decoding="async" width="975" height="688" src="/wp-content/uploads/2018/05/word-image-3730.png" class="wp-image-4190" srcset="/wp-content/uploads/2018/05/word-image-3730.png 975w, /wp-content/uploads/2018/05/word-image-3730-300x212.png 300w, /wp-content/uploads/2018/05/word-image-3730-768x542.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></p>
<p>
  ③创建方法测试邮件发送
</p>
<p><img loading="lazy" decoding="async" width="945" height="427" src="/wp-content/uploads/2018/05/word-image-3731.png" class="wp-image-4191" srcset="/wp-content/uploads/2018/05/word-image-3731.png 945w, /wp-content/uploads/2018/05/word-image-3731-300x136.png 300w, /wp-content/uploads/2018/05/word-image-3731-768x347.png 768w" sizes="(max-width: 945px) 100vw, 945px" /><br />
<img loading="lazy" decoding="async" width="678" height="181" src="/wp-content/uploads/2018/05/word-image-3732.png" class="wp-image-4192" srcset="/wp-content/uploads/2018/05/word-image-3732.png 678w, /wp-content/uploads/2018/05/word-image-3732-300x80.png 300w" sizes="(max-width: 678px) 100vw, 678px" /></p>
<h3>修改数据表</h3>
<p>
  ①修改表结构
</p>
<p><img loading="lazy" decoding="async" width="795" height="331" src="/wp-content/uploads/2018/05/word-image-3733.png" class="wp-image-4193" srcset="/wp-content/uploads/2018/05/word-image-3733.png 795w, /wp-content/uploads/2018/05/word-image-3733-300x125.png 300w, /wp-content/uploads/2018/05/word-image-3733-768x320.png 768w" sizes="(max-width: 795px) 100vw, 795px" /></p>
<p>
  ②修改自定义字段
</p>
<p><img loading="lazy" decoding="async" width="1082" height="446" src="/wp-content/uploads/2018/05/word-image-3734.png" class="wp-image-4194" srcset="/wp-content/uploads/2018/05/word-image-3734.png 1082w, /wp-content/uploads/2018/05/word-image-3734-300x124.png 300w, /wp-content/uploads/2018/05/word-image-3734-768x317.png 768w, /wp-content/uploads/2018/05/word-image-3734-1024x422.png 1024w" sizes="(max-width: 1082px) 100vw, 1082px" /></p>
<h3>实现邮箱注册</h3>
<p>
  ①创建邮箱注册的方法
</p>
<p><img loading="lazy" decoding="async" width="997" height="583" src="/wp-content/uploads/2018/05/word-image-3735.png" class="wp-image-4195" srcset="/wp-content/uploads/2018/05/word-image-3735.png 997w, /wp-content/uploads/2018/05/word-image-3735-300x175.png 300w, /wp-content/uploads/2018/05/word-image-3735-768x449.png 768w" sizes="(max-width: 997px) 100vw, 997px" /></p>
<p>
  ②处理模板文件
</p>
<p><img loading="lazy" decoding="async" width="1093" height="685" src="/wp-content/uploads/2018/05/word-image-3736.png" class="wp-image-4196" srcset="/wp-content/uploads/2018/05/word-image-3736.png 1093w, /wp-content/uploads/2018/05/word-image-3736-300x188.png 300w, /wp-content/uploads/2018/05/word-image-3736-768x481.png 768w, /wp-content/uploads/2018/05/word-image-3736-1024x642.png 1024w" sizes="(max-width: 1093px) 100vw, 1093px" /><br />
<img loading="lazy" decoding="async" width="909" height="557" src="/wp-content/uploads/2018/05/word-image-3737.png" class="wp-image-4197" srcset="/wp-content/uploads/2018/05/word-image-3737.png 909w, /wp-content/uploads/2018/05/word-image-3737-300x184.png 300w, /wp-content/uploads/2018/05/word-image-3737-768x471.png 768w" sizes="(max-width: 909px) 100vw, 909px" /></p>
<p>
  ③在模型中实现方法对用户信息进行入库
</p>
<p><img loading="lazy" decoding="async" width="1027" height="668" src="/wp-content/uploads/2018/05/word-image-3738.png" class="wp-image-4198" srcset="/wp-content/uploads/2018/05/word-image-3738.png 1027w, /wp-content/uploads/2018/05/word-image-3738-300x195.png 300w, /wp-content/uploads/2018/05/word-image-3738-768x500.png 768w, /wp-content/uploads/2018/05/word-image-3738-1024x666.png 1024w" sizes="(max-width: 1027px) 100vw, 1027px" /></p>
<p>
  ④测试实现注册的入库
</p>
<p><img loading="lazy" decoding="async" width="1187" height="233" src="/wp-content/uploads/2018/05/word-image-3739.png" class="wp-image-4199" srcset="/wp-content/uploads/2018/05/word-image-3739.png 1187w, /wp-content/uploads/2018/05/word-image-3739-300x59.png 300w, /wp-content/uploads/2018/05/word-image-3739-768x151.png 768w, /wp-content/uploads/2018/05/word-image-3739-1024x201.png 1024w" sizes="(max-width: 1187px) 100vw, 1187px" /></p>
<h3>实现注册成功发送邮件</h3>
<p>
  激活邮件本质就是项目中的一个方法的连接地址。此地址当用户访问时需要知道具体是哪一个用户在进行激活操作。因此需要标识符。
</p>
<p><img loading="lazy" decoding="async" width="1034" height="670" src="/wp-content/uploads/2018/05/word-image-3740.png" class="wp-image-4200" srcset="/wp-content/uploads/2018/05/word-image-3740.png 1034w, /wp-content/uploads/2018/05/word-image-3740-300x194.png 300w, /wp-content/uploads/2018/05/word-image-3740-768x498.png 768w, /wp-content/uploads/2018/05/word-image-3740-1024x664.png 1024w" sizes="(max-width: 1034px) 100vw, 1034px" /></p>
<p>
  效果如下
</p>
<p><img loading="lazy" decoding="async" width="951" height="436" src="/wp-content/uploads/2018/05/word-image-3741.png" class="wp-image-4201" srcset="/wp-content/uploads/2018/05/word-image-3741.png 951w, /wp-content/uploads/2018/05/word-image-3741-300x138.png 300w, /wp-content/uploads/2018/05/word-image-3741-768x352.png 768w" sizes="(max-width: 951px) 100vw, 951px" /></p>
<h3>实现用户激活</h3>
<p>
  ①实现邮箱激活
</p>
<p><img loading="lazy" decoding="async" width="1073" height="592" src="/wp-content/uploads/2018/05/word-image-3742.png" class="wp-image-4202" srcset="/wp-content/uploads/2018/05/word-image-3742.png 1073w, /wp-content/uploads/2018/05/word-image-3742-300x166.png 300w, /wp-content/uploads/2018/05/word-image-3742-768x424.png 768w, /wp-content/uploads/2018/05/word-image-3742-1024x565.png 1024w" sizes="(max-width: 1073px) 100vw, 1073px" /></p>
<p>
  点击链接激活之后的结果
</p>
<p><img loading="lazy" decoding="async" width="1299" height="346" src="/wp-content/uploads/2018/05/word-image-3743.png" class="wp-image-4203" srcset="/wp-content/uploads/2018/05/word-image-3743.png 1299w, /wp-content/uploads/2018/05/word-image-3743-300x80.png 300w, /wp-content/uploads/2018/05/word-image-3743-768x205.png 768w, /wp-content/uploads/2018/05/word-image-3743-1024x273.png 1024w" sizes="(max-width: 1299px) 100vw, 1299px" /></p>
<p>
  ②修改手机注册默认为激活状态
</p>
<p><img loading="lazy" decoding="async" width="1017" height="533" src="/wp-content/uploads/2018/05/word-image-3744.png" class="wp-image-4204" srcset="/wp-content/uploads/2018/05/word-image-3744.png 1017w, /wp-content/uploads/2018/05/word-image-3744-300x157.png 300w, /wp-content/uploads/2018/05/word-image-3744-768x403.png 768w" sizes="(max-width: 1017px) 100vw, 1017px" /></p>
<p>
  ③禁止没有激活的用户登录
</p>
<p><img loading="lazy" decoding="async" width="986" height="701" src="/wp-content/uploads/2018/05/word-image-3745.png" class="wp-image-4205" srcset="/wp-content/uploads/2018/05/word-image-3745.png 986w, /wp-content/uploads/2018/05/word-image-3745-300x213.png 300w, /wp-content/uploads/2018/05/word-image-3745-768x546.png 768w" sizes="(max-width: 986px) 100vw, 986px" /></p>
<h1>3、腾讯登录</h1>
<h2>3.1、腾讯登录签约流程</h2>
<p>
  ①使用QQ号登录QQ互联
</p>
<p><img loading="lazy" decoding="async" width="1366" height="390" src="/wp-content/uploads/2018/05/word-image-3746.png" class="wp-image-4206" srcset="/wp-content/uploads/2018/05/word-image-3746.png 1366w, /wp-content/uploads/2018/05/word-image-3746-300x86.png 300w, /wp-content/uploads/2018/05/word-image-3746-768x219.png 768w, /wp-content/uploads/2018/05/word-image-3746-1024x292.png 1024w" sizes="(max-width: 1366px) 100vw, 1366px" /></p>
<p>
  具体地址：<a href="https://connect.qq.com/">https://connect.qq.com/</a>
</p>
<p>
  ②申请成为开发者
</p>
<p>
  对于第一次登录QQ互联默认会提示表单进行填写
</p>
<p><img loading="lazy" decoding="async" width="1207" height="690" src="/wp-content/uploads/2018/05/word-image-3747.png" class="wp-image-4207" srcset="/wp-content/uploads/2018/05/word-image-3747.png 1207w, /wp-content/uploads/2018/05/word-image-3747-300x171.png 300w, /wp-content/uploads/2018/05/word-image-3747-768x439.png 768w, /wp-content/uploads/2018/05/word-image-3747-1024x585.png 1024w" sizes="(max-width: 1207px) 100vw, 1207px" /></p>
<p>
  对于目前的在QQ互联下去申请成为开发者操作上可能不是特别方便 。也可以在腾讯开发平台下进行申请(http://open.qq.com/)。
</p>
<p>
  当开发者申请完成之后在应用中可以看到如下的结果
</p>
<p><img loading="lazy" decoding="async" width="1231" height="340" src="/wp-content/uploads/2018/05/word-image-3748.png" class="wp-image-4208" srcset="/wp-content/uploads/2018/05/word-image-3748.png 1231w, /wp-content/uploads/2018/05/word-image-3748-300x83.png 300w, /wp-content/uploads/2018/05/word-image-3748-768x212.png 768w, /wp-content/uploads/2018/05/word-image-3748-1024x283.png 1024w" sizes="(max-width: 1231px) 100vw, 1231px" /></p>
<p>
  ③创建应用
</p>
<p>
  当成为开发者之后才能创建应用
</p>
<p><img loading="lazy" decoding="async" width="1120" height="463" src="/wp-content/uploads/2018/05/word-image-3749.png" class="wp-image-4209" srcset="/wp-content/uploads/2018/05/word-image-3749.png 1120w, /wp-content/uploads/2018/05/word-image-3749-300x124.png 300w, /wp-content/uploads/2018/05/word-image-3749-768x317.png 768w, /wp-content/uploads/2018/05/word-image-3749-1024x423.png 1024w" sizes="(max-width: 1120px) 100vw, 1120px" /></p>
<p>
  ④选择具体的应用方式
</p>
<p><img loading="lazy" decoding="async" width="698" height="349" src="/wp-content/uploads/2018/05/word-image-3750.png" class="wp-image-4210" srcset="/wp-content/uploads/2018/05/word-image-3750.png 698w, /wp-content/uploads/2018/05/word-image-3750-300x150.png 300w" sizes="(max-width: 698px) 100vw, 698px" /></p>
<p>
  ⑤填写具体的信息
</p>
<p><img loading="lazy" decoding="async" width="1226" height="636" src="/wp-content/uploads/2018/05/word-image-3751.png" class="wp-image-4211" srcset="/wp-content/uploads/2018/05/word-image-3751.png 1226w, /wp-content/uploads/2018/05/word-image-3751-300x156.png 300w, /wp-content/uploads/2018/05/word-image-3751-768x398.png 768w, /wp-content/uploads/2018/05/word-image-3751-1024x531.png 1024w" sizes="(max-width: 1226px) 100vw, 1226px" /></p>
<p>
  ⑥查看应用列表
</p>
<p><img loading="lazy" decoding="async" width="1066" height="407" src="/wp-content/uploads/2018/05/word-image-3752.png" class="wp-image-4212" srcset="/wp-content/uploads/2018/05/word-image-3752.png 1066w, /wp-content/uploads/2018/05/word-image-3752-300x115.png 300w, /wp-content/uploads/2018/05/word-image-3752-768x293.png 768w, /wp-content/uploads/2018/05/word-image-3752-1024x391.png 1024w" sizes="(max-width: 1066px) 100vw, 1066px" /></p>
<p>
  创建应用成功之后同样需要审核。审核周期大概一天。
</p>
<p>
  ⑦查看应用的appid及APPkey
</p>
<p><img loading="lazy" decoding="async" width="1052" height="350" src="/wp-content/uploads/2018/05/word-image-3753.png" class="wp-image-4213" srcset="/wp-content/uploads/2018/05/word-image-3753.png 1052w, /wp-content/uploads/2018/05/word-image-3753-300x100.png 300w, /wp-content/uploads/2018/05/word-image-3753-768x256.png 768w, /wp-content/uploads/2018/05/word-image-3753-1024x341.png 1024w" sizes="(max-width: 1052px) 100vw, 1052px" /></p>
<h2>3.2、查看接口文档</h2>
<p>
  ①进入文档
</p>
<p><img loading="lazy" decoding="async" width="1128" height="199" src="/wp-content/uploads/2018/05/word-image-3754.png" class="wp-image-4214" srcset="/wp-content/uploads/2018/05/word-image-3754.png 1128w, /wp-content/uploads/2018/05/word-image-3754-300x53.png 300w, /wp-content/uploads/2018/05/word-image-3754-768x135.png 768w, /wp-content/uploads/2018/05/word-image-3754-1024x181.png 1024w" sizes="(max-width: 1128px) 100vw, 1128px" /></p>
<p>
  ②下载SDK代码
</p>
<p><img loading="lazy" decoding="async" width="820" height="511" src="/wp-content/uploads/2018/05/word-image-3755.png" class="wp-image-4215" srcset="/wp-content/uploads/2018/05/word-image-3755.png 820w, /wp-content/uploads/2018/05/word-image-3755-300x187.png 300w, /wp-content/uploads/2018/05/word-image-3755-768x479.png 768w" sizes="(max-width: 820px) 100vw, 820px" /></p>
<p>
  ③查看下载的目录
</p>
<p><img loading="lazy" decoding="async" width="969" height="342" src="/wp-content/uploads/2018/05/word-image-3756.png" class="wp-image-4216" srcset="/wp-content/uploads/2018/05/word-image-3756.png 969w, /wp-content/uploads/2018/05/word-image-3756-300x106.png 300w, /wp-content/uploads/2018/05/word-image-3756-768x271.png 768w" sizes="(max-width: 969px) 100vw, 969px" /></p>
<h2>3.2、使用demo</h2>
<p>
  ①拷贝源码到web目录
</p>
<p><img loading="lazy" decoding="async" width="1108" height="483" src="/wp-content/uploads/2018/05/word-image-3757.png" class="wp-image-4217" srcset="/wp-content/uploads/2018/05/word-image-3757.png 1108w, /wp-content/uploads/2018/05/word-image-3757-300x131.png 300w, /wp-content/uploads/2018/05/word-image-3757-768x335.png 768w, /wp-content/uploads/2018/05/word-image-3757-1024x446.png 1024w" sizes="(max-width: 1108px) 100vw, 1108px" /></p>
<p>
  ②访问QQ源码安装设置配置
</p>
<p><img loading="lazy" decoding="async" width="780" height="270" src="/wp-content/uploads/2018/05/word-image-3758.png" class="wp-image-4218" srcset="/wp-content/uploads/2018/05/word-image-3758.png 780w, /wp-content/uploads/2018/05/word-image-3758-300x104.png 300w, /wp-content/uploads/2018/05/word-image-3758-768x266.png 768w" sizes="(max-width: 780px) 100vw, 780px" /></p>
<p>
  具体配置信息
</p>
<p><img loading="lazy" decoding="async" width="1218" height="586" src="/wp-content/uploads/2018/05/word-image-3759.png" class="wp-image-4219" srcset="/wp-content/uploads/2018/05/word-image-3759.png 1218w, /wp-content/uploads/2018/05/word-image-3759-300x144.png 300w, /wp-content/uploads/2018/05/word-image-3759-768x369.png 768w, /wp-content/uploads/2018/05/word-image-3759-1024x493.png 1024w" sizes="(max-width: 1218px) 100vw, 1218px" /></p>
<p>
  备注：上图的授权回调地址缺少一层qq目录
</p>
<p>
  修改应用的授权回调
</p>
<p><img loading="lazy" decoding="async" width="1090" height="459" src="/wp-content/uploads/2018/05/word-image-3760.png" class="wp-image-4220" srcset="/wp-content/uploads/2018/05/word-image-3760.png 1090w, /wp-content/uploads/2018/05/word-image-3760-300x126.png 300w, /wp-content/uploads/2018/05/word-image-3760-768x323.png 768w, /wp-content/uploads/2018/05/word-image-3760-1024x431.png 1024w" sizes="(max-width: 1090px) 100vw, 1090px" /></p>
<p>
  ③查看案例
</p>
<p><img loading="lazy" decoding="async" width="658" height="172" src="/wp-content/uploads/2018/05/word-image-3761.png" class="wp-image-4221" srcset="/wp-content/uploads/2018/05/word-image-3761.png 658w, /wp-content/uploads/2018/05/word-image-3761-300x78.png 300w" sizes="(max-width: 658px) 100vw, 658px" /></p>
<p>
  查看QQ登录
</p>
<p><img loading="lazy" decoding="async" width="879" height="386" src="/wp-content/uploads/2018/05/word-image-3762.png" class="wp-image-4222" srcset="/wp-content/uploads/2018/05/word-image-3762.png 879w, /wp-content/uploads/2018/05/word-image-3762-300x132.png 300w, /wp-content/uploads/2018/05/word-image-3762-768x337.png 768w" sizes="(max-width: 879px) 100vw, 879px" /></p>
<p>
  进入授权页授权
</p>
<p><img loading="lazy" decoding="async" width="1183" height="504" src="/wp-content/uploads/2018/05/word-image-3763.png" class="wp-image-4223" srcset="/wp-content/uploads/2018/05/word-image-3763.png 1183w, /wp-content/uploads/2018/05/word-image-3763-300x128.png 300w, /wp-content/uploads/2018/05/word-image-3763-768x327.png 768w, /wp-content/uploads/2018/05/word-image-3763-1024x436.png 1024w" sizes="(max-width: 1183px) 100vw, 1183px" /></p>
<p>
  查看结果
</p>
<p><img loading="lazy" decoding="async" width="1133" height="134" src="/wp-content/uploads/2018/05/word-image-3764.png" class="wp-image-4224" srcset="/wp-content/uploads/2018/05/word-image-3764.png 1133w, /wp-content/uploads/2018/05/word-image-3764-300x35.png 300w, /wp-content/uploads/2018/05/word-image-3764-768x91.png 768w, /wp-content/uploads/2018/05/word-image-3764-1024x121.png 1024w" sizes="(max-width: 1133px) 100vw, 1133px" /></p>
<h2>3.4、项目中实现QQ登录</h2>
<p>
  ①将QQ登录的源码拷贝到项目中
</p>
<p><img loading="lazy" decoding="async" width="1334" height="608" src="/wp-content/uploads/2018/05/word-image-3765.png" class="wp-image-4225" srcset="/wp-content/uploads/2018/05/word-image-3765.png 1334w, /wp-content/uploads/2018/05/word-image-3765-300x137.png 300w, /wp-content/uploads/2018/05/word-image-3765-768x350.png 768w, /wp-content/uploads/2018/05/word-image-3765-1024x467.png 1024w" sizes="(max-width: 1334px) 100vw, 1334px" /></p>
<p>
  ②访问配置
</p>
<p><img loading="lazy" decoding="async" width="806" height="292" src="/wp-content/uploads/2018/05/word-image-3766.png" class="wp-image-4226" srcset="/wp-content/uploads/2018/05/word-image-3766.png 806w, /wp-content/uploads/2018/05/word-image-3766-300x109.png 300w, /wp-content/uploads/2018/05/word-image-3766-768x278.png 768w" sizes="(max-width: 806px) 100vw, 806px" /><br />
<img loading="lazy" decoding="async" width="1223" height="588" src="/wp-content/uploads/2018/05/word-image-3767.png" class="wp-image-4227" srcset="/wp-content/uploads/2018/05/word-image-3767.png 1223w, /wp-content/uploads/2018/05/word-image-3767-300x144.png 300w, /wp-content/uploads/2018/05/word-image-3767-768x369.png 768w, /wp-content/uploads/2018/05/word-image-3767-1024x492.png 1024w" sizes="(max-width: 1223px) 100vw, 1223px" /></p>
<p>
  ③处理登录的QQ图标
</p>
<p>
  先给QQ登录图标增加点击事件
</p>
<p><img loading="lazy" decoding="async" width="1079" height="310" src="/wp-content/uploads/2018/05/word-image-3768.png" class="wp-image-4228" srcset="/wp-content/uploads/2018/05/word-image-3768.png 1079w, /wp-content/uploads/2018/05/word-image-3768-300x86.png 300w, /wp-content/uploads/2018/05/word-image-3768-768x221.png 768w, /wp-content/uploads/2018/05/word-image-3768-1024x294.png 1024w" sizes="(max-width: 1079px) 100vw, 1079px" /></p>
<p>
  拷贝事件代码修改
</p>
<p><img loading="lazy" decoding="async" width="1280" height="668" src="/wp-content/uploads/2018/05/word-image-3769.png" class="wp-image-4229" srcset="/wp-content/uploads/2018/05/word-image-3769.png 1280w, /wp-content/uploads/2018/05/word-image-3769-300x157.png 300w, /wp-content/uploads/2018/05/word-image-3769-768x401.png 768w, /wp-content/uploads/2018/05/word-image-3769-1024x534.png 1024w" sizes="(max-width: 1280px) 100vw, 1280px" /></p>
<p>
  ④实现oauth方法
</p>
<p><img loading="lazy" decoding="async" width="1282" height="650" src="/wp-content/uploads/2018/05/word-image-3770.png" class="wp-image-4230" srcset="/wp-content/uploads/2018/05/word-image-3770.png 1282w, /wp-content/uploads/2018/05/word-image-3770-300x152.png 300w, /wp-content/uploads/2018/05/word-image-3770-768x389.png 768w, /wp-content/uploads/2018/05/word-image-3770-1024x519.png 1024w" sizes="(max-width: 1282px) 100vw, 1282px" /></p>
<p>
  当访问oauth方法会自动的进入到授权页
</p>
<p><img loading="lazy" decoding="async" width="1264" height="479" src="/wp-content/uploads/2018/05/word-image-3771.png" class="wp-image-4231" srcset="/wp-content/uploads/2018/05/word-image-3771.png 1264w, /wp-content/uploads/2018/05/word-image-3771-300x114.png 300w, /wp-content/uploads/2018/05/word-image-3771-768x291.png 768w, /wp-content/uploads/2018/05/word-image-3771-1024x388.png 1024w" sizes="(max-width: 1264px) 100vw, 1264px" /></p>
<p>
  ⑤实现回调接口
</p>
<p><img loading="lazy" decoding="async" width="1215" height="711" src="/wp-content/uploads/2018/05/word-image-3772.png" class="wp-image-4232" srcset="/wp-content/uploads/2018/05/word-image-3772.png 1215w, /wp-content/uploads/2018/05/word-image-3772-300x176.png 300w, /wp-content/uploads/2018/05/word-image-3772-768x449.png 768w, /wp-content/uploads/2018/05/word-image-3772-1024x599.png 1024w" sizes="(max-width: 1215px) 100vw, 1215px" /></p>
<p>
  效果
</p>
<p><img loading="lazy" decoding="async" width="1128" height="202" src="/wp-content/uploads/2018/05/word-image-3773.png" class="wp-image-4233" srcset="/wp-content/uploads/2018/05/word-image-3773.png 1128w, /wp-content/uploads/2018/05/word-image-3773-300x54.png 300w, /wp-content/uploads/2018/05/word-image-3773-768x138.png 768w, /wp-content/uploads/2018/05/word-image-3773-1024x183.png 1024w" sizes="(max-width: 1128px) 100vw, 1128px" /></p>
<p>
  ⑥修改代码获取用户信息
</p>
<p><img loading="lazy" decoding="async" width="966" height="596" src="/wp-content/uploads/2018/05/word-image-3774.png" class="wp-image-4234" srcset="/wp-content/uploads/2018/05/word-image-3774.png 966w, /wp-content/uploads/2018/05/word-image-3774-300x185.png 300w, /wp-content/uploads/2018/05/word-image-3774-768x474.png 768w" sizes="(max-width: 966px) 100vw, 966px" /></p>
<p>
  结果如下
</p>
<p><img loading="lazy" decoding="async" width="1118" height="472" src="/wp-content/uploads/2018/05/word-image-3775.png" class="wp-image-4235" srcset="/wp-content/uploads/2018/05/word-image-3775.png 1118w, /wp-content/uploads/2018/05/word-image-3775-300x127.png 300w, /wp-content/uploads/2018/05/word-image-3775-768x324.png 768w, /wp-content/uploads/2018/05/word-image-3775-1024x432.png 1024w" sizes="(max-width: 1118px) 100vw, 1118px" /></p>
<p>
  ⑦再次修改调用模型方法实现注册
</p>
<p><img loading="lazy" decoding="async" width="1037" height="668" src="/wp-content/uploads/2018/05/word-image-3776.png" class="wp-image-4236" srcset="/wp-content/uploads/2018/05/word-image-3776.png 1037w, /wp-content/uploads/2018/05/word-image-3776-300x193.png 300w, /wp-content/uploads/2018/05/word-image-3776-768x495.png 768w, /wp-content/uploads/2018/05/word-image-3776-1024x660.png 1024w" sizes="(max-width: 1037px) 100vw, 1037px" /></p>
<p>
  ⑧增加openID字段
</p>
<p><img loading="lazy" decoding="async" width="794" height="335" src="/wp-content/uploads/2018/05/word-image-3777.png" class="wp-image-4237" srcset="/wp-content/uploads/2018/05/word-image-3777.png 794w, /wp-content/uploads/2018/05/word-image-3777-300x127.png 300w, /wp-content/uploads/2018/05/word-image-3777-768x324.png 768w" sizes="(max-width: 794px) 100vw, 794px" /></p>
<p>
  ⑨修改模型
</p>
<p><img loading="lazy" decoding="async" width="1047" height="700" src="/wp-content/uploads/2018/05/word-image-3778.png" class="wp-image-4238" srcset="/wp-content/uploads/2018/05/word-image-3778.png 1047w, /wp-content/uploads/2018/05/word-image-3778-300x201.png 300w, /wp-content/uploads/2018/05/word-image-3778-768x513.png 768w, /wp-content/uploads/2018/05/word-image-3778-1024x685.png 1024w" sizes="(max-width: 1047px) 100vw, 1047px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>/%e5%90%8e%e5%8f%b0%e6%a1%86%e6%9e%b6/4136.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
