php编写刷网课自助下单系统(第三方支付实例)

此项目是由于本人刚刚入门php且在校代刷网课而编写的,由于在上课时间不方便接单,故特意写一个自助下单系统来实现客户自助下单。
本项目主要实现以下功能:
1.用户下单
2.用户支付
3.用户通过账号查询订单
4.管理员登录查看所有订单

设计思路:项目比较简单,基本就是与数据库之间的通信,进行数据的增删改查。支付使用的是第三方支付接口。

以下是具体代码:
用户提交订单页面
index.php

 1 <?php
 2  header('Content-type: text/html; charset=UTF8');
 3 ?>
 4 <html>
 5 <head>
 6 <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
 7 </head>
 8 <body>
 9 <div class="content" align="center">
10 <form action="add.php" method="post">
11 <span>账号:</span>
12 <input type="text" name="id" placeholder="账号" required><br><br>
13 <span>密码:</span>
14 <input type="password" name="pwd" placeholder="密码" required><br><br>
15 <span>学校全称:</span>
16 <input type="text" name="school" placeholder="学校全称" required><br><br>
17 <span>课程平台:</span>
18 <input type="text" name="platform" placeholder="课程平台" value="智慧树" required><br><br>
19 <span>课程门数:</span>
20 <input type="text" name="count" placeholder="课程门数" id="num" required><br><br>
21 <span>课程名称:</span><br>
22 <textarea  name="classname" placeholder="请输入课程名称,多门课程用逗号分开" required>
23 </textarea><br>
24 <div class="list">
25 <p class="p1">总价:</p>
26 <input id="price" name="sprice"class="p1" value="0"  readonly="readonly">
27 <p class="p1">元</p>
28 </div>
29 <br>
30  <input type="submit" value="提交" class="submit" id="button">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
31 
32     <input type = "reset" value = "重置" class="reset">
33 </form>
34 </div>
35 </body>
36 <style>
37 body{
38     background:url(image/bg2.jpg);
39 }
40 .list{
41     120px;
42     height:50px;
43     background:url(image/bg5.jpg);
44 }
45 .p1{
46     float:left;
47 }
48 #price{
49     margin-top:15px;
50     50px;
51     color:red;
52 }
53 textarea{
54     height:100px;
55     padding: 5px 0px 0px 5px;
56      70%;
57 }
58 </style>
59 <script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js">
60 </script>
61 <script>    
62         $(function(){        
63             $('#num').on('input  propertychange',function(){                
64                 var num = $('#num').val();
65                 var price = num*15;
66                  $("#price").val(price);
67             })
68         });            
69 </script>
70 </html>


