QueryPacker.php 685 B

123456789101112131415161718192021222324252627282930313233
  1. <?php
  2. declare(strict_types=1);
  3. namespace Yansongda\Pay\Packer;
  4. use Yansongda\Pay\Contract\PackerInterface;
  5. use Yansongda\Supports\Str;
  6. class QueryPacker implements PackerInterface
  7. {
  8. public function pack(array $payload): string
  9. {
  10. return http_build_query($payload, '', '&');
  11. }
  12. public function unpack(string $payload): ?array
  13. {
  14. if (empty($payload) || !Str::contains($payload, '=')) {
  15. return [];
  16. }
  17. $result = [];
  18. foreach (explode('&', $payload) as $item) {
  19. $pos = strpos($item, '=');
  20. $result[substr($item, 0, $pos)] = substr($item, $pos + 1);
  21. }
  22. return $result;
  23. }
  24. }