diff --git a/extend/payment/PayEase.php b/extend/payment/PayEase.php index 971eae8c6867129eff097480037eb516c24f668f..3e8e19ec5422061abb27df749aefbfc520469cd0 100644 --- a/extend/payment/PayEase.php +++ b/extend/payment/PayEase.php @@ -107,36 +107,6 @@ class PayEase 'rows' => 6, 'message' => '请填写首信易公钥', ], - [ - 'element' => 'select', - 'placeholder' => '收银台类型', - 'is_multiple' => 0, - 'element_data' => [ - ['value'=>'STANDARD', 'name'=>'标准版'], - ['value'=>'DECLARE', 'name'=>'申报版'], - ['value'=>'CUSTOMS', 'name'=>'海淘版按照收银台类型值判断'], - ['value'=>'DECLARE', 'name'=>'需要同时提交身份信息和贸易 背景。STANDARD 不需要提交身份信息和 贸易背景。CUSTOMS 同申报版相似,区 别在于可不传银行卡号'], - ], - 'name' => 'cashierVersion', - 'title' => '收银台类型', - 'is_required' => 0, - 'message' => '请选择收银台类型', - ], - [ - 'element' => 'select', - 'placeholder' => '贸易背景', - 'is_multiple' => 0, - 'element_data' => [ - ['value'=>'GOODSTRADE', 'name'=>'货物贸易'], - ['value'=>'PLANETICKET', 'name'=>'机票'], - ['value'=>'HOTELACCOMMODATIO', 'name'=>'酒店'], - ['value'=>'STUDYABROAD', 'name'=>' 留学'] - ], - 'name' => 'forUse', - 'title' => '贸易背景', - 'is_required' => 0, - 'message' => '请选择贸易背景', - ], ]; return [ @@ -175,8 +145,6 @@ class PayEase 'requestId' => $params['order_no'].GetNumberCode(6), 'notifyUrl' => $params['notify_url'], 'callbackUrl' => $params['call_back_url'], - 'cashierVersion' => $this->config['cashierVersion'], - 'forUse' => $this->config['forUse'], ]; $payer = [ 'idType' => 'IDCARD', @@ -195,21 +163,15 @@ class PayEase $public_key = ROOT.'rsakeys/server.cer'; $str = $this->buildJson($private_key, $this->config['password'], $data); $date = $this->creatdate($str, $public_key); - //print_r($str);die; $url = 'https://apis.5upay.com/onlinePay/order'; - $ret = $this->execute( + return $this->execute( $private_key, $this->config['password'], $public_key, $url, $date ); - echo '
';
-        print_r($ret);die;
-
-        
-        return 100;
     }
 
     /**
@@ -223,8 +185,8 @@ class PayEase
      */
     public function Respond($params = [])
     {
-        file_put_contents(ROOT.'eeeeeeee.txt', json_encode($params));//die;
-        file_put_contents(ROOT.'hhhhhhhh.txt', json_encode($_SERVER));
+        // file_put_contents(ROOT.'eeeeeeee.txt', json_encode($params));//die;
+        // file_put_contents(ROOT.'hhhhhhhh.txt', json_encode($_SERVER));
  
         // 同步返回,直接进入订单详情页面
         if(substr(CurrentScriptName(), -20) == '_payease_respond.php' && empty($params['hmac']) && !empty($params['requestId']))
@@ -234,20 +196,22 @@ class PayEase
 
 
 
-        $params = json_decode('{"data":"B4BOlE8TEk7gvKRzzF+sVlxbXN6GHkFn0taferJCsP1b43xszuEzPRTAsWlm3ziiMAEYWYsNme2RtWAXYgiJPAW2Q0u8+LYZKvsHyVlSZB4C6e13CumLk2\/fAUcsLZ\/pUGvIidQOAkxwD5Rz7HqzyAnFSx+nSJxDbxJt8WQk6dAHXMqzm4VpSXpPgQkrfdr2sAw9xPMS5O5NiQlXyqjWwm5NY8UG5SjyBuYO6JGRlObzTw6hyAzjnEG3Yqp0YAuO2D6vFdgj6QgWIKeTeJWljXyidCxe\/u3wmko1lTnQg2vTweEEeUb5iGXLvg47w0A2BWlWqsw6SaCNYEblW8nJoH6RfcGMX05GDhBLTAW1uApMrzn80opmm79YlrQgiEdkFkfjT4Y2Ho3obN\/\/EeRl3bi9S72UaaiSAOdWh+3+bwJSPv1jcUDr2eqMrTlkfj+aHDltlu328lP9wtt9q4fnZ1Rz3gXDEUHHEF2zMNyjQCDIukIC8ZtVafDG6ZSl1pYPejOYj56a4W4TAliCIz6LtvYK4HwQuW+X0L5DBEUE4c94CuDiCzYW6TpGIhLMHpIq\/\/dDxnWlGL3ntX9YgLgDZmpoXQxogJb4ZIrbiqZm5Z90ZihYuNXdviTvYFSMtN6plzbT7WM3GbVqwiDayUnTbFSb7TlL6EOjQ6FGev6\/C12WItN8i9QDp+KwgH02FOgD9NXJmoEC3z3JJfYdFhwH1z19Sdcx2vhTdr\/F0yZS5egXgLUAx7g0ZNKaTgncyf7a5mK\/wR+9i398QWd5Cbr+\/oOzh8Z\/jA2dY2mTSkJYXPh8QV4kVxt7mijNnjnuM0nkxXBCL4bDePr9FiuEjdH2MAK4Se656+MT9Gqpi8td8Waql2750vvZQrJlGn6aKs\/orIxiySLa8e1oxlNvLcLByd4PZ9rZbyhIqA4GpgYFAxxtWbDSeLYmvc6PSKYMHWUo"}', true);
+        // $params = json_decode('{"data":"GwrbZZFVl2cVM9G5ACPr+b8RhiZgQkLtC5xHdYwkqEOwMDhUD+wzoeWoVj3swTJ0Q36JNCtjPRZ8TPYe5SkPuo261i\/i\/gzbgrGO1QZxxrqYCMEmLHj3dajdXu2+FZsW4AyIxgpsp0CJ3HQBezmRiKzG4rYZvMDXUgIBArT8T9bcl3HySzyfLovtAWw8jwC2MPYi8d1nsHKEP3uB5NPCA2y\/vXMt0iq2xGNlgVFD0OVk2RkADDYmPxZFH+cH1LH0mX2+Fe5Ga2\/KbUQlR7HTeAkxK1w5sHvzdBK5vtbWJD4vF\/XaNsTuJk4QIw12LtZHGeUNUeWa900CMMt+Jy3DbxnIRutQhudBB7KEFUDlcIWGDBhyikZyMzUWG1CZrbWyih3u6Pv3jgFjHXE0v8kvazWueumV2+\/MfOUYIs8Ax8QVnZVWBYggR3ZpwIQTayjoSLGtQOtvcHUJux\/K6TzRq8xXwVZnqy+yxQArIL4lbfdyEB6TDhQGLsykqwI9b5OhBpj83PQhhHljUhcGkPMgjME1KWL\/JayoS1m+MvYV\/f8K1bphFd4RIf5KxiEkjCeLYXlXC24Eu8V89F6RcVKZE8mZAFaoS7hFISWncTVhZQEAeqbrDl6cPk2CvGbmfJY1DLVDka+ueyl6hqaCtWjTB9D9UH5kh7sCr4WOD9XgHYMw1Kariju9BvUr7f6mhvLGWvFJj8qFejCe2a4\/CbHikmGedljz6EqjU3Op3o6eTe1PyHvXrKktdFWE6yV+VrHBlY9wEHk6fT32ovUkMbCvNX8liRgYaEJX4qtPmvsPs8gSQ0dMplccYGsHclzWTW5TC56CzjOp7pGujHZJ4kVsEIxLpDQDFV9AlxC\/4aNQPNisGv9rBmJ7gxITfrquOpaScAeCSjaTsEj4MS2OE89gAkZ+0YepULRV5F3C+pTWUYtHXam9BL6\/56oj6F\/oL0te"}', true);
+
+        // $_SERVER['HTTP_ENCRYPTKEY'] = 'gQ3QJ98euDJGQOI9UshCfcayWZwKO8OkPREZTVlTTQ4uz6cjTRvhQbvh0dgaPAGZcmHoC4wt0EAlzOCXiF7v+ipMKradhshfJhgOvXJrFJ8Hq7/vHzCCHm7Myqe8U00N20Gs/PJERMsZES3dYM1hlcK8jLBD/okWh2UJW8ocbZiR6hjs3jCzGC/tqv9A1VZi50A5/hnv9CXW2PFppTtZ6wSTVazp0+bAscqquqwABh21HTj65Kkv98OArF7fxeLS2LUPF6HkgkFS4711wcSXplvcssa+gecZ4Z9BVz4JmWKsvLCFoOIg3gwRcPRBdfSTw2tENDVxtKWC+1g6XpBxew==';
+        // $_SERVER['HTTP_MERCHANTID'] = '890000593';
 
         // 异步处理
         $private_key = ROOT.'rsakeys/client.pfx';
         $public_key = ROOT.'rsakeys/test.cer';
         $params['encryptKey'] = isset($_SERVER['HTTP_ENCRYPTKEY']) ? $_SERVER['HTTP_ENCRYPTKEY'] : '';
         $params['merchantId'] = isset($_SERVER['HTTP_MERCHANTID']) ? $_SERVER['HTTP_MERCHANTID'] : '';
-        $data = $this->NotifyCheckHmac($private_key, $params, $public_key, $this->config['password']);
-var_dump($data);die;
+        $ret = $this->NotifyCheckHmac($private_key, $params, $public_key, $this->config['password']);
+
         // 支付状态
-        if(isset($data['status']) && $data['status'] == 'SUCCESS')
+        if(isset($ret['code']) && $ret['code'] == 0 && isset($ret['data']['status']) && $ret['data']['status'] == 'SUCCESS')
         {
-            $data['out_trade_no'] = $order_no;
-            return DataReturn('支付成功', 0, $this->ReturnData($data));
+            return DataReturn('支付成功', 0, $this->ReturnData($ret['data']));
         }
 
         return DataReturn('支付失败', -100);
@@ -263,7 +227,6 @@ var_dump($data);die;
      */
     private function ReturnData($data)
     {
-        print_r($data);die;
         // 参数处理
         $out_trade_no = substr($data['requestId'], 0, strlen($data['requestId'])-6);
 
@@ -317,47 +280,21 @@ var_dump($data);die;
      */
     public function checkHmac($private_key,$public_key,$data,$password)
     {
-
         $aeskey=$this->rsaPrivateDecode($data,$private_key,$password);
         $encrypt_str=$this->aesDesc($data,$aeskey);
-        /*
-       * 去除空值的元素
-       */
-
-        function clearBlank($arr)
-        {
-            return $arr;
-            function odd($var)
-            {
-                return($var<>'');//return true or false
-            }
-            return (array_filter($arr, "odd"));
-        }
-
-        function array_remove_empty(& $arr, $trim = true){
-            foreach ($arr as $key => $value) {
-                if (is_array($value)) {
-                    array_remove_empty($arr[$key]);
-                } else {
-                    $value = trim($value);
-                    if ($value == '') {
-                        unset($arr[$key]);
-                    } elseif ($trim) {
-                        $arr[$key] = $value;
-                    }
-                }
-            }
-        }
-        $encrypt_str = clearBlank($encrypt_str);
         return $this->hmacSign($encrypt_str,$public_key);
     }
 
 
     public function execute($private_key,$password,$public_key,$url, $param)
     {
-        $data = $this->httpRequestPost($url, $param,$public_key,$password,$private_key);
-        $this->handle($data);
-        return $data;
+        $ret = $this->httpRequestPost($url, $param,$public_key,$password,$private_key);
+        if($ret['code'] != 0)
+        {
+            return $ret;
+        }
+        $this->handle($ret['data']);
+        return $ret;
     }
 
     public function handle($data = array())
@@ -373,14 +310,11 @@ var_dump($data);die;
             print_r($img);
                 
         } else if(isset($data['status']) && $data['status'] == 'CANCEL'){
-            return $data;
+            return DataReturn('处理失败', -1, $data);
         }else if(isset($data['status']) && $data['status'] == 'INIT'){
-            return $data;
+            return DataReturn('处理失败', -1, $data);
         }else{
-            return array(
-                'error_description'=>'Response Error',
-                'responseData'=>$data
-            );
+            return DataReturn('响应错误', -1);
         }
     }
 
