No Description

SyncAPIClient.class.php 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. include_once (app_path('/libs/Umeng/').'com/alibaba/openapi/client/serialize/SerializerProvider.class.php');
  3. include_once (app_path('/libs/Umeng/').'com/alibaba/openapi/client/util/SignatureUtil.class.php');
  4. class SyncAPIClient {
  5. var $clientPolicy;
  6. /**
  7. *
  8. * @param ClientPolicy $clientPolicy
  9. */
  10. function SyncAPIClient(ClientPolicy $clientPolicy) {
  11. $this->clientPolicy = $clientPolicy;
  12. }
  13. public function send(APIRequest $request, $resultDefiniation, RequestPolicy $requestPolicy) {
  14. $urlRequest = $this->generateRequestPath ( $request, $requestPolicy, $this->clientPolicy );
  15. if ($requestPolicy->useHttps) {
  16. if($this->clientPolicy->httpsPort==443){
  17. $urlRequest = "https://" . $this->clientPolicy->serverHost . $urlRequest;
  18. }else{
  19. $urlRequest = "https://" . $this->clientPolicy->serverHost .":".$this->clientPolicy->httpsPort . $urlRequest;
  20. }
  21. } else {
  22. if($this->clientPolicy->httpPort==80){
  23. $urlRequest = "http://" . $this->clientPolicy->serverHost . $urlRequest;
  24. }else{
  25. $urlRequest = "http://" . $this->clientPolicy->serverHost .":".$this->clientPolicy->httpPort . $urlRequest;
  26. }
  27. }
  28. $serializerTools = SerializerProvider::getSerializer ( $requestPolicy->requestProtocol );
  29. $requestData = $serializerTools->serialize ( $request->requestEntity );
  30. $requestData = array_merge ( $requestData, $request->addtionalParams );
  31. if ($requestPolicy->needAuthorization) {
  32. $requestData ["access_token"] = $request->accessToken;
  33. }
  34. if ($requestPolicy->requestSendTimestamp) {
  35. // $requestData ["_aop_timestamp"] = time();
  36. }
  37. $requestData ["_aop_datePattern"] = DateUtil::getDateFormatInServer ();
  38. if ($requestPolicy->useSignture) {
  39. if ($this->clientPolicy->appKey != null && $this->clientPolicy->secKey != null) {
  40. $pathToSign = $this->generateAPIPath ( $request, $requestPolicy, $this->clientPolicy );
  41. $signaturedStr = SignatureUtil::signature ( $pathToSign, $requestData, $requestPolicy, $this->clientPolicy );
  42. $requestData ["_aop_signature"] = $signaturedStr;
  43. }
  44. }
  45. $ch = curl_init ();
  46. $paramToSign = "";
  47. foreach ( $requestData as $k => $v ) {
  48. $paramToSign = $paramToSign . $k . "=" . urlencode($v) . "&";
  49. }
  50. $paramLength = strlen ( $paramToSign );
  51. if ($paramLength > 0) {
  52. $paramToSign = substr ( $paramToSign, 0, $paramToSign - 1 );
  53. }
  54. if ($requestPolicy->httpMethod === "GET") {
  55. $urlRequest = $urlRequest . "?" . $paramToSign;
  56. curl_setopt ( $ch, CURLOPT_URL, $urlRequest );
  57. curl_setopt ( $ch, CURLOPT_HEADER, false );
  58. curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
  59. curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 120 );
  60. curl_setopt ( $ch, CURLOPT_POST, 0 );
  61. curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, false );
  62. curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );
  63. $result = $newclient->get ( $urlRequest, $requestData );
  64. } else {
  65. curl_setopt ( $ch, CURLOPT_URL, $urlRequest );
  66. curl_setopt ( $ch, CURLOPT_HEADER, false );
  67. curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
  68. curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 120 );
  69. curl_setopt ( $ch, CURLOPT_POST, 1 );
  70. curl_setopt ( $ch, CURLOPT_POSTFIELDS, $paramToSign );
  71. curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, false );
  72. curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );
  73. $data = curl_exec ( $ch );
  74. }
  75. $data = curl_exec ( $ch );
  76. if ($data) {
  77. $content = $data;
  78. $deSerializerTools = SerializerProvider::getDeSerializer ( $requestPolicy->responseProtocol );
  79. $status = curl_getinfo ( $ch, CURLINFO_HTTP_CODE );
  80. curl_close ( $ch );
  81. if ($status >= 400 && $status <= 599) {
  82. $resultException = $deSerializerTools->buildException ( $content, $resultDefiniation );
  83. throw $resultException;
  84. } else {
  85. $resultDefiniation = $deSerializerTools->deSerialize ( $content, $resultDefiniation );
  86. return $resultDefiniation;
  87. }
  88. } else {
  89. $status = curl_getinfo ( $ch, CURLINFO_HTTP_CODE );
  90. curl_close ( $ch );
  91. return $status;
  92. }
  93. }
  94. private function generateRequestPath(APIRequest $request, RequestPolicy $requestPolicy, ClientPolicy $clientPolicy) {
  95. $urlResult = "";
  96. if ($requestPolicy->accessPrivateApi) {
  97. $urlResult = "/api";
  98. } else {
  99. $urlResult = "/openapi";
  100. }
  101. $defs = array (
  102. $urlResult,
  103. "/",
  104. $requestPolicy->requestProtocol,
  105. "/",
  106. $request->apiId->version,
  107. "/",
  108. $request->apiId->namespace,
  109. "/",
  110. $request->apiId->name,
  111. "/",
  112. $clientPolicy->appKey
  113. );
  114. $urlResult = implode ( $defs );
  115. return $urlResult;
  116. }
  117. private function generateAPIPath(APIRequest $request, RequestPolicy $requestPolicy, ClientPolicy $clientPolicy) {
  118. $urlResult = "";
  119. $defs = array (
  120. $urlResult,
  121. $requestPolicy->requestProtocol,
  122. "/",
  123. $request->apiId->version,
  124. "/",
  125. $request->apiId->namespace,
  126. "/",
  127. $request->apiId->name,
  128. "/",
  129. $clientPolicy->appKey
  130. );
  131. $urlResult = implode ( $defs );
  132. return $urlResult;
  133. }
  134. }
  135. ?>