From f3ee469a267e818fa41df76714af32ab0f3d3800 Mon Sep 17 00:00:00 2001
From: xiaoxiao <xiaoxiao.hao@yoho.cn>
Date: Sat, 14 May 2016 13:46:54 +0800
Subject: [PATCH] 支付确认接口

---
 library/LibModels/Web/Home/OrderData.php                              |  22 ----------------------
 library/LibModels/Web/Product/PayData.php                             |  22 ++++++++++++++++++++++
 yohobuy/www.yohobuy.com/application/models/Shopping/Payment.php       | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 yohobuy/www.yohobuy.com/application/modules/Pay/controllers/Index.php |   4 ++--
 4 files changed, 141 insertions(+), 29 deletions(-)

diff --git a/library/LibModels/Web/Home/OrderData.php b/library/LibModels/Web/Home/OrderData.php
index 998929d..c76cc50 100644
--- a/library/LibModels/Web/Home/OrderData.php
+++ b/library/LibModels/Web/Home/OrderData.php
@@ -147,26 +147,4 @@ class OrderData
         // 调用接口获得数据
         return Yohobuy::post(Yohobuy::API_URL, $param);
     }
-
-    /**
-     * 支付成功后--支付确认接口
-     * @param type int $orderCode 订单号
-     * @param type int $paymentId 支付方式
-     * @param type int $uid 用户ID
-     * @return type []
-     */
-    public static function payConfirm($orderCode, $paymentId, $uid)
-    {
-        // 构建必传参数
-        $param = Yohobuy::param();
-        $param['method'] = 'app.SpaceOrders.payConfirm';
-        $param['order_code'] = $orderCode;
-        $param['payment_id'] = $paymentId;
-        $param['uid'] = intval($uid);
-        $param['client_secret'] = Sign::getSign($param);
-
-        // 调用接口获得数据
-        return Yohobuy::post(Yohobuy::API_URL, $param);
-        
-    }
 }
diff --git a/library/LibModels/Web/Product/PayData.php b/library/LibModels/Web/Product/PayData.php
index 404eab8..f2ec15e 100644
--- a/library/LibModels/Web/Product/PayData.php
+++ b/library/LibModels/Web/Product/PayData.php
@@ -240,4 +240,26 @@ class PayData
 
         return Yohobuy::get(Yohobuy::API_URL, $param);
     }
+    
+    /**
+     * 支付成功后--支付确认接口
+     * @param type int $orderCode 订单号
+     * @param type int $paymentId 支付方式
+     * @param type int $uid 用户ID
+     * @return type []
+     */
+    public static function payConfirm($orderCode, $paymentId, $uid)
+    {
+        // 构建必传参数
+        $param = Yohobuy::param();
+        $param['method'] = 'app.SpaceOrders.payConfirm';
+        $param['order_code'] = $orderCode;
+        $param['payment_id'] = $paymentId;
+        $param['uid'] = intval($uid);
+        $param['client_secret'] = Sign::getSign($param);
+
+        // 调用接口获得数据
+        return Yohobuy::post(Yohobuy::API_URL, $param);
+        
+    }
 }
\ No newline at end of file
diff --git a/yohobuy/www.yohobuy.com/application/models/Shopping/Payment.php b/yohobuy/www.yohobuy.com/application/models/Shopping/Payment.php
index bc1c43c..484a429 100644
--- a/yohobuy/www.yohobuy.com/application/models/Shopping/Payment.php
+++ b/yohobuy/www.yohobuy.com/application/models/Shopping/Payment.php
@@ -318,10 +318,10 @@ class PaymentModel
             $notify = new WxPayNativePay();
             $payResult = $notify->GetPayUrl($input);
 
-//            if ($payResult['result_code'] === 'FAIL') {
-//                self::$code['message'] = $payResult['err_code_des'];
-//                break;
-//            }
+            if ($payResult['result_code'] === 'FAIL') {
+                self::$code['message'] = $payResult['err_code_des'];
+                break;
+            }
 
             $orderData = $orderDetail['data'];
             $firstGoods = current($orderData['order_goods']);
@@ -425,7 +425,7 @@ class PaymentModel
         $orderCode =  $payResult->orderCode;
         //如果uid,为空,则从缓存中取uid,但还是不排除uid为空的情况下。
         $uid = empty($uid) ? self::getUid($orderCode) : $uid;
-        $confirm = OrderData::payConfirm($orderCode, $paymentId, $uid);
+        $confirm = PayData::payConfirm($orderCode, $paymentId, $uid);
         
 //        UdpLog::info(
 //            "【支付成功-发送确认接口】,function:payConfirm,orderCode:{$orderCode},支付方式ID:{$paymentId},接口返回",
@@ -433,4 +433,116 @@ class PaymentModel
 //        );
         return $confirm;
     }