处理订单并生成支付数据页面
add.php

  1 <?php
  2  header('Content-type: text/html; charset=UTF8');
  3 ?>
  4 <?php    
  5     require_once "connect.php";
  6     $id=$_POST["id"];
  7     $pwd=$_POST["pwd"];
  8     $school=$_POST["school"];
  9     $platform=$_POST["platform"];
 10     $count=$_POST["count"];
 11     $classname=$_POST["classname"];
 12     $price=$_POST["sprice"];
 13     if($id==null){
 14             echo "<script>alert('请输入账号!');location='index.php';</script>";
 15         };
 16     if($pwd==null){
 17             echo "<script>alert('请输入密码!');location='index.php';</script>";
 18         };
 19     if($school==null){
 20             echo "<script>alert('请输入学校全称!');location='index.php';</script>";
 21         };
 22     if($platform==null){
 23             echo "<script>alert('请输入平台名称!');location='index.php';</script>";
 24         };
 25     if($count==null){
 26             echo "<script>alert('请输入课程数量!');location='index.php';</script>";
 27         };
 28     $sql="insert into orderdetail (id,pwd,school,platform,count,classname,time)values('$id','$pwd','$school','$platform','$count','$classname',now())";
 29     mysql_query("set names 'utf8'");
 30     mysql_query($sql);
 31     mysql_close;
 32     //echo "<script>alert('信息提交成功,跳转付款页面!');location='chosetopay.html';</script>";
 33 ?>
 34 
 35 <html>
 36 <head>
 37 <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
 38     <title>刷客在线支付</title>
 39 </head>
 40 <body>
 41 <center>
 42 <h1>请您确认订单信息:</h1>
 43 <span>账号:</span><?php echo $id ?><br>
 44 <span>密码:</span><?php echo $pwd ?><br>
 45 <span>学校:</span><?php echo $school ?><br>
 46 <span>平台:</span><?php echo $platform ?><br>
 47 <span>课程名:</span><?php echo $classname ?>
 48 <br><br><br>
 49 </center>
 50 <div align="center">
 51     <form>
 52         <p><input id="inputmoney" type="text" name="inputmoney" class="form-control" placeholder="请输入金额" required value="<?php echo $price.'.00'?>" readonly="readonly"></p>
 53         <div class="radio">
 54             <label>
 55                 <p><input type="radio" name="demo1" id="demo1-alipay" value="43" checked="">
 56                     支付宝支付</p>
 57             </label>
 58         </div>
 59         <div class="radio">
 60             <label>
 61                 <p><input type="radio" name="demo1" id="demo1-weixin" value="44">
 62                 微信支付</p>
 63             </label>
 64         </div>
 65         <button type="button" id="demoBtn1">确认支付</button>
 66     </form>
 67 </div>
 68     <form style='display:none;' id='formpay' name='formpay' method='post' action='https://api.6688pay.com:8080/?input_charset=utf-8'>
 69         <input name='order_no' id='order_no' type='text' value=''/>
 70         <input name='subject' id='subject' type='text' value='' />
 71         <input name='pay_type' id='pay_type' type='text' value='' />
 72         <input name='money' id='money' type='text' value=''/>
 73         <input name='app_id' id='app_id' type='text' value=''/>        
 74         <input name='extra' id='extra' type='text' value=''/>
 75         <input name='sign' id='sign' type='text' value=''/>
 76         <input type='submit' id='submitdemo1'>
 77     </form>
 78 
 79 <!-- Jquery files -->
 80 <script type="text/javascript" src="https://cdn.staticfile.org/jquery/1.11.1/jquery.min.js"></script>
 81 <script type="text/javascript">
 82 $().ready(function(){
 83     function getistype(){
 84         return ($("#demo1-alipay").is(':checked') ? "43" : "44" );
 85     }
 86 
 87     $("#demoBtn1").click(function(){
 88         $.get(
 89             "pay.php",
 90             {
 91                 money : $("#inputmoney").val(),
 92                 pay_type : getistype(),
 93             },
 94             function(data){
 95                 $("#order_no").val(data.order_no);
 96                 $('#subject').val(data.subject);
 97                 $("#pay_type").val(data.pay_type);                
 98                 $('#money').val(data.money);
 99                 $('#app_id').val(data.app_id);
100                 $('#extra').val(data.extra);
101                 $('#sign').val(data.sign);
102                 $('#submitdemo1').click();
103             }, "json"
104         );
105     });
106 });
107 </script>
108 <style>
109 body{
110     background:url("image/bg2.jpg");
111 }
112 </style>
113 </body>
114 </html> 


数据库连接页面
connect.php

 1 <?php
 2     define('DB_HOST', 'localhost');  
 3     define('DB_USER', 'root');  
 4     define('DB_PWD', '11111111');
 5     define('DB_CHARSET', 'UTF8');  
 6     define('DB_DBNAME', 'zzxd');
 7     
 8     $con=mysql_connect(DB_HOST,DB_USER,DB_PWD);
 9     if(!$con){
10         die('数据库连接失败!'.$mysql_error());
11     }
12     mysql_select_db("zzxd");
13 ?>


支付用的是第三方支付接口,因为本案例比较简单(主要是本人暂时用不来api)所以直接使用了它提供的Demo

(此处使用的是小叮当支付)


以下是Demo内容(Demo中的主页被我合并到add.php中了,就是add.php中的html部分):

pay.php

 1 <?php
 2 /**
 3  * ---------------------参数生成页-------------------------------
 4  */
 5     include 'define.php';
 6     //从网页传入money:支付价格, pay_type:支付渠道:43-支付宝;44-微信支付
 7     $order_no = date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);    //订单号
 8     $subject = '商品名称';
 9     $pay_type = $_GET["pay_type"];
