* * @throws InvalidArgumentException */ public function __construct() { $this->mode = Support::getInstance()->mode; } /** * Pay an order. * * @author yansongda * * @param string $endpoint * * @return Collection */ abstract public function pay($endpoint, array $payload); /** * Find. * * @author yansongda * * @param string|array $order */ public function find($order): array { return [ 'endpoint' => 'pay/orderquery', 'order' => is_array($order) ? $order : ['out_trade_no' => $order], 'cert' => false, ]; } /** * Get trade type config. * * @author yansongda * * @return string */ abstract protected function getTradeType(); /** * Schedule an order. * * @author yansongda * * @param array $payload * * @throws GatewayException * @throws InvalidArgumentException * @throws InvalidSignException */ protected function preOrder($payload): Collection { $payload['sign'] = Support::generateSign($payload); Events::dispatch(new Events\MethodCalled('Wechat', 'PreOrder', '', $payload)); return Support::requestApi('pay/unifiedorder', $payload); } }