Demo.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. /**
  5. * 示例接口
  6. */
  7. class Demo extends Api
  8. {
  9. //如果$noNeedLogin为空表示所有接口都需要登录才能请求
  10. //如果$noNeedRight为空表示所有接口都需要验证权限才能请求
  11. //如果接口已经设置无需登录,那也就无需鉴权了
  12. //
  13. // 无需登录的接口,*表示全部
  14. protected $noNeedLogin = ['*'];
  15. // 无需鉴权的接口,*表示全部
  16. protected $noNeedRight = ['*'];
  17. /**
  18. * 测试方法
  19. *
  20. * @ApiTitle (测试名称)
  21. * @ApiSummary (测试描述信息)
  22. * @ApiMethod (POST)
  23. * @ApiRoute (/api/demo/test/id/{id}/name/{name})
  24. * @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
  25. * @ApiParams (name="id", type="integer", required=true, description="会员ID")
  26. * @ApiParams (name="name", type="string", required=true, description="用户名")
  27. * @ApiParams (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据")
  28. * @ApiReturnParams (name="code", type="integer", required=true, sample="0")
  29. * @ApiReturnParams (name="msg", type="string", required=true, sample="返回成功")
  30. * @ApiReturnParams (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据返回")
  31. * @ApiReturn ({
  32. 'code':'1',
  33. 'msg':'返回成功'
  34. })
  35. */
  36. public function test()
  37. {
  38. $this->success('success');
  39. }
  40. /**
  41. * 无需登录的接口
  42. *
  43. */
  44. public function test1()
  45. {
  46. $this->success('返回成功', ['action' => 'test1']);
  47. }
  48. /**
  49. * 需要登录的接口
  50. *
  51. */
  52. public function test2()
  53. {
  54. $this->success('返回成功', ['action' => 'test2']);
  55. }
  56. /**
  57. * 需要登录且需要验证有相应组的权限
  58. *
  59. */
  60. public function test3()
  61. {
  62. $this->send_score(1, 1);
  63. }
  64. public function send_score($score, $grade_id)
  65. {
  66. $url = 'http://apip-gateway-nrouter-saas-gn-C.month.sdc.cs.icbc:8081/api/mybank/farm/farmplatf/updateVillagerIntegral/V1';
  67. $biz_content = [
  68. 'fSeqNo' => createUniqueNo('fseq', $grade_id),
  69. 'corpCode' => 'xingfulishequ',
  70. 'mobilePhone' => $this->auth->mobile,
  71. 'integralValue' => $score,
  72. 'integralType' => '',
  73. /* 'remark1' => '',
  74. 'remark2' => '',
  75. 'remark3' => '',
  76. 'remark4' => '',
  77. 'remark5' => '',
  78. 'remark6' => '',
  79. 'remark7' => '',*/
  80. ];
  81. $sign = $this->sign(base64_encode(json_encode($biz_content)));
  82. $data = [
  83. 'app_id' => '10000000000004096993',
  84. 'msg_id' => createUniqueNo('msg', $grade_id),
  85. 'format' => 'json',
  86. 'charset' => 'UTF-8',
  87. // 'encrypt_type'=> 'AES',
  88. 'sign_type' => 'RSA',
  89. 'sign' => $sign,
  90. 'timestamp' => date('Y-m-d H:i:s'),
  91. // 'ca' => '',
  92. 'biz_content' => $biz_content,
  93. ];
  94. $rs = curl_post($url, json_encode($data, JSON_UNESCAPED_UNICODE));
  95. dump($rs);
  96. }
  97. private function sign($data)
  98. {
  99. $private_key = 'MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCR8/ZvKPAdZzsyvapySvztQm56s1N59ynKMOWpUbK4c5MNWMl+q3dvsp+UiSAx2TAeGkYfW3W6nO/3Y0hAZki99fmuzpPujEeHhs79HNwGZYQjN71Vck2JeflTq8jpL+9/up0Kz2nbwtZDMKTTEgbfNeO24gV1bmvD2kQ9j66RIyuXSDwQbVbQfl6LiqKoJm3rbtsbwX1Ytc0/Szslyor1VdPZWnHDMm3m78Hqu7X3vL6K7fAW/4FVbeKV7vWjvyiTQfETmuADqMdsqV5YeqUZWE/Dnzg+6JV/3L9nJ8f+/mPlh8k1h1oW035GrADKFKf1M2ujKKeHICnj7qKCdBeNAgMBAAECggEAHkh+U2YtHAy1Tbvox7ojbJ8iCTd4FJBiDV/D5zPaX0crtdM8S5oMOBLZ5ZnmIjGsODK/ZfY2ITg62huxfBs88J0+5zRZoV9d4BLqk74PMQyTNDN2h2omCGZUgzXbg/a8PMZdm0aZ8k0k4+AN8vWEk3+89c9Dzq/QkFyTWCqdz+Mp9NkcOjA255kj5/D1q9Zj0x9VcmKg3oTtrKL/dkspUxVaMKXcpo6J4AszC05tT3N0SNLhcq51I6B9QdbYsYCkP9whPNYIl/y4dN4QnNEivQzA5/ltr5DDQZc7Xke1+SpJN+ylBOBJ8yvNoDnuxx0xEWuNJ5bUzyri/DNjZRKNQQKBgQDKkxn5R4Q3rChI/KVIXHMecTs9fXN5pbnA8UKU6ZeTl+wHffxwRieHZJJp1nDcQ5i8YXCtqEJcJGFn3T0rEjVCJ/RVHclFO+TjYaK9HtyNJLPrvKmAzjCzV1yPfe4qmpgJddzZI7Vii2uFgklixvhkoY74hwSJtvLPTO0p0xrYdQKBgQC4cgfpCMLYlaHQGz+dAEf4IewQpwBGn7XShCpiXGFciGZZEIzvJMzXP7yo8pDMHQbB4kQsTRRG2fcdHGWI5VQGHPqG5O0tUueKGUlSg7j8Y/Pp8ZrBGSrlilAf17I/u9MC7Xe2ZRVGNgPDYAyjMEGmClI0n2+aN6b4CFVBjYmfuQKBgEKO9KDIE7QrF41rnW7aGWTuNVWty2wzvIWdf4/n9EqlRwLrLS9CjahZrhWiRLDKcPusVFZqi2s09OAoe/mT4PXcpNX2lHPwCvN+1/allje10HvrIBJXLP8v/BSVftR2uO+azzZ1GhrHzksulKgk0eZWguA7lI0fFEZycxYj65UlAoGAD9p1RZlkLfuGgf2llRgOF4zK3o+MHYXiuep0PioUkECFE4ixpGh0Vtf6nkbjHTgteYK6O1iQsppPfCgRrheQBkp9WhTZMfkbP6p2u+nof4ET2PrUQ16naj1eL655erLpKypADORZVMSVxDhAPdKLAfuHH1DI5ed8qXsF4PGKb7kCgYEAm/d+daT6YsbHDZlJ/J9Q8rRkKmiqj43NGQSHKg6Z6BEDibm8wRmj3Itu1N6XVChuaH+ekJzvUnZ/q1nyYzGvy6bOHYn3ziF9aH7wuhcRZ4qARmKDnzTBLg2QXBK1+400O3LJ+sAH/yuH/Y4hzRE6YMxBQpdYfnlJcIFVimAsT1w=';
  100. $public_key = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp2mmCWIxUMx32dEfyOTgslQi0nf7i0tPE5PQbmfpttRGzEPJe5hfMThLlcQ0eh92SeheaCdVMk9OzF5zZiO++fofzr2dRn5fAUAXLVkkOGyQ3x9YR2yE7VisK7RxckE59O9lX1w9iWuSSuacUCtFfXLxap8bfW/aEBLNxmBu3x6Ld5vMBztqn2qTYVZqPN9TBVaJvbTqFty6O+wa1G43YqgX1O5eBiLuVoTijlNm9dGDx3tg52af/6X8N8W6yBBAo+k9/D9oDU8lYdIm6d2D1HEOfBrHcdNTDtMR620Fml1JAsvjD+ku5sEXKm9pb8iRZuqRhjE7BVm46feG8YOz2wIDAQAB';
  101. $public_key = "-----BEGIN PUBLIC KEY-----" .PHP_EOL.
  102. wordwrap($public_key, 64, PHP_EOL, true) .
  103. PHP_EOL."-----END PUBLIC KEY-----";
  104. dump($public_key);
  105. openssl_public_encrypt($data,$encrypted, $public_key);
  106. echo openssl_error_string();
  107. return base64_encode($encrypted);
  108. }
  109. public function test4(){
  110. // 演示开始
  111. echo "=== RSA加密解密演示 ===\n\n";
  112. // 1. 生成密钥对
  113. echo "1. 生成RSA密钥对...\n";
  114. $keys = $this->generateRsaKeys();
  115. $privateKey = $keys['private_key'];
  116. $publicKey = $keys['public_key'];
  117. echo "公钥:\n" . $publicKey . "\n";
  118. echo "私钥:\n" . $privateKey . "\n\n";
  119. // 2. 要加密的原始数据
  120. $originalData = "这是一个使用RSA加密的测试消息。Hello RSA! 123456";
  121. echo "2. 原始数据:\n" . $originalData . "\n\n";
  122. // 3. 使用公钥加密
  123. echo "3. 使用公钥加密数据...\n";
  124. $encryptedData = $this->rsaEncrypt($originalData, $publicKey);
  125. echo "加密后的数据(Base64):\n" . $encryptedData . "\n\n";
  126. // 4. 使用私钥解密
  127. echo "4. 使用私钥解密数据...\n";
  128. $decryptedData = $this->rsaDecrypt($encryptedData, $privateKey);
  129. echo "解密后的数据:\n" . $decryptedData . "\n\n";
  130. // 5. 验证结果
  131. echo "5. 验证结果:\n";
  132. if ($originalData === $decryptedData) {
  133. echo "✓ 加密解密成功,原始数据与解密数据一致!\n";
  134. } else {
  135. echo "✗ 加密解密失败,数据不一致!\n";
  136. }
  137. echo "\n=== 演示结束 ===\n";
  138. }
  139. function generateRsaKeys($keySize = 2048) {
  140. $config = array(
  141. "digest_alg" => "sha512",
  142. "private_key_bits" => $keySize,
  143. "private_key_type" => OPENSSL_KEYTYPE_RSA,
  144. );
  145. // 生成密钥对
  146. $res = openssl_pkey_new($config);
  147. // 获取私钥
  148. openssl_pkey_export($res, $privateKey);
  149. // 获取公钥
  150. $publicKey = openssl_pkey_get_details($res);
  151. $publicKey = $publicKey["key"];
  152. return array(
  153. 'private_key' => $privateKey,
  154. 'public_key' => $publicKey
  155. );
  156. }
  157. // RSA加密
  158. function rsaEncrypt($data, $publicKey) {
  159. openssl_public_encrypt($data, $encrypted, $publicKey);
  160. return base64_encode($encrypted);
  161. }
  162. // RSA解密
  163. function rsaDecrypt($encryptedData, $privateKey) {
  164. $encryptedData = base64_decode($encryptedData);
  165. openssl_private_decrypt($encryptedData, $decrypted, $privateKey);
  166. return $decrypted;
  167. }
  168. }