10     $money = $_GET["money"];
11     $extra = "";
12     
13     $sign = md5("order_no=" . $order_no . "&subject=" . $subject . "&pay_type=" . $pay_type . "&money=" . $money . "&app_id=" . $app_id . "&extra=" . $extra . "&" . $app_secret);
14     //经常遇到有研发问为啥sign值返回错误,大多数原因:1.参数的排列顺序不对;2.上面的参数少传了,但是这里的sign值又带进去计算了,导致服务端sign算出来和你的不一样。
15 
16     $returndata['order_no'] = $order_no;
17     $returndata['subject'] = $subject;
18     $returndata['pay_type'] = $pay_type;
19     $returndata['money'] = $money;
20     $returndata['app_id'] = $app_id;
21     $returndata['extra'] =$extra;
22     $returndata['sign'] =$sign;
23     echo jsonSuccess("OK",$returndata,"");
24 
25 
26     //返回错误
27     function jsonError($message = '',$url=null)
28     {
29         $return['msg'] = $message;
30         $return['data'] = '';
31         $return['code'] = -1;
32         $return['url'] = $url;
33         return json_encode($return);
34     }
35 
36     //返回正确
37     function jsonSuccess($message = '',$data = '',$url=null)
38     {
39         return json_encode($data);
40     }
41 
42 ?>


define.php

 1 <?php    
 2     $app_id = "*****";
 3     $app_secret = "62f949392a2b4e2f***********";
 4 ?>
 5 ```
 6 notify.php
 7 
 8 ```
 9 <?php
10 /**
11  * ---------------------异步通知页面-------------------------------
12  *
13  * 此页就是接口后台的notify_url页的网址
14  * 支付成功,平台会通知这里。
15  *
16  * --------------------------------------------------------------
17  */
18     include 'define.php';
19 
20     //同步回调页面
21     //接收参数
22     $order_no = $_POST["order_no"];
23     $subject = $_POST["subject"];
24     $pay_type = $_POST["pay_type"];
25     $money = $_POST["money"];
26     $realmoney = $_POST["realmoney"];
27     $result = $_POST["result"];
28     $xddpay_order = $_POST["xddpay_order"];
29     $app_id = $_POST["app_id"];
30     $extra = $_POST["extra"];
31     $sign = $_POST["sign"];
32     
33     //计算签名
34     $mysign_forstr = "order_no=" . $order_no . "&subject=" . $subject . "&pay_type=" . $pay_type . "&money=" . $money . "&realmoney=" . $realmoney . "&result=" . $result . "&xddpay_order=" . $xddpay_order . "&app_id=" . $app_id . "&extra=" . $extra . "&" . $app_secret;
35     $mysign = strtoupper(md5($mysign_forstr));
36     
37     if ($sign == $mysign) //验签
38     {
39         if ($result == "success"){
40             //建议业务处理放在notify.asp页面,本页仅用于显示支付结果
41             //此处在您数据库中查询:此笔订单号是否已经异步通知给您付款成功了。如成功了,就给他返回一个支付成功的展示。
42             echo "success";
43         }
44         else{
45             echo "支付失败";
46         }
47     }
48     else
49     {
50         echo "mysign_forstr=" . $mysign_forstr;    //调试时开启
51         echo "<br>sign=" . $sign;
52         echo "<br>mysign=" . $mysign;
53         echo "<br><br>认证签名失败";
54     }
55 
56 ?>

return.php

 1 <?php
 2 /**
 3  * ---------------------支付成功,用户会跳转到这里-------------------------------
 4  *
 5  * 此页就是接口后台的return_url页的网址
 6  * 支付成功,平台会把用户跳转回这里。
 7  *
 8  * --------------------------------------------------------------
 9  */
