问题描述

acg-faka用epusdt收款会验签失败,有人已经给官方提交issue,官方暂时没有回应,我自己修复了一下,修复后可以正常收款了。并且我已经给官方提交了PR

修复方法

修改文件app/Controller/User/Api/Order.phpapp/Controller/User/Api/RechargeNotification.php,在public function callback(): string方法中,添加以下代码:

if (empty($data) && isset($_SERVER['CONTENT_TYPE']) && $_SERVER['CONTENT_TYPE'] == 'application/json') {
  $json_string = file_get_contents('php://input');
  $data = json_decode($json_string, true);
}

修改后callback方法完整代码如下:

public function callback(): string
{
  $handle = $_GET['_PARAMETER'][0];
  $data = $_POST;
  if (empty($data)) {
      $data = $_REQUEST;
      unset($data['s']);
  }
  if (empty($data) && isset($_SERVER['CONTENT_TYPE']) && $_SERVER['CONTENT_TYPE'] == 'application/json') {
      $json_string = file_get_contents('php://input');
      $data = json_decode($json_string, true);
  }
  return $this->order->callback($handle, $data);
}

还需要修改acg-faka的epusdt插件:

路径:app/Pay/Epusdt/Impl/Signature.php

public static function generateSignature(array $data, string $key): string
{
  ksort($data);
  reset($data);
  $sign = '';
  foreach ($data as $k => $v) {
      if ($v == '') continue;
      $sign .= $k . '=' . $v . '&';
  }
  $sign = trim($sign, '&');
  return md5($sign . $key);
}

我的修改已经提交到github,可以直接下载使用。