Demo.php 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use app\common\library\Easemob;
  5. use app\common\library\Tenim;
  6. use TencentCloud\Common\Credential;
  7. use TencentCloud\Common\Profile\ClientProfile;
  8. use TencentCloud\Common\Profile\HttpProfile;
  9. use TencentCloud\Common\Exception\TencentCloudSDKException;
  10. use TencentCloud\Tiia\V20190529\TiiaClient;
  11. use TencentCloud\Tiia\V20190529\Models\DetectProductRequest;
  12. /**
  13. * 示例接口
  14. */
  15. class Demo extends Api
  16. {
  17. //如果$noNeedLogin为空表示所有接口都需要登录才能请求
  18. //如果$noNeedRight为空表示所有接口都需要验证权限才能请求
  19. //如果接口已经设置无需登录,那也就无需鉴权了
  20. //
  21. // 无需登录的接口,*表示全部
  22. protected $noNeedLogin = ['*'];
  23. // 无需鉴权的接口,*表示全部
  24. protected $noNeedRight = ['test2'];
  25. /**
  26. * 测试方法
  27. *
  28. * @ApiTitle (测试名称)
  29. * @ApiSummary (测试描述信息)
  30. * @ApiMethod (POST)
  31. * @ApiRoute (/api/demo/test/id/{id}/name/{name})
  32. * @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
  33. * @ApiParams (name="id", type="integer", required=true, description="会员ID")
  34. * @ApiParams (name="name", type="string", required=true, description="用户名")
  35. * @ApiParams (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据")
  36. * @ApiReturnParams (name="code", type="integer", required=true, sample="0")
  37. * @ApiReturnParams (name="msg", type="string", required=true, sample="返回成功")
  38. * @ApiReturnParams (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据返回")
  39. * @ApiReturn ({
  40. 'code':'1',
  41. 'msg':'返回成功'
  42. })
  43. */
  44. public function test()
  45. {
  46. $easemob = new Easemob();
  47. $rs = $easemob->user_create('doctor1');
  48. }
  49. /**
  50. * 无需登录的接口
  51. *
  52. */
  53. public function test1()
  54. {
  55. $tenim = new Tenim();
  56. $rs = $tenim->register('user'. 1, 'nickname', '');
  57. }
  58. /**
  59. * 需要登录的接口
  60. *
  61. */
  62. public function test2()
  63. {
  64. $tenim = new Tenim();
  65. $order_id = 26;
  66. $message = [
  67. 'businessID' => 'order_status',
  68. 'name' => '待接单',
  69. 'status' => '10',
  70. 'id' => (string)$order_id,
  71. 'content' => '已通知医生尽快接诊,超时自动取消订单并退款',
  72. ];
  73. $rs = $tenim->sendCustomMessageToUser('user7','doctor7',$message);
  74. dump($rs);
  75. }
  76. /**
  77. * 需要登录且需要验证有相应组的权限
  78. *
  79. */
  80. public function test3()
  81. {
  82. $a = 346846154;
  83. dump(format_bytes($a));
  84. }
  85. public function test4(){
  86. $a = time() - 20;
  87. dump($a);
  88. dump(get_last_time($a));
  89. }
  90. //腾讯云拍照识别商品
  91. //{"Response":{"Products":[{"Name":"按摩椅","Parents":"家用电器-个护健康","Confidence":99,"XMin":107,"YMin":59,"XMax":447,"YMax":366}],"RequestId":"187745fc-0497-441e-88f5-f3f17d854016"}}
  92. public function search_by_image($image = 'https://jiankangyijia-1304634122.cos.ap-nanjing.myqcloud.com/uploads/20240504/5cbfbb7880323f05839d82afe1500569.png'){
  93. $tencent_yun = config('tencent_yun');
  94. $secret_id = $tencent_yun['secret_id'];
  95. $secret_key = $tencent_yun['secret_key'];
  96. $token = "";
  97. $service = "tiia";
  98. $host = "tiia.tencentcloudapi.com";
  99. $req_region = "ap-beijing";
  100. $version = "2019-05-29";
  101. $action = "DetectProduct";
  102. $payload = json_encode(['ImageUrl' => localpath_to_netpath($image)]);
  103. $endpoint = "https://tiia.tencentcloudapi.com";
  104. $algorithm = "TC3-HMAC-SHA256";
  105. $timestamp = time();
  106. $date = gmdate("Y-m-d", $timestamp);
  107. // ************* 步骤 1:拼接规范请求串 *************
  108. $http_request_method = "POST";
  109. $canonical_uri = "/";
  110. $canonical_querystring = "";
  111. $ct = "application/json; charset=utf-8";
  112. $canonical_headers = "content-type:".$ct."\nhost:".$host."\nx-tc-action:".strtolower($action)."\n";
  113. $signed_headers = "content-type;host;x-tc-action";
  114. $hashed_request_payload = hash("sha256", $payload);
  115. $canonical_request = "$http_request_method\n$canonical_uri\n$canonical_querystring\n$canonical_headers\n$signed_headers\n$hashed_request_payload";
  116. // ************* 步骤 2:拼接待签名字符串 *************
  117. $credential_scope = "$date/$service/tc3_request";
  118. $hashed_canonical_request = hash("sha256", $canonical_request);
  119. $string_to_sign = "$algorithm\n$timestamp\n$credential_scope\n$hashed_canonical_request";
  120. // ************* 步骤 3:计算签名 *************
  121. $secret_date = hash_hmac("sha256", $date, "TC3".$secret_key, true);
  122. $secret_service = hash_hmac("sha256", $service, $secret_date, true);
  123. $secret_signing = hash_hmac("sha256", "tc3_request", $secret_service, true);
  124. $signature = hash_hmac("sha256", $string_to_sign, $secret_signing);
  125. // ************* 步骤 4:拼接 Authorization *************
  126. $authorization = "$algorithm Credential=$secret_id/$credential_scope, SignedHeaders=$signed_headers, Signature=$signature";
  127. // ************* 步骤 5:构造并发起请求 *************
  128. $headers = [
  129. "Authorization" => $authorization,
  130. "Content-Type" => "application/json; charset=utf-8",
  131. "Host" => $host,
  132. "X-TC-Action" => $action,
  133. "X-TC-Timestamp" => $timestamp,
  134. "X-TC-Version" => $version
  135. ];
  136. if ($req_region) {
  137. $headers["X-TC-Region"] = $req_region;
  138. }
  139. if ($token) {
  140. $headers["X-TC-Token"] = $token;
  141. }
  142. $headers = array_map(function ($k, $v) { return "$k: $v"; }, array_keys($headers), $headers);
  143. try {
  144. $timeOut = 3;
  145. $ch = curl_init();
  146. curl_setopt($ch, CURLOPT_URL, $endpoint);
  147. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  148. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  149. curl_setopt($ch, CURLOPT_TIMEOUT, $timeOut);
  150. curl_setopt($ch, CURLOPT_HEADER, 0);
  151. curl_setopt($ch, CURLOPT_POST, 1);
  152. curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
  153. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  154. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  155. $response = curl_exec($ch);
  156. curl_close($ch);
  157. //return $response;
  158. $response = json_decode($response,true);
  159. if(is_array($response) && isset($response['Response']['Products'][0]['Name'])){
  160. $searchname = $response['Response']['Products'][0]['Name'];
  161. if(!empty($searchname)){
  162. return $searchname;
  163. }
  164. }
  165. return '';
  166. } catch (Exception $err) {
  167. //echo $err->getMessage();
  168. return '';
  169. }
  170. }
  171. }