Esempio n. 1
0
 /**
  * Tests getErrorMessage.
  */
 public function testGetErrorMessage()
 {
     $errors = array(JSON_ERROR_NONE => 'No errors', JSON_ERROR_DEPTH => 'Maximum stack depth exceeded', JSON_ERROR_STATE_MISMATCH => 'Underflow or the modes mismatch', JSON_ERROR_CTRL_CHAR => 'Unexpected control character found', JSON_ERROR_SYNTAX => 'Syntax error, malformed JSON', JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded', 999999999 => 'Unknown error');
     foreach ($errors as $no => $message) {
         $this->assertSame($message, Json::getErrorMessage($no));
     }
 }
Esempio n. 2
0
 public function extendPostRequest($aMerchantNo)
 {
     try {
         $this->iLogWriter = new LogWriter();
         $this->iLogWriter->logNewLine("TrustPayClient V3.0.0 交易开始==========================");
         MerchantConfig::getLogWriterObject($this->iLogWriter);
         //0、检查传入参数是否合法
         if ($aMerchantNo <= 0 || $aMerchantNo > MerchantConfig::getMerchantNum()) {
             throw new TrxException(TrxException::TRX_EXC_CODE_1008, TrxException::TRX_EXC_MSG_1008, '配置文件中商户数为' . MerchantConfig::getMerchantNum() . ", 但是请求指定的商户配置编号为{$aMerchantNo} !");
         }
         //1、检查交易请求是否合法
         $this->iLogWriter->logNewLine('检查交易请求是否合法:');
         $this->checkRequest();
         $this->iLogWriter->log('正确');
         //2、取得交易报文
         $tRequestMessage = $this->getRequestMessage();
         //3、组成完整交易报文
         $this->iLogWriter->log("完整交易报文:");
         $tRequestMessage = $this->composeRequestMessage($aMerchantNo, $tRequestMessage);
         $this->iLogWriter->log($tRequestMessage);
         //4、对交易报文进行签名
         $tRequestMessage = MerchantConfig::signMessage($aMerchantNo, $tRequestMessage);
         //5、发送交易报文至网上支付平台
         $tResponseMessage = $this->sendMessage($tRequestMessage);
         //6、验证网上支付平台响应报文的签名
         $this->iLogWriter->logNewLine('验证网上支付平台响应报文的签名:');
         MerchantConfig::verifySign($tResponseMessage);
         $this->iLogWriter->log('正确');
         //7、生成交易响应对象
         $this->iLogWriter->logNewLine('生成交易响应对象:');
         $this->iLogWriter->logNewLine('交易结果:[' . $tResponseMessage->getReturnCode() . ']');
         $this->iLogWriter->logNewLine('错误信息:[' . $tResponseMessage->getErrorMessage() . ']');
     } catch (TrxException $e) {
         $tResponseMessage = new Json();
         $tResponseMessage->initWithCodeMsg($e->getCode(), $e->getMessage() . " - " . $e->getDetailMessage());
         if ($this->iLogWriter != null) {
             $this->iLogWriter->logNewLine('错误代码:[' + $tResponseMessage->getReturnCode() . ']    错误信息:[' . $tResponseMessage->getErrorMessage() . ']');
         }
     } catch (Exception $e) {
         $tResponseMessage = new Json();
         $tResponseMessage->initWithCodeMsg(TrxException::TRX_EXC_CODE_1999, TrxException::TRX_EXC_MSG_1999 . ' - ' . $e->getMessage());
         if ($this->iLogWriter != null) {
             $this->iLogWriter->logNewLine('错误代码:[' . $tResponseMessage->getReturnCode() . ']    错误信息:[' . $tResponseMessage->getErrorMessage() . ']');
         }
     }
     if ($this->iLogWriter != null) {
         $this->iLogWriter->logNewLine("交易结束==================================================\n\n\n\n");
         $this->iLogWriter->closeWriter(MerchantConfig::getTrxLogFile());
     }
     return $tResponseMessage;
 }
Esempio n. 3
0
 /**
  * Set body.
  *
  * @param  mixed $body
  * @return self
  */
 public final function setBody($body) : self
 {
     switch ($this->contentType) {
         // handle xml @todo
         case ContentType::XML:
             break;
             // handle json
         // handle json
         case ContentType::JSON:
             $json = new Json($body);
             // simply check for pretty print
             $app = app();
             if (is_in($app->request->params->get['pp'], ['1', 'true'])) {
                 $body = $json->encode(JSON_PRETTY_PRINT);
             } else {
                 $body = $json->encode();
             }
             if ($json->hasError()) {
                 throw new JsonException($json->getErrorMessage(), $json->getErrorCode());
             }
             break;
             // handle html
         // handle html
         case ContentType::HTML:
             // check for page title
             if ($pageTitle = get_global('page.title')) {
                 $body = preg_replace('~<title>(.*?)</title>~s', '<title>' . html_encode($pageTitle) . '</title>', $body, 1);
             }
             // check page description
             if ($pageDescription = get_global('page.description')) {
                 $body = preg_replace('~<meta\\s+name="description"\\s+content="(.*?)">~', '<meta\\s+name="description"\\s+content="' . html_encode($pageDescription) . '">', $body, 1);
             }
             break;
     }
     // can gzip?
     if (!empty($this->gzipOptions)) {
         $this->gzip->setData($body);
         if ($this->gzip->isDataMinlenOK()) {
             $body = $this->gzip->encode();
             $this->setHeader('Vary', 'Accept-Encoding');
             $this->setHeader('Content-Encoding', 'gzip');
         }
     }
     // content length
     $this->setContentLength(strlen($body));
     $this->body = $body;
     return $this;
 }
Esempio n. 4
0
 /**
  * Set body.
  * @param  any $body
  * @return self
  */
 public final function setBody($body) : self
 {
     switch ($this->body->content->getType()) {
         case BodyContent::TYPE_XML:
             // @todo
             break;
         case BodyContent::TYPE_JSON:
             $json = new Json($body);
             $body = $json->encode();
             if ($json->hasError()) {
                 throw new JsonException($json->getErrorMessage(), $json->getErrorCode());
             }
             break;
     }
     // gzip
     if (!empty($this->gzipOptions)) {
         $this->gzip->setData($body);
         if ($this->gzip->checkDataMinlen()) {
             $body = $this->gzip->encode();
             $this->setHeader('Vary', 'Accept-Encoding');
             $this->setHeader('Content-Encoding', 'gzip');
         }
     }
     $this->body->content->setData($body);
     $this->body->content->setLength(strlen($body));
     return $this;
 }