| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | <?phpnamespace Yansongda\Pay\Gateways\Wechat;use Yansongda\Pay\Contracts\GatewayInterface;use Yansongda\Pay\Events;use Yansongda\Pay\Exceptions\GatewayException;use Yansongda\Pay\Exceptions\InvalidArgumentException;use Yansongda\Pay\Exceptions\InvalidSignException;use Yansongda\Supports\Collection;abstract class Gateway implements GatewayInterface{    /**     * Mode.     *     * @var string     */    protected $mode;    /**     * Bootstrap.     *     * @author yansongda <me@yansongda.cn>     *     * @throws InvalidArgumentException     */    public function __construct()    {        $this->mode = Support::getInstance()->mode;    }    /**     * Pay an order.     *     * @author yansongda <me@yansongda.cn>     *     * @param string $endpoint     *     * @return Collection     */    abstract public function pay($endpoint, array $payload);    /**     * Find.     *     * @author yansongda <me@yansongda.cn>     *     * @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 <me@yansongda.cn>     *     * @return string     */    abstract protected function getTradeType();    /**     * Schedule an order.     *     * @author yansongda <me@yansongda.cn>     *     * @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);    }}
 |