控制器-订单管理:
<?php
//会员中心
class MemberAction extends CommonAction {
public function _initialize(){
parent::_initialize();
//未付款
$unpaid=M('Order')->where(array('user_id'=>$_SESSION['qtuid'],'status'=>0))->count();
//待发货
$notship=M('Order')->where(array('user_id'=>$_SESSION['qtuid'],'status'=>1))->count();
//待收货
$notrec=M('Order')->where(array('user_id'=>$_SESSION['qtuid'],'status'=>2))->count();
//待评价
$notev=M('Order')->where(array('user_id'=>$_SESSION['qtuid'],'status'=>3))->count();
$this->assign("unpaid",$unpaid);
$this->assign("notship",$notship);
$this->assign("notrec",$notrec);
$this->assign("notev",$notev);
}
//订单页面
public function order(){
$id = I("get.id");
$where['user_id']=$_SESSION['qtuid'];
if($id==1){
$where['status']=0;
}elseif($id==2){
$where['status']=1;
}elseif($id==3){
$where['status']=2;
}elseif($id==4){
$where['status']=3;
}else{
$where['status']=0;
}
//订单列表
$orderlist=M('Order')->where($where)->select();
foreach($orderlist as $k=>$v){
$orderlist[$k][procount]=M('Orderdetail')->where("OrderID=$v[id]")->count();
$orderlist[$k][child]=M('Orderdetail')->where("OrderID=$v[id]")->select();
}
$this->assign("orderlist",$orderlist);
$this->display('Order/index');
}
//订单删除
public function orderdelete(){
$id = I("get.id");
$m = M("Order");
$n = M("Orderdetail");
$where['user_id']=$_SESSION['qtuid'];
if($id==1){
$where['status']=0;
};
$order=$m->where($where)->select();
$id_arr=array();
foreach($order as $k=>$v){
$id_arr[]=$v['id'];
}
$ids=implode(',',$id_arr);
$del = $m->where($where)->delete();
if($del){
$n->where(array("OrderID in ($ids)"))->delete();
$this->success("删除成功",U("Member/order"));
}else{
$this->error("删除失败");
}
}
}
<?php
//订单
class OrderAction extends CommonAction {
public function _initialize(){
parent::_initialize();
$this->isLogin();
$orderclass = $this->getProList2("项目服务",$this->lang,0,1,0,0);
foreach($orderclass as $k=>$v){
$orderclass[$k][proclasscontent]=strip_tags($v[proclasscontent]);//去除编辑器中P标签
}
$this->assign("orderclass",$orderclass);
}
public function index(){
$tid = I("get.tid");
if($tid==""){
$tid=1;
}
//分类名称
$type_name = M("Proclass")->where(array('id'=>$tid))->field("id,proclasscontent")->find();
$type_name[proclasscontent]=strip_tags($type_name[proclasscontent]);
if($tid==1){
$type_name[proclasscontent]='全部订单';
}
$this->assign("type_name",$type_name);
//订单列表
$orderlist = $this->getOrder($tid,$this->lang,$_SESSION['qtuid'],0,1,1,5);
foreach($orderlist as $k=>$v){
$addtime=$v[addtime];
$oldday=date_create(date("Y-m-d",$addtime));
$teday=date_create(date('Y-m-d'));
$diff=date_diff($oldday,$teday);
$orderlist[$k][day]=$diff->days;
}
$this->assign("orderlist",$orderlist);
// dump($orderlist);
//未付款
$Unpaid = $this->getOrder($tid,$this->lang,$_SESSION['qtuid'],0,1,0,0,2);
$ucount=count($Unpaid);
$this->assign("ucount",$ucount);
//退款
$Refund = $this->getOrder($tid,$this->lang,$_SESSION['qtuid'],0,1,0,0,-1);
$rcount=count($Refund);
$this->assign("rcount",$rcount);
$this->display();
}
//订单确认
public function confirm_order(){
$uid = $_SESSION['qtuid'];
$gid = I("get.gid");
if($gid!=""){
$data = M("Product")->where(array('id'=>$gid))->find();
$cartdata=array($data[id]=>array("id"=>$data[id],"uid"=>$uid,"name"=>$data[proname],"price"=>$data[price],"img"=>$data[prophoto],"prointo"=>$data[prointo],"addtime"=>time(),"num"=>1));
$tid=$gid;
}else{
$cartdata=$_SESSION['cart1'];
$tid=0;
}
$this->assign ('cartdata', $cartdata);
$this->assign ('cartcount', count($cartdata));
$this->assign ('tid', $tid);
$address = M("Address")->where(array('uid'=>$uid,'isdefault'=>1))->find();
$this->assign ('address', $address);
if($address==null){
$this->assign ('isaddress', 0);
}else{
$this->assign ('isaddress', 1);
}
$this->display();
}
public function orderpay(){
header("Content-type: text/html; charset=utf-8");
$gid = I("get.gid");
//默认收货地址
$uid = $_SESSION['qtuid'];
$address = M("Address")->where(array('uid'=>$uid,'isdefault'=>1))->find();
$this->assign ('address', $address);
if($gid!=""){
$goods = M("Product")->where(array('id'=>$gid))->find();
$pricecount=$goods['price'];
$order_data['tradeid']=date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
$order_data['name']=$address['receiver'];
$order_data['phone']=$address['tel'];
$order_data['address']=$address['province'].$address['city'].$address['area'].$address['address'];
$order_data['user_id']=$uid;
$order_data['total_price']=$pricecount;
$order_data['addtime']=time();
$oinfo=M('Order')->add($order_data);
$order=M('Order')->field('id')->find($oinfo);
$order_id=$order['id'];
if($oinfo){
$order_goods_data['OrderID']=$order_id;
$order_goods_data['ProductID']=$goods['id'];
$order_goods_data['ProductName']=$goods['proname'];
$order_goods_data['prophoto']=$goods['prophoto'];
$order_goods_data['Nums']=1;
$order_goods_data['Price']=$goods['price'];
$order_goods_data['Total_price']=$goods['price']*1;
$sinfo=D('Orderdetail')->add($order_goods_data);
$this->redirect('Order/pay',array('id'=>$order_id));
}
}else{
$cartdata=$_SESSION['cart1'];
$id_arr=array();
foreach($cartdata as $k=>$v){
$id_arr[]=$v['id'];
} //把购物车id(即商品id组成数组)
$ids=implode(',',$id_arr);//把商品id由数组变为逗号隔开,如:string(5) "11,12"
$goods=M('Product')->where("id in ($ids)")->select();
// dump($goods);
//商品总价格
$pricecount=$this->cart->getPrice();
$order_data=array();
foreach($goods as $k=>$v){
$order_data['tradeid']=date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
$order_data['name']=$address['receiver'];
$order_data['phone']=$address['tel'];
$order_data['address']=$address['province'].$address['city'].$address['area'].$address['address'];
$order_data['user_id']=$uid;
$order_data['total_price']=$pricecount;
$order_data['addtime']=time();
}
$oinfo=M('Order')->add($order_data);
$order=M('Order')->field('id')->find($oinfo);
$order_id=$order['id'];
if($oinfo){
$order_goods_data=array();
foreach($goods as $k=>$v){
$carpro=$this->cart->getItem($v['id']);
$num=$carpro[num];
$order_goods_data['OrderID']=$order_id;
$order_goods_data['ProductID']=$v['id'];
$order_goods_data['ProductName']=$v['proname'];
$order_goods_data['prophoto']=$v['prophoto'];
$order_goods_data['Nums']=$num;
$order_goods_data['Price']=$v['price'];
$order_goods_data['Total_price']=$v['price']*$num;
$sinfo=D('Orderdetail')->add($order_goods_data);
}
$this->cart->clear();
$this->redirect('Order/pay',array('id'=>$order_id));
}
}
// $this->display();
}
public function pay(){
$id = I("get.id");
$where['tp_order.id']=$id;
$m=M('Order');
$data=$m->where($where)->find();
$this->assign("data",$data);
$this->display();
}
public function topay(){
$id = I("get.id");
$where['id']=$id;
$m=M('Order');
$ordData=$m->where($where)->find();
$this->assign("ordData",$ordData);
// dump($ordData);
}
}
订单确认-confirm_order.php
<div class="user-right">
<h4>确认订单信息</h4>
<div class="user-con">
<div class="order-info">
<div class="order-l">
<volist name="cartdata" id="vo">
<div class="order-text">
<div class="col-sm-4 col-xs-5 order-img"><img src="__PUBLIC__/Uploads/Product/<{$vo.img}>" class="img-responsive"/></div>
<div class="col-sm-8 col-xs-7 order-r">
<p>商品名称:<{$vo.name}></p>
<p>订单日期:<{$vo.addtime|date="Y-m-d",###}></p>
<p>数量:<{$vo.num}></p>
<p>单价:¥<{$vo.price}></p>
</div>
<div class="clear"></div>
</div>
</volist>
</div>
<div class="order-l">
<div class="order-title">
收货<a href="<{:U('Member/address')}>" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" class="fr">管理收货地址</a>
</div>
<div class="order-text">
<ul class="order-ul">
<if condition="$isaddress eq 1">
<li class="on">
<p><{$address.receiver}>(收) <{$address.tel}><br /><{$address.province}><{$address.city}><{$address.area}><{$address.address}></p>
</li>
</if>
<li>
<a href="<{:U('Member/address')}>" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" class="more">
<img src="__CN__/img/jia.png" />
<p>添加新地址</p>
</a>
</li>
</ul>
</div>
<div class="order-pay order-btn">
<span>¥<{$cartprice}></span>
<!-- <a href="<{:U('Order/orderpay',array('gid'=>$gid))}>" target="_blank" rel="external nofollow" class="order-ok">立即付款</a> -->
<a href="javascript:void(0)" target="_blank" rel="external nofollow" οnclick="check()" class="order-ok">立即付款</a>
</div>
</div>
</div>
</div>
</div>
---------------------------------------------------------------------------------------------
<script type="text/javascript">
function check(){
var address = <{$isaddress}>;
var tid = <{$tid}>;
if(tid==0){
var str = "<{:U('Order/orderpay')}>";
url = str;
}else{
var str = "<{:U('Order/orderpay',array('gid'=>'tid'))}>";
url = str.replace("tid",tid);
}
if(address == 0){
alert('请添加收货地址!');
return false;
}else{
location.href=url;
}
}
</script>
注:添加地址可以查看会员中心—2—收货地址管理
选择支付方式-pay.php
<div class="user-right">
<h3>选择支付方式</h3>
<div class="user-con">
<div class="order-info">
<div class="order-l">
<div class="order-text">
<ul class="pay-li">
<form method="POST" action="<{:U('Pay/doalipay')}>" id="form1">
<li class="col-sm-6">
<input type="hidden" name="trade_no" value="<{$data.tradeid}>" />
<input type="hidden" name="Uname" value="<{$data.name}>" />
<input type="hidden" name="ordtotal_fee" value="<{$data.total_price}>" />
<input type="hidden" name="productHtml" value="<{:U('Product/index')}>" />
<a href="#" target="_blank" rel="external nofollow" οnclick="$('#form1').submit()"><img src="__CN__/img/pay01.jpg" class="img-responsive"/></a>
</li>
</form>
<li class="col-sm-6"><a href="" target="_blank" rel="external nofollow" >
<img src="__CN__/img/pay02.jpg" class="img-responsive"/></a>
</li>
<div class="clear"></div>
</ul>
</div>
</div>
</div>
</div>
</div>
控制器-支付宝支付
<?php
class PayAction extends CommonAction {
//在类初始化方法中,引入相关类库
public function _initialize() {
vendor('Alipay.Corefunction');
vendor('Alipay.Md5function');
vendor('Alipay.Notify');
vendor('Alipay.Submit');
}
//doalipay方法
/*该方法其实就是将接口文件包下alipayapi.php的内容复制过来
然后进行相关处理
*/
public function doalipay(){
/*********************************************************
把alipayapi.php中复制过来的如下两段代码去掉,
第一段是引入配置项,
第二段是引入submit.class.php这个类。
为什么要去掉??
第一,配置项的内容已经在项目的Config.php文件中进行了配置,我们只需用C函数进行调用即可;
第二,这里调用的submit.class.php类库我们已经在PayAction的_initialize()中已经引入;所以这里不再需要;
*****************************************************/
// require_once("alipay.config.php");
// require_once("lib/alipay_submit.class.php");
//这里我们通过TP的C函数把配置项参数读出,赋给$alipay_config;
$alipay_config=C('alipay_config');
/**************************请求参数**************************/
//这里C方法表示获取二级配置参数(conf->config)
$payment_type = "1"; //支付类型 //必填,不能修改
$notify_url = C('alipay.notify_url'); //服务器异步通知页面路径
$return_url = C('alipay.return_url'); //页面跳转同步通知页面路径
$seller_email = C('alipay.seller_email');//卖家支付宝帐户必填
$out_trade_no = $_POST['trade_no'];//商户订单号 通过支付页面的表单进行传递,注意要唯一!
$subject = $_POST['Uname']; //订单名称 //必填 通过支付页面的表单进行传递
$total_fee = $_POST['ordtotal_fee']; //付款金额 //必填 通过支付页面的表单进行传递
$body = ""; //订单描述 通过支付页面的表单进行传递
$show_url = $_POST['productHtml']; //商品展示地址 通过支付页面的表单进行传递
$anti_phishing_key = "";//防钓鱼时间戳 //若要使用请调用类文件submit中的query_timestamp函数
$exter_invoke_ip = get_client_ip(); //客户端的IP地址
/************************************************************/
//构造要请求的参数数组,无需改动
$parameter = array(
"service" => "create_direct_pay_by_user",
"partner" => trim($alipay_config['partner']),
"payment_type" => $payment_type,
"notify_url" => $notify_url,
"return_url" => $return_url,
"seller_email" => $seller_email,
"out_trade_no" => $out_trade_no,
"subject" => $subject,
"total_fee" => $total_fee,
"body" => $body,
"show_url" => $show_url,
"anti_phishing_key" => $anti_phishing_key,
"exter_invoke_ip" => $exter_invoke_ip,
"_input_charset" => trim(strtolower($alipay_config['input_charset']))
);
//建立请求
$alipaySubmit = new AlipaySubmit($alipay_config);
$html_text = $alipaySubmit->buildRequestForm($parameter,"post", "确认");
echo $html_text;
}
/******************************
服务器异步通知页面方法
其实这里就是将notify_url.php文件中的代码复制过来进行处理
*******************************/
function notifyurl(){
/*
同理去掉以下两句代码;
*/
//require_once("alipay.config.php");
//require_once("lib/alipay_notify.class.php");
//这里还是通过C函数来读取配置项,赋值给$alipay_config
$alipay_config=C('alipay_config');
//计算得出通知验证结果
$alipayNotify = new AlipayNotify($alipay_config);
$verify_result = $alipayNotify->verifyNotify();
if($verify_result) {
//验证成功
//获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
$out_trade_no = $_POST['out_trade_no']; //商户订单号
$trade_no = $_POST['trade_no']; //支付宝交易号
$trade_status = $_POST['trade_status']; //交易状态
$total_fee = $_POST['total_fee']; //交易金额
$notify_id = $_POST['notify_id']; //通知校验ID。
$notify_time = $_POST['notify_time']; //通知的发送时间。格式为yyyy-MM-dd HH:mm:ss。
$buyer_email = $_POST['buyer_email']; //买家支付宝帐号;
$parameter = array(
"out_trade_no" => $out_trade_no, //商户订单编号;
"trade_no" => $trade_no, //支付宝交易号;
"total_fee" => $total_fee, //交易金额;
"trade_status" => $trade_status, //交易状态
"notify_id" => $notify_id, //通知校验ID。
"notify_time" => $notify_time, //通知的发送时间。
"buyer_email" => $buyer_email, //买家支付宝帐号;
);
if($_POST['trade_status'] == 'TRADE_FINISHED') {
//
}else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {
if(!checkorderstatus($out_trade_no)){
orderhandle($parameter);
//进行订单处理,并传送从支付宝返回的参数;
}
}
echo "success"; //请不要修改或删除
}else {
//验证失败
echo "fail";
}
}
/*
页面跳转处理方法;
这里其实就是将return_url.php这个文件中的代码复制过来,进行处理;
*/
function returnurl(){
//头部的处理跟上面两个方法一样,这里不罗嗦了!
$alipay_config=C('alipay_config');
$alipayNotify = new AlipayNotify($alipay_config);//计算得出通知验证结果
$verify_result = $alipayNotify->verifyReturn();
if($verify_result) {
//验证成功
//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表
$out_trade_no = $_GET['out_trade_no']; //商户订单号
$trade_no = $_GET['trade_no']; //支付宝交易号
$trade_status = $_GET['trade_status']; //交易状态
$total_fee = $_GET['total_fee']; //交易金额
$notify_id = $_GET['notify_id']; //通知校验ID。
$notify_time = $_GET['notify_time']; //通知的发送时间。
$buyer_email = $_GET['buyer_email']; //买家支付宝帐号;
$parameter = array(
"out_trade_no" => $out_trade_no, //商户订单编号;
"trade_no" => $trade_no, //支付宝交易号;
"total_fee" => $total_fee, //交易金额;
"trade_status" => $trade_status, //交易状态
"notify_id" => $notify_id, //通知校验ID。
"notify_time" => $notify_time, //通知的发送时间。
"buyer_email" => $buyer_email, //买家支付宝帐号
);
if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS'){
if(!checkorderstatus($out_trade_no)){
orderhandle($parameter); //进行订单处理,并传送从支付宝返回的参数;
}
$this->redirect(C('alipay.successpage'));//跳转到配置项中配置的支付成功页面;
}else{
echo "trade_status=".$_GET['trade_status'];
$this->redirect(C('alipay.errorpage'));//跳转到配置项中配置的支付失败页面;
}
}else {
//验证失败
//如要调试,请看alipay_notify.php页面的verifyReturn函数
echo "支付失败!";
}
}
}
控制器-微信支付:
<?php
// 微信支付
class WxJsAPIAction extends CommonAction {
//在类初始化方法中,引入相关类库
public function _initialize() {
//引入WxPayPubHelper
vendor('WxPayPubHelper.WxPayPubHelper');
}
public function createQrcode(){
//使用统一支付接口
$unifiedOrder = new \UnifiedOrder_pub();
//设置统一支付接口参数
//设置必填参数
//appid已填,商户无需重复填写
//mch_id已填,商户无需重复填写
//noncestr已填,商户无需重复填写
//spbill_create_ip已填,商户无需重复填写
//sign已填,商户无需重复填写
$unifiedOrder->setParameter("body","贡献一分钱");//商品描述
//自定义订单号,此处仅作举例
$timeStamp = time();
$out_trade_no = C('WxPayConf_pub.APPID')."$timeStamp";
$unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号
$unifiedOrder->setParameter("total_fee","1");//总金额
$unifiedOrder->setParameter("notify_url", C('WxPayConf_pub.NOTIFY_URL'));//通知地址
$unifiedOrder->setParameter("trade_type","NATIVE");//交易类型
//非必填参数,商户可根据实际情况选填
//$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号
//$unifiedOrder->setParameter("device_info","XXXX");//设备号
//$unifiedOrder->setParameter("attach","XXXX");//附加数据
//$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间
//$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间
//$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记
//$unifiedOrder->setParameter("openid","XXXX");//用户标识
//$unifiedOrder->setParameter("product_id","XXXX");//商品ID
//获取统一支付接口结果
$unifiedOrderResult = $unifiedOrder->getResult();
//商户根据实际情况设置相应的处理流程
if ($unifiedOrderResult["return_code"] == "FAIL")
{
//商户自行增加处理流程
echo "通信出错:".$unifiedOrderResult['return_msg']."<br>";
}
elseif($unifiedOrderResult["result_code"] == "FAIL")
{
//商户自行增加处理流程
echo "错误代码:".$unifiedOrderResult['err_code']."<br>";
echo "错误代码描述:".$unifiedOrderResult['err_code_des']."<br>";
}
elseif($unifiedOrderResult["code_url"] != NULL)
{
//从统一支付接口获取到code_url
$code_url = $unifiedOrderResult["code_url"];
//商户自行增加处理流程
//......
}
$this->assign('out_trade_no',$out_trade_no);
$this->assign('code_url',$code_url);
$this->assign('unifiedOrderResult',$unifiedOrderResult);
$this->display('qrcode');
}
public function jsApiCall(){
//使用jsapi接口
$jsApi = new \JsApi_pub();
//=========步骤1:网页授权获取用户openid============
//通过code获得openid
if (!isset($_GET['code']))
{
//触发微信返回code码
$url = $jsApi->createOauthUrlForCode(C('WxPayConf_pub.JS_API_CALL_URL'));
Header("Location: $url");
}else
{
//获取code码,以获取openid
$code = $_GET['code'];
$jsApi->setCode($code);
$openid = $jsApi->getOpenId();
}
//=========步骤2:使用统一支付接口,获取prepay_id============
//使用统一支付接口
$unifiedOrder = new \UnifiedOrder_pub();
//设置统一支付接口参数
//设置必填参数
//appid已填,商户无需重复填写
//mch_id已填,商户无需重复填写
//noncestr已填,商户无需重复填写
//spbill_create_ip已填,商户无需重复填写
//sign已填,商户无需重复填写
$unifiedOrder->setParameter("openid",$openid);//商品描述
$unifiedOrder->setParameter("body","贡献一分钱");//商品描述
//自定义订单号,此处仅作举例
$timeStamp = time();
$out_trade_no = C('WxPayConf_pub.APPID').$timeStamp;
$unifiedOrder->setParameter("out_trade_no",$out_trade_no);//商户订单号
$unifiedOrder->setParameter("total_fee","1");//总金额
$unifiedOrder->setParameter("notify_url",C('WxPayConf_pub.NOTIFY_URL'));//通知地址
$unifiedOrder->setParameter("trade_type","JSAPI");//交易类型
//非必填参数,商户可根据实际情况选填
//$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号
//$unifiedOrder->setParameter("device_info","XXXX");//设备号
//$unifiedOrder->setParameter("attach","XXXX");//附加数据
//$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间
//$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间
//$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记
//$unifiedOrder->setParameter("openid","XXXX");//用户标识
//$unifiedOrder->setParameter("product_id","XXXX");//商品ID
$prepay_id = $unifiedOrder->getPrepayId();
//=========步骤3:使用jsapi调起支付============
$jsApi->setPrepayId($prepay_id);
$jsApiParameters = $jsApi->getParameters();
$this->assign('jsApiParameters',$jsApiParameters);
$this->display('pay');
//echo $jsApiParameters;
}
public function notify(){
//使用通用通知接口
$notify = new \Notify_pub();
//存储微信的回调
$xml = $GLOBALS['HTTP_RAW_POST_DATA'];
$notify->saveData($xml);
//验证签名,并回应微信。
//对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,
//微信会通过一定的策略(如30分钟共8次)定期重新发起通知,
//尽可能提高通知的成功率,但微信不保证通知最终能成功。
if($notify->checkSign() == FALSE){
$notify->setReturnParameter("return_code","FAIL");//返回状态码
$notify->setReturnParameter("return_msg","签名失败");//返回信息
}else{
$notify->setReturnParameter("return_code","SUCCESS");//设置返回码
}
$returnXml = $notify->returnXml();
echo $returnXml;
//==商户根据实际情况设置相应的处理流程,此处仅作举例=======
//以log文件形式记录回调信息
//$log_ = new Log_();
$log_name= __ROOT__."/Public/notify_url.log";//log文件路径
log_result($log_name,"【接收到的notify通知】:\n".$xml."\n");
if($notify->checkSign() == TRUE)
{
if ($notify->data["return_code"] == "FAIL") {
//此处应该更新一下订单状态,商户自行增删操作
log_result($log_name,"【通信出错】:\n".$xml."\n");
}
elseif($notify->data["result_code"] == "FAIL"){
//此处应该更新一下订单状态,商户自行增删操作
log_result($log_name,"【业务出错】:\n".$xml."\n");
}
else{
//此处应该更新一下订单状态,商户自行增删操作
log_result($log_name,"【支付成功】:\n".$xml."\n");
}
//商户自行增加处理流程,
//例如:更新订单状态
//例如:数据库操作
//例如:推送支付完成信息
}
}
function log_result($file,$word){
$fp = fopen($file,"a");
flock($fp, LOCK_EX) ;
fwrite($fp,"执行日期:".strftime("%Y-%m-%d-%H:%M:%S",time())."\n".$word."\n\n");
flock($fp, LOCK_UN);
fclose($fp);
}
}
注意:支付配置在conf->config
<?php
$config = array(
//财付通支付参数
'tenpay_config'=>array(
'partner' => '1900000113', //这里是你在成功申请财付通接口后获取到的商户号;
'key' => 'e82573dc7e6136ba414f2e2affbe39fa', //这里是你在成功申请财付通接口后获取到的密钥
'return_url' => 'http://testweb11.iecworld.com/caseshow/web/index.php?s=/Pay/tenreturnurl',
'notify_url' => 'http://testweb11.iecworld.com/caseshow/web/index.php?s=/Pay/tenreturnurl',
),
//支付宝支付参数1
'alipay_config'=>array(
'partner' =>'', //这里是你在成功申请支付宝接口后获取到的PID;
'key'=>'',//这里是你在成功申请支付宝接口后获取到的Key
'sign_type'=>strtoupper('MD5'),
'input_charset'=> strtolower('utf-8'),
'cacert'=> getcwd().'\\cacert.pem',
'transport'=> 'http',
),
//支付宝支付参数2
'alipay'=>array(
//这里是卖家的支付宝账号,也就是你申请接口时注册的支付宝账号
'seller_email'=>'[email protected]',
//这里是异步通知页面url,提交到项目的Pay控制器的notifyurl方法;
'notify_url'=>'http://www.xxx.com/Pay/notifyurl',
//这里是页面跳转通知url,提交到项目的Pay控制器的returnurl方法;
'return_url'=>'http://www.xxx.com/Pay/returnurl',
//支付成功跳转到的页面,我这里跳转到项目的User控制器,myorder方法,并传参payed(已支付列表)
'successpage'=>'User/myorder?ordtype=payed',
//支付失败跳转到的页面,我这里跳转到项目的User控制器,myorder方法,并传参unpay(未支付列表)
'errorpage'=>'User/myorder?ordtype=unpay',
),
);
?>
数据表
订单表:
CREATE TABLE IF NOT EXISTS `tp_order` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`user_id` int(4) NOT NULL,
`name` varchar(100) DEFAULT NULL,
`company_name` varchar(100) DEFAULT NULL,
`phone` varchar(50) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
`address` text,
`mobile` varchar(100) DEFAULT NULL,
`remank` text,
`lang` tinyint(1) DEFAULT '1',
`tradeid` varchar(20) DEFAULT NULL,
`status` tinyint(1) NOT NULL DEFAULT '0',
`paystatus` tinyint(1) DEFAULT '0',
`paytime` varchar(20) DEFAULT NULL,
`addtime` varchar(20) DEFAULT NULL,
`updatetime` varchar(20) DEFAULT NULL,
`total_price` float DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
订单详情表:
CREATE TABLE IF NOT EXISTS `tp_orderdetail` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`OrderID` int(10) unsigned NOT NULL DEFAULT '0',
`ProductID` int(10) unsigned NOT NULL DEFAULT '0',
`ProductName` varchar(120) NOT NULL DEFAULT '',
`Nums` int(11) NOT NULL DEFAULT '0',
`Price` float NOT NULL DEFAULT '0',
`Memo` text NOT NULL,
`prophoto` varchar(32) DEFAULT NULL,
`Total_price` float DEFAULT NULL,
`user_id` int(4) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `OrderID` (`OrderID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
地址管理表:
CREATE TABLE IF NOT EXISTS `tp_address` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`uid` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '用户id',
`province` varchar(255) DEFAULT '' COMMENT '省份',
`city` varchar(255) DEFAULT '' COMMENT '城市',
`area` varchar(255) DEFAULT '' COMMENT '地区',
`address` varchar(255) DEFAULT '' COMMENT '详细地址',
`receiver` varchar(30) DEFAULT NULL COMMENT '收货人',
`tel` varchar(16) DEFAULT NULL COMMENT '收货人电话',
`addtime` varchar(30) DEFAULT NULL COMMENT '添加时间',
`updatetime` varchar(30) DEFAULT NULL COMMENT '修改时间',
`isdefault` int(1) DEFAULT '0' COMMENT '是否设为默认地址',
PRIMARY KEY (`id`),
KEY `OrderID` (`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='地址管理' AUTO_INCREMENT=3 ;
产品表:
CREATE TABLE IF NOT EXISTS `tp_product` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`cid` int(4) DEFAULT NULL COMMENT '分类id',
`bid` int(11) DEFAULT '0' COMMENT '品牌id',
`lang` tinyint(1) DEFAULT '0' COMMENT '语言',
`proname` varchar(255) NOT NULL DEFAULT '' COMMENT '产品名称',
`price` varchar(30) DEFAULT NULL COMMENT '产品价格',
`isphoto` tinyint(1) DEFAULT '0' COMMENT '是否有图片',
`prophoto` varchar(30) NOT NULL DEFAULT '' COMMENT '产品图片',
`prothumb1` varchar(30) DEFAULT NULL COMMENT '产品缩略图1',
`prothumb2` varchar(30) DEFAULT NULL COMMENT '产品缩略图2',
`prointo` text COMMENT '产品简介',
`procontent` longtext COMMENT '产品详细说明',
`isshow` tinyint(2) DEFAULT NULL COMMENT '是否显示',
`isrecom` tinyint(2) DEFAULT NULL COMMENT '是否推荐',
`orderby` int(11) DEFAULT NULL COMMENT '排序',
`issj` tinyint(1) DEFAULT '0',
`sjisshow` tinyint(1) DEFAULT '1',
`sjprocon` longtext,
`opti` tinyint(1) DEFAULT '0',
`yetitle` varchar(50) DEFAULT NULL,
`keywords` text COMMENT '关键词',
`descri` text,
`hits` int(4) DEFAULT '0' COMMENT '点击量',
`otherpro` varchar(100) DEFAULT NULL COMMENT '其他产品',
`othernews` varchar(100) DEFAULT NULL COMMENT '其他新闻',
`otherdown` varchar(100) DEFAULT NULL COMMENT '其他下载',
`otheranswer` varchar(100) DEFAULT NULL COMMENT '其他回答',
`is_other_img` tinyint(1) DEFAULT '0' COMMENT '是否有关联图',
`tag_id` varchar(255) DEFAULT NULL,
`addtime` varchar(30) DEFAULT NULL COMMENT '添加时间',
`updatetime` varchar(30) DEFAULT NULL COMMENT '修改时间',
`pro_spec` text,
`sketch` text,
`islink` tinyint(1) DEFAULT '0' COMMENT '是否外链',
`title_href` varchar(100) DEFAULT NULL COMMENT '链接地址',
`bewrite` longtext COMMENT '产品描述',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=51 ;