Browse Source

Merge branch 'master' of http://git.dever.cc:3000/dever-package/pay

dever 4 years ago
parent
commit
734abe6d72
4 changed files with 89 additions and 32 deletions
  1. 44 8
      lib/Core.php
  2. 23 10
      lib/Set.php
  3. 21 13
      lib/Wechat.php
  4. 1 1
      src/Api.php

+ 44 - 8
lib/Core.php

@@ -8,10 +8,19 @@ class Core
 	 */
 	public function updateOrder($order_id, $cash, $desc = '')
 	{
-		$db = Dever::db('pay/order');
-		$info = $db->one(array('order_id' => $order_id, 'rand' => time() . rand(1,1000)));
+		$project_id = $this->checkOrder($order_id);
+		if ($project_id) {
+			$info = array();
+			$info['status'] = 1;
+			$info['order_id'] = $order_id;
+			$info['project_id'] = $project_id;
+		} else {
+			$db = Dever::db('pay/order');
+			$info = $db->one(array('order_id' => $order_id, 'rand' => time() . rand(1,1000)));
+		}
+		
 		if ($info && $info['status']) {
-			$param['where_id'] = $info['id'];
+
 			$param['status'] = 2;
 			$msg = '支付成功';
 			if ($desc) {
@@ -20,7 +29,11 @@ class Core
 				$msg = '支付失败||' . $desc;
 			}
 			$this->log($msg, $info);
-			$db->update($param);
+
+			if (isset($info['id'])) {
+				$param['where_id'] = $info['id'];
+				$db->update($param);
+			}
 
 			$notify = false;
 			$key = false;
@@ -40,9 +53,15 @@ class Core
 			if ($notify && $key) {
 				
 				$send = array();
-				$send['pay_product_id'] = $info['product_id'];
-				$send['pay_uid'] = $info['uid'];
-				$send['pay_cash'] = $info['cash'];
+				if (isset($info['product_id'])) {
+					$send['pay_product_id'] = $info['product_id'];
+				}
+				if (isset($info['uid'])) {
+					$send['pay_uid'] = $info['uid'];
+				}
+				if (isset($info['cash'])) {
+					$send['pay_cash'] = $info['cash'];
+				}
 				$send['pay_order_id'] = $order_id;
 				$send['pay_status'] = $param['status'];
 				$send['pay_msg'] = $msg;
@@ -59,7 +78,7 @@ class Core
 					Dever::load($notify, $send);
 				}
 			}
-		} elseif(!$info) {
+		} else {
 			$this->log('支付失败', '错误的订单id:' . $order_id);
 		}
 	}