@@ -407,22 +341,16 @@ var_dump($data);die;
         $responseText = curl_exec($curl);
         if (curl_errno($curl) || $responseText === false) {
             curl_close($curl);
-            throw new InvalidRequestException(array(
-                'error_description'=> 'Request Error'
-            ));
+            return DataReturn('请求错误', -1);
         }
         curl_close($curl);
         preg_match_all('/(encryptKey|merchantId|data"):(\s+|")([^"\s]+)/s',$responseText,$m);
         list($encryptKey, $merchantId, $data) = $m[3];
         $responsedata = array("data" =>$data,"encryptKey"=>$encryptKey,"merchantId"=>$merchantId);
         if ($responsedata['merchantId'] == null){
-            throw new InvalidRequestException(array(
-                'error_description'=>'Request error',
-                'responseData'=>$responseText
-            ));
+            return DataReturn('请求错误', -1);
         }
-        $date = $this->checkHmac($private_key,$public_key,$responsedata,$password);
-        return $date;
+        return $this->checkHmac($private_key,$public_key,$responsedata,$password);
     }
 
 
@@ -437,7 +365,7 @@ var_dump($data);die;
         foreach($para as $k=>$var){
             if(is_scalar($var) && $var !== '' && $var !== null){
                 $data[$k] = $var;
-            }else if(is_object($var) && $var instanceof AbstractModel){
+            }else if(is_object($var)){
                 $data[$k] =array_filter((array) $var);
             }else if(is_array($var)){
                 $data[$k] =array_filter($var);
@@ -645,14 +573,25 @@ var_dump($data);die;
         ksort($encrypt_str);
         $hmacSource = '';
         foreach($encrypt_str as $key => $value){
+            if($value == '')
+            {
+                continue;
+            }
             if (is_array($value)) {
                 ksort($value);
                 foreach ($value as $key2 => $value2) {
-
+                    if($value2 == '')
+                    {
+                        continue;
+                    }
                     if (is_object($value2)) {
                         $value2 = array_filter((array)$value2);
                         ksort($value2);
                         foreach ($value2 as $oKey => $oValue) {
+                            if($oValue == '')
+                            {
+                                continue;
+                            }
                             $oValue .= '#';
                             $hmacSource .= trim($oValue);
 
@@ -660,10 +599,18 @@ var_dump($data);die;
                     } else if(is_array($value2)){
                         ksort($value2);
                         foreach ($value2 as $key3 => $value3) {
+                            if($value3 == '')
+                            {
+                                continue;
+                            }
                             if (is_object($value3)) {
                                 $value3 = array_filter((array)$value3);
                                 ksort($value3);
                                 foreach ($value3 as $oKey => $oValue) {
+                                    if($oValue == '')
+                                    {
+                                        continue;
+                                    }
                                     $oValue .= '#';
                                     $hmacSource .= trim($oValue);
                                 }
@@ -685,33 +632,13 @@ var_dump($data);die;
          $sourceHmac=sha1($hmacSource, true);
         $hh=$this->rsaPubilcSign($sourceHmac,$path,$hmac);
         if ($hh==0||$hh==-1){
-            throw new HmacVerifyException(array(
-                'error_description'=>'hmac validation error'
-            ));
+            return DataReturn('HMAC验证错误', -1);
         }
-        return $encrypt_str;
+        return DataReturn('校验成功', 0, $encrypt_str);
     }
 
 
 
-    public function NotifyHandle($data = array())
-    {
-        if($data['status']== 'SUCCESS'){
-            //成功时相关处理代码
-            echo "SUCCESS"; //打印出 SUCCESS 表示收到通知
-        }elseif($data['status'] == 'FAILED' || $data['status'] == 'CANCEL'){
-            //失败时相关处理代码
-            //订单取消
-        }elseif($data['status'] == 'INIT'){
-            //待处理状态下相关处理代码
-        }else{
-            throw new InvalidResponseException(array(
-                'error_description'=> 'notify response error',
-                'responseData'=>$data
-            ));
-        }
-    }
-
     /**
      * hmac 验证
      * @return mixed
@@ -731,36 +658,6 @@ var_dump($data);die;
         $encrypt_str=  openssl_decrypt($date,"AES-128-ECB",$screct_key);
         $encrypt_str = preg_replace('/[\x00-\x1F]/','', $encrypt_str);
         $encrypt_str = json_decode($encrypt_str,true);
-var_dump($encrypt_str);die;
-        /*
-       * 去除空值的元素
-       */
-
-        function clearBlank($arr)
-        {
-            function odd($var)
-            {
-                return($var<>'');//return true or false
-            }
-            return empty($arr) ? '' : (array_filter($arr, "odd"));
-        }
-
-        function array_remove_empty(& $arr, $trim = true){
-            foreach ($arr as $key => $value) {
-                if (is_array($value)) {
-                    array_remove_empty($arr[$key]);
-                } else {
-                    $value = trim($value);
-                    if ($value == '') {
-                        unset($arr[$key]);
-                    } elseif ($trim) {
-                        $arr[$key] = $value;
-                    }
-                }
-            }
-        }
-       // $encrypt_str = clearBlank($encrypt_str);
-        var_dump($encrypt_str);die;
 
         if (empty($encrypt_str['hmac'])){
             return DataReturn('HMAC验证错误', -1);
@@ -771,13 +668,25 @@ var_dump($encrypt_str);die;
         ksort($encrypt_str);
         $hmacSource = '';
         foreach($encrypt_str as $key => $value){
+            if($value == '')
+            {
+                continue;
+            }
             if (is_array($value)) {
                 ksort($value);
                 foreach ($value as $key2 => $value2) {
+                    if($value2 == '')
+                    {
+                        continue;
+                    }
                     if (is_array($value2)) {
                         $value2 = array_filter((array)$value2);
                         ksort($value2);
                         foreach ($value2 as $oKey => $oValue) {
+                            if($oValue == '')
+                            {
+                                continue;
+                            }
                             $oValue .= '#';
                             $hmacSource .= trim($oValue);
                         }