Epay.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace app\admin\controller;
  3. use app\admin\model\AdminLog;
  4. use app\common\controller\Backend;
  5. use app\common\exception\UploadException;
  6. use app\common\library\Upload;
  7. use think\Config;
  8. class Epay extends Backend
  9. {
  10. protected $noNeedRight = ['upload'];
  11. /**
  12. * 上传本地证书
  13. * @return void
  14. */
  15. public function upload()
  16. {
  17. AdminLog::setTitle('上传证书');
  18. Config::set('default_return_type', 'json');
  19. //检测是否有addon/config的权限
  20. if (!$this->auth->check('addon/config')) {
  21. $this->error('暂无权限');
  22. }
  23. $certname = $this->request->post('certname', '');
  24. $certPathArr = [
  25. 'cert_client' => '/addons/epay/certs/apiclient_cert.pem', //微信支付api
  26. 'cert_key' => '/addons/epay/certs/apiclient_key.pem', //微信支付api
  27. 'public_key' => '/addons/epay/certs/public_key.pem', //微信公钥证书
  28. 'app_cert_public_key' => '/addons/epay/certs/appCertPublicKey.crt',//应用公钥证书路径
  29. 'alipay_root_cert' => '/addons/epay/certs/alipayRootCert.crt', //支付宝根证书路径
  30. 'ali_public_key' => '/addons/epay/certs/alipayCertPublicKey.crt', //支付宝公钥证书路径
  31. ];
  32. if (!isset($certPathArr[$certname])) {
  33. $this->error("证书错误");
  34. }
  35. $url = $certPathArr[$certname];
  36. $file = $this->request->file('file');
  37. if (!$file) {
  38. $this->error("未上传文件");
  39. }
  40. //验证文件大小限制和后缀限制
  41. if (!$file->check([
  42. 'size' => $this->convertToBytes(config('upload.maxsize')),
  43. 'ext' => 'pem,crt',
  44. ])) {
  45. $this->error($file->getError());
  46. }
  47. //验证上传的文件内容是否符合pem,crt格式内容
  48. $fileContent = file_get_contents($file->getInfo('tmp_name'));
  49. if (!preg_match('/-----BEGIN(.*)-----[\s\S]+-----END(.*)-----/', $fileContent)) {
  50. $this->error("文件内容错误");
  51. }
  52. $file->move(dirname(ROOT_PATH . $url), basename(ROOT_PATH . $url), true);
  53. $this->success(__('上传成功'), '', ['url' => $url]);
  54. }
  55. protected function convertToBytes($size)
  56. {
  57. $units = ['b' => 1, 'k' => 1024, 'kb' => 1024, 'm' => 1048576, 'mb' => 1048576, 'g' => 1073741824, 'gb' => 1073741824];
  58. preg_match('/^(\d+(?:\.\d+)?)\s*([a-z]+)$/i', strtolower(trim($size)), $matches);
  59. return intval($matches[1] * $units[$matches[2]]);
  60. }
  61. }