@@ -69,6 +88,9 @@ class Core
 	 */
 	protected function updateOrderParam($order_id, $data)
 	{
+		if ($this->checkOrder($order_id)) {
+			return false;
+		}
 		$db = Dever::db('pay/order');
 		$info = $db->one(array('order_id' => $order_id, 'status' => 1));
 		if ($info) {
@@ -83,6 +105,10 @@ class Core
 	 */
 	protected function createOrder($uid, $username, $account_id, $project_id, $product_id, $name, $cash, $type, $order_id = false)
 	{
+		if ($this->checkOrder($order_id)) {
+			return $order_id;
+		}
+		
 		$state = $order_id;
 		$db = Dever::db('pay/order');
 		if (!$state) {
@@ -113,6 +139,16 @@ class Core
 		return $order_id;
 	}
 
+	public function checkOrder($order_id)
+	{
+		if (strstr($order_id, 'O')) {
+			$array = explode('O', $order_id);
+			return $array[1];
+		}
+
+		return false;
+	}
+
 	/**
 	 * 获取回调url
 	 */

+ 23 - 10
lib/Set.php

@@ -18,17 +18,28 @@ class Set
 	}
 
 	# 带有安全验证的接口 需要传入dever_token,可以参考下边的test_order例子
-    public function updateStatus_api()
+    public function updateStatus_api($param = array())
     {
-    	$send = Dever::preInput('pay_');
+    	$send = $param ? $param : Dever::preInput('pay_');
         $tk_pic = $send['pay_tk_pic'];
         $tk_time = $send['pay_tk_time'];
         $tk_desc = $send['pay_tk_desc'];
         $order_id = $send['pay_order_id'];
+        $account_id = $send['pay_account_id'];
         $status = $send['pay_status'];
         $uid = $send['pay_uid'];
+        $cash = $send['pay_cash'];
 
-        $order = Dever::db('pay/order')->one(array('order_id' => $order_id, 'uid' => $uid));
+        $project_id = Dever::load('pay/lib/core')->checkOrder($order_id);
+        if ($project_id) {
+            $order = array();
+            $order['account_id'] = $account_id;
+        } else {
+            $order = Dever::db('pay/order')->one(array('order_id' => $order_id, 'uid' => $uid));
+            if ($order && $order['cash']) {
+                $cash = $order['cash'];
+            }
+        }
 
         if ($order) {
 
@@ -36,16 +47,18 @@ class Set
                 $pay = Dever::db('pay/account')->one($order['account_id']);
                 $method = '\\Pay\\Lib\\' . ucwords($pay['type']);
                 $method = new $method($pay);
-                $method->refund($order_id);
+                $result = $method->refund($order_id, $cash);
             } 
             
 
-        	$update['where_id'] = $order['id'];
-        	$update['status'] = $status;
-        	$update['tk_pic'] = $tk_pic;
-        	$update['tk_time'] = $tk_time;
-        	$update['tk_desc'] = $tk_desc;
-        	Dever::db('pay/order')->update($update);
+            if (isset($order['id'])) {
+                $update['where_id'] = $order['id'];
+                $update['status'] = $status;
+                $update['tk_pic'] = $tk_pic;
+                $update['tk_time'] = $tk_time;
+                $update['tk_desc'] = $tk_desc;
+                Dever::db('pay/order')->update($update);
+            }
         }
 
         return 'ok';

+ 21 - 13
lib/Wechat.php

@@ -53,22 +53,11 @@ class Wechat extends Core
 	}
 
 	# 退款
-	public function refund($order_id)
+	public function refundByOrder($order_id)
 	{
 		$info = Dever::db('pay/order')->one(array('order_id' => $order_id));
 		if ($info && ($info['status'] == 1 || $info['status'] == 2 || $info['status'] == 5)) {
-			$out_trade_no = $info['order_id'];
-			$info['cash'] = $info['cash'] * 100;
-			$total_fee = $info['cash'];
-			$refund_fee = $info['cash'];
-			$input = new \WxPayRefund();
-			$input->SetOut_trade_no($out_trade_no);
-			$input->SetTotal_fee($total_fee);
-			$input->SetRefund_fee($refund_fee);
-
-		    $input->SetOut_refund_no($out_trade_no . '_' . time());
-		    $input->SetOp_user_id($this->config->GetMerchantId());
-			$result = \WxPayApi::refund($this->config, $input);
+			$this->refund($info['order_id'], $info['cash']);
 
 			Dever::db('pay/order')->update(array('where_id' => $info['id'], 'status' => 5));
 
@@ -78,6 +67,25 @@ class Wechat extends Core
 		return false;
 	}
 
+
+	# 退款
+	public function refund($order_id, $cash)
+	{
+		$out_trade_no = $order_id;
+		$cash = $cash * 100;
+		$total_fee = $cash;
+		$refund_fee = $cash;
+		$input = new \WxPayRefund();
+		$input->SetOut_trade_no($out_trade_no);
+		$input->SetTotal_fee($total_fee);
+		$input->SetRefund_fee($refund_fee);
+
+	    $input->SetOut_refund_no($out_trade_no . '_' . time());
+	    $input->SetOp_user_id($this->config->GetMerchantId());
+		$result = \WxPayApi::refund($this->config, $input);
+		return $result;
+	}
+
 	/**
 	 * 获取统一下单的基本信息
 	 */

+ 1 - 1
src/Api.php

@@ -147,7 +147,7 @@ class Api
 		}
 		$this->pay();
 		$this->order_id = $this->getParam($param, 'order_id');
-		return $this->method->refund($this->order_id);
+		return $this->method->refundByOrder($this->order_id);
 	}
 
 	/**