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); }