+    
+    /**
+     * 获取支付有关信息
+     *
+     * @param int $uid 用户ID
+     * @param string $orderCode 订单号
+     * @param string $paymentType 支付方式
+     * @param string $userName 用户名
+     * @param string $alipayToken 支付宝用户token
+     * @return array
+     */
+    public static function getPayData($uid, $orderCode, $paymentType, $userName, $alipayToken)
+    {
+        $result = array();
+
+        do {
+            /* 判断是否有订单号参数 */
+            if (empty($orderCode)) {
+                $result['error'] = true;
+                $result['message'] = '订单号不能为空';
+                break;
+            }
+
+            /* 判断支付方式是否选择 */
+            $paymentPars = explode('_', $paymentType);
+            if (count($paymentPars) != 2) {
+                $result['error'] = true;
+                $result['message'] = '请选择一个支付方式';
+                break;
+            }
+
+            /* 判断订单信息是否存在 */
+            $orderDetail = OrderData::getOrderDetail($uid, $orderCode);
+            if (empty($orderDetail['data'])) {
+                $result['error'] = true;
+                $result['message'] = '没有找到该订单';
+                break;
+            }
+
+            /* 判断订单是否已取消 */
+            if (isset($orderDetail['data']['is_cancel']) && $orderDetail['data']['is_cancel'] === 'Y') {
+                $result['error'] = true;
+                $result['message'] = '订单已经取消';
+                $result['location'] = 'window.location="' . Helpers::url('/home/orders/detail', array('order_code' => $orderCode)) . '";';
+                break;
+            }
+
+            // 获取支付有关参数
+            $payId = $paymentPars[0];
+            $paymentParams = self::getPaymentById($payId);
+            if (empty($paymentParams)) {
+                $result['error'] = true;
+                $result['message'] = '支付系统繁忙,请稍后再试';
+                break;
+            }
+
+            $payService = PayFactory::factory($paymentParams);
+            if ($payService == false) { // 没找到支付方式时
+                $result['error'] = true;
+                $result['message'] = '请选择一个支付方式';
+                break;
+            }
+
+            $totalFee = $orderDetail['data']['payment_amount'] * 100;
+            $isTest = (APPLICATION_ENV === 'developer' || APPLICATION_ENV === 'testing');
+            $paymentParameter = $paymentPars[1];
+            // 判断是否传入支付宝token
+            if ($paymentType == 2 && !empty($alipayToken)) {
+
+                $paymentParameter = $alipayToken;
+            }
+
+            $reqParams = new Reqparams($orderCode, $totalFee, '有货订单号:' . $orderCode, '', $orderDetail['data']['create_time'], $paymentParameter, $isTest, $uid, $userName);
+            $reqPars = $payService->getPayRequestPars($reqParams);
+            if (empty($reqPars)) {
+                $result['error'] = true;
+                $result['message'] = '支付系统繁忙,请稍后再试';
+                break;
+            }
+
+            // 记录并更新订单支付方式
+            $paymentRecod = OrderData::updateOrderPayment($orderCode, $payId, $uid);
+            if (empty($paymentRecod) || $paymentRecod['code'] != 200) {
+                $result['error'] = true;
+                $result['message'] = isset($paymentRecod['message']) ? $paymentRecod['message'] : '系统繁忙,请稍后再试';
+                break;
+            }
+            $bankRecord = PayData::getBankByOrder($orderCode);
+            $bankCode = ($paymentParameter != 'platform' ? $paymentParameter : '');
+            if (isset($bankRecord['data']['bankCode']) && !empty($bankRecord['data']['bankCode'])) {
+                $bankPayRecord = PayData::updateOrderPayBank($orderCode, $payId, $bankCode);
+            } else {
+                $bankPayRecord = PayData::setOrderPayBank($orderCode, $payId, $bankCode);
+            }
+            if (!isset($bankPayRecord['code']) || $bankPayRecord['code'] != 200) {
+                $result['error'] = true;
+                $result['message'] = '支付方式记录失败';
+                break;
+            }
+
+            if ($reqPars['reqType'] == 'get') {
+                //直接跳转到支付界面
+                $result['go'] = true;
+                $result['payUrl'] = $reqPars['pay_url'] . '?' . $reqPars['pars'];
+            } else {
+                //如果是post,去form提交
+                $result = array('reqPars' => $reqPars);
+            }
+        } while (false);
+
+        return $result;
+    }
 }
\ No newline at end of file
diff --git a/yohobuy/www.yohobuy.com/application/modules/Pay/controllers/Index.php b/yohobuy/www.yohobuy.com/application/modules/Pay/controllers/Index.php
index 81eeda9..2543369 100644
--- a/yohobuy/www.yohobuy.com/application/modules/Pay/controllers/Index.php
+++ b/yohobuy/www.yohobuy.com/application/modules/Pay/controllers/Index.php
@@ -1,7 +1,7 @@
 <?php
 
 use Action\WebAction;
-use Shopping\PayModel;
+use Shopping\PaymentModel;
 use WebPlugin\Helpers;
 
 /**
@@ -20,7 +20,7 @@ class IndexController extends WebAction
         $orderCode = $this->get('order_code', $this->get('ordercode'));
         $paymentType = $this->get('payment_type');
         $alipayToken = $this->getSession('alipay_user_token');
-        $data = PayModel::getPayData($uid, $orderCode, $paymentType, $this->_uname, $alipayToken);
+        $data = PaymentModel::getPayData($uid, $orderCode, $paymentType, $this->_uname, $alipayToken);
         if (isset($data['error'])) {
             $this->helpJsRedirect($data['message']);
         }
--
libgit2 0.24.0