fly 5 gadi atpakaļ
vecāks
revīzija
dad6499371

+ 2 - 1
app/Http/Controllers/QuickApp/Order/OrdersController.php

@@ -500,10 +500,11 @@ class OrdersController extends BaseController
     {
         if ($params = $this->getPayParams($request)) {
             $params['pay_merchant_source'] = 'QuickAppALiPay';
+            $params['type'] = 'App';
         } else {
             return response()->error('QAPP_PARAM_ERROR');
         }
-        $app = OrderArousePayFactory::ali($this->uid);
+        $app = OrderArousePayFactory::aliApp($this->uid);
         return $app->handle($params);
     }
 

+ 51 - 4
app/Libs/Pay/Merchants/AliPay.php

@@ -4,6 +4,7 @@ namespace App\Libs\Pay\Merchants;
 
 require_once dirname(__FILE__) . '../../../AliApp/aop/AopClient.php';
 require_once dirname(__FILE__) . '../../../AliApp/aop/request/AlipayTradeWapPayRequest.php';
+require_once dirname(__FILE__) . '../../../AliApp/aop/request/AlipayTradeAppPayRequest.php';
 
 class AliPay implements PayMerchantInterface
 {
@@ -33,15 +34,61 @@ class AliPay implements PayMerchantInterface
 
     public function send(array $data)
     {
-        $return_url = $data['return_url'];
-        unset($data['return_url']);
+        $type = $data['type'];
+        $params = [
+            'body' => $data['body'],
+            'subject' => $data['subject'],
+            'out_trade_no' => $data['out_trade_no'],
+            'timeout_express' => $data['timeout_express'],
+            'total_amount' => $data['total_amount'],
+            'product_code' => 'QUICK_WAP_WAY',
+        ];
+        switch ($type) {
+            case 'App':
+                return $this->AlipayTradeAppPayRequest($data);
+                break;
+            case 'Wap':
+                $return_url = $data['return_url'];
+                return $this->AlipayTradeWapPayRequest($params, $return_url);
+                break;
+        }
+    }
+
+    private function AlipayTradeWapPayRequest(array $data, $return_url)
+    {
         $request = new \AlipayTradeWapPayRequest();
         $request->setBizContent(json_encode($data));
         $request->setNotifyUrl(env('ALI_PAY_CALL_BACK'));
         $request->setReturnUrl($return_url);
-        $result = $this->app->pageExecute($request);
-        return $result;
+        return $this->app->pageExecute($request);
+    }
+
+    private function AlipayTradeAppPayRequest(array $data)
+    {
+        $this->app->postCharset = 'GBK';
+        $this->app->format = 'json';
+        $request = new \AlipayTradeAppPayRequest();
+        $request->setBizContent(json_encode($data));
+        $request->setNotifyUrl(env('ALI_PAY_CALL_BACK'));
+        $result = $this->app->sdkExecute($request);
+        dd($result);
+        $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
+        $resultCode = $result->$responseNode->code;
+        if (!empty($resultCode) && $resultCode == 10000) {
+            return [
+                'out_trade_no' => $result->$responseNode->out_trade_no,
+                'trade_no' => $result->$responseNode->trade_no,
+                'total_amount' => $result->$responseNode->total_amount,
+                'seller_id' => $result->$responseNode->seller_id,
+                'merchant_order_no' => $result->$responseNode->merchant_order_no,
+                'sign' => $result->sign,
+            ];
+        } else {
+            return false;
+        }
     }
+
+
     public function notify(array $data)
     {
         return $this->app->rsaCheckV1($data, $this->rsaPublicKeyFilePath, self::SIGN_TYPE);

+ 2 - 1
app/Modules/Trade/Pay/AliOrderArousePay.php

@@ -6,7 +6,7 @@ use App\Libs\Pay\PayFactory;
 use Exception;
 use Log;
 
-class AliOrderArousePay extends OrderArousePayAbstract
+class AliAppOrderArousePay extends OrderArousePayAbstract
 {
     public function arouse(array $data)
     {
@@ -18,6 +18,7 @@ class AliOrderArousePay extends OrderArousePayAbstract
             'total_amount' => $data['price'] / 100,
             'product_code' => 'QUICK_WAP_WAY',
             'return_url' => '',
+            'type' => $data['type'],
         ];
         try {
             $pay = PayFactory::aliPay();

+ 1 - 1
app/Modules/Trade/Pay/AliOrderArousePay.php

@@ -6,7 +6,7 @@ use App\Libs\Pay\PayFactory;
 use Exception;
 use Log;
 
-class AliOrderArousePay extends OrderArousePayAbstract
+class AliWapOrderArousePay extends OrderArousePayAbstract
 {
     public function arouse(array $data)
     {

+ 2 - 1
app/Modules/Trade/Pay/OrderArousePayFactory.php

@@ -5,7 +5,8 @@ namespace App\Modules\Trade\Pay;
 /**
  * 
  * @method static \App\Modules\Trade\Pay\WxAppOrderArousePay wxApp(array $data)
- * @method static \App\Modules\Trade\Pay\AliOrderArousePay ali(array $data)
+ * @method static \App\Modules\Trade\Pay\AliWapOrderArousePay aliWap(array $data)
+ * @method static \App\Modules\Trade\Pay\AliAppOrderArousePay aliApp(array $data)
  */
 class OrderArousePayFactory
 {