zoukankan      html  css  js  c++  java
  • 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 ?>


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

  • 相关阅读:
    【Vue】源码——编译过程
    FreeRADIUS 、DaloRADIUS 搭建记录
    docker 学习笔记
    wget 技巧
    Centos 部署Cobbler系统
    Cloudstack 安装记录
    利用Google GCM发送push通知到Android客户端
    利用ApnsPHP包向IOS推送消息
    Linux下SCP的使用
    Android Google购买PHP服务器端验证(订阅购买和一次性购买)
  • 原文地址:https://www.cnblogs.com/fangmr/p/11192152.html
Copyright © 2011-2022 走看看