10     include 'define.php';
11 
12     //同步回调页面
13     //接收参数
14     $order_no = $_GET["order_no"];
15     $subject = $_GET["subject"];
16     $pay_type = $_GET["pay_type"];
17     $money = $_GET["money"];
18     $realmoney = $_GET["realmoney"];
19     $result = $_GET["result"];
20     $xddpay_order = $_GET["xddpay_order"];
21     $app_id = $_GET["app_id"];
22     $extra = $_GET["extra"];
23     $sign = $_GET["sign"];
24     
25     //计算签名
26     $mysign_forstr = "order_no=" . $order_no . "&subject=" . $subject . "&pay_type=" . $pay_type . "&money=" . $money . "&realmoney=" . $realmoney . "&result=" . $result . "&xddpay_order=" . $xddpay_order . "&app_id=" . $app_id . "&extra=" . $extra . "&" . $app_secret;
27     $mysign = strtoupper(md5($mysign_forstr));
28     
29     if ($sign == $mysign) //验签
30     {
31         if ($result == "success"){
32             //建议业务处理放在notify.asp页面,本页仅用于显示支付结果
33             //此处在您数据库中查询:此笔订单号是否已经异步通知给您付款成功了。如成功了,就给他返回一个支付成功的展示。
34             echo "恭喜,支付成功!,订单号:".$order_no;
35         }
36         else{
37             echo "支付失败";
38         }
39     }
40     else
41     {
42         echo "mysign_forstr=" . $mysign_forstr;    //调试时开启
43         echo "<br>sign=" . $sign;
44         echo "<br>mysign=" . $mysign;
45         echo "<br><br>认证签名失败";
46     }
47 
48 ?>


到这里已经实现了用户下单以及支付功能,剩下的功能在此扩展即可
管理员登录页面:
admin.php

 1 <?php
 2 header('Content-type:text/html;charset="UTF8"');
 3 ?>
 4 <html>
 5 <body>
 6 <center>
 7 <form action="admin_see.php" method="post">
 8     <span>账号:</span><input type="text" name="userid" placeholder="请输入账号"><br><br>
 9     <span>密码:</span><input type="password" name="pwd" placeholder="请输入密码"><br><br>
10     <input type="submit" value="确定">
11 </form>
12 </center>
13 </body>
14 </html>


管理员登录成功查看数据页面:
admin_see.php

 1 <?php
 2 $HOST_ID=$_POST['userid'];
 3 $HOST_PWD=$_POST['pwd'];
 4 $con=mysql_connect("localhost",$HOST_ID,$HOST_PWD);
 5 if(!$con){
 6     echo "<script>alert('信息有误,请重新输入!');location='admin.php';</script>";
 7 }
 8 mysql_select_db("zzxd", $con);
 9 $result1=mysql_query("SELECT * from orderdetail");
10 echo "<table><tr><td>===账号===|</td><td>===密码===|</td><td>===学校===|</td><td>===平台===|</td><td>===课程===</td></tr>";
11 while($row=mysql_fetch_array($result1)){
12     echo "<tr>";
13     echo "<td>".$row['id']."</td>";
14     echo "<td>".$row['pwd']."</td>";
15     echo "<td>".$row['school']."</td>";
16     echo "<td>".$row['platform']."</td>";
17    echo "<td>".$row['classname']."</td>";
18     echo "</tr>";
19 }
20 echo "</table>";
21 
22 mysql_close($con);
23 
24 ?>


用户输入订单号查询订单页面
user.php

 1 <?php
 2 header('Content-type="text/html";charset="UTF8"');
 3 ?>
 4 <html>
 5 <body>
 6 <center>
 7 <h3>请输入账号进行订单查询</h3>
 8 <form action="user_view.php" method="post">
 9     <span>账号:</span><input type="text" name="userid" placeholder="请输入账号"><br><br>
10     <input type="submit" value="确定">
11 </form>
12 </center>
13 </body>
14 </html>


订单查询成功显示页面:
user_view.php

 1 <?php
 2 header('Content-type="text/html";charset="UTF8"');
 3 $USER_ID=$_POST['userid'];
 4 require_once('connect.php');
 5 $sql="select * from orderdetail where id = '$USER_ID'";
 6 $result1=mysql_query($sql);
 7 echo "<table><tr><td>===账号===|</td><td>===密码===|</td><td>===学校===|</td><td>===平台===|</td><td>===课程===</td></tr>";
 8 while($row=mysql_fetch_array($result1)){
 9     echo "<tr>";
10     echo "<td>".$row['id']."</td>";
11     echo "<td>".$row['pwd']."</td>";
12     echo "<td>".$row['school']."</td>";
13     echo "<td>".$row['platform']."</td>";
14    echo "<td>".$row['classname']."</td>";
15     echo "</tr>";
16 }
17 echo "</table>";
18 
19 mysql_close($con);
20 ?>


到这里要实现的目标功能全部实现,当然还有很多功能可以扩展,也还有很多地方可以优化和改进,此处就不再写了,有其它扩展我再来更新。
数据库比较简陋就不发了。

原文地址:https://www.cnblogs.com/fangmr/p/11192152.html