控制器-訂單管理:
<?